AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alpha Zeichen auf Label machen

Ein Thema von Christian18 · begonnen am 27. Jun 2007 · letzter Beitrag vom 28. Jun 2007
Antwort Antwort
Seite 3 von 4     123 4      
24karatboy

Registriert seit: 12. Jun 2007
61 Beiträge
 
#21

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 13:24
ne brauchen die nicht danke für deine mühe markus ich werde die unicode komponenten mal installen

danke

mfg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#22

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 13:26
Oder auf der Homepage nachschauen:
www.tmssoftware.com/tmsuni.htm
Markus Kinzler
  Mit Zitat antworten Zitat
24karatboy

Registriert seit: 12. Jun 2007
61 Beiträge
 
#23

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 13:34
danke ttntspeedbutton wird unterstützt
  Mit Zitat antworten Zitat
24karatboy

Registriert seit: 12. Jun 2007
61 Beiträge
 
#24

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 13:40
die ordner design packages und source einfach ins delphi installverz ?
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 14:21
Zitat von SirThornberry:
@bitsetter: Welchen Sinn hat es das du 20 Byte speicher anforderst obwohl du nicht soviel nutzt.
Da war ich mir noch nicht sicher, ob ich 10 oder 12 Byte Speicher anfordern muss. Denn bei StringToWideChar(lStr, WText, Length(lStr) + 1); werden doch 12 Byte in den Speicher geschrieben wegen des NULL-Zeichens, oder sehe ich das falsch?Edit:war qatsch


Zitat von SirThornberry:
Und warum castest du WText zu PWideChar wenn es doch schon von dem Typ ist?
Ich wollte den Text quasi patchen und dabei nicht die Länge von 5 auf 1 setzen. Aber die Frage hast du dir mehr oder weniger schon selber beantwortet.


Zitat von SirThornberry:
Anstelle der festen 5 bei TextOutW kann man auch mit Length arbeiten
Das ist schon richtig, ist dann schon mehr Codeoptimierung. Mir ging es dabei mehr ums Prinzip, als um Copy & Paste Code, zumal sich Christian18 anscheinend schon entschieden hat.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#26

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 14:40
die Ausgangsfrage betreffend hab ich mal fix ein label gebastelt welches Unicode kann
Delphi-Quellcode:
unit uUnicodeLabel;

interface

uses
  windows, graphics, classes, controls, StdCtrls;

type
  TUnicodeLabel = class(TGraphicControl)
  strict private
    fAlignment : TAlignment;
    fCaption : WideString;
    fLayout : TTextLayout;
    fTransparent : Boolean;
    fWordWrap : Boolean;
    procedure SetAlignment(AValue: TAlignment);
    procedure SetCaption(ACaption: WideString);
    procedure SetLayout(AValue: TTextLayout);
    procedure SetTransparent(AValue: Boolean);
    procedure SetWordWrap(AValue: Boolean);
  published
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy(); override;

    procedure Paint(); override;
  published
    property Align;
    property Alignment: TAlignment read fAlignment write SetAlignment default taLeftJustify;
    property Anchors;
    property AutoSize default True;
    property Caption: WideString read fCaption write SetCaption;
    property Color;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Font;
    property HelpContext;
    property HelpKeyword;
    property HelpType;
    property Hint;
    property Layout: TTextLayout read fLayout write SetLayout default tlTop;
    property Margins;
    property ParentColor;
    property ParentFont;
    property ParentShowHint;
    property ShowHint;
    property Transparent: Boolean read fTransparent write SetTransparent default True;
    property WordWrap: Boolean read fWordWrap write SetWordWrap default False;
  end;

implementation

{ TPSUnicodeLabel }

constructor TUnicodeLabel.Create(AOwner: TComponent);
var
  lStyle : TControlStyle;
begin
  inherited Create(AOwner);
  lStyle := ControlStyle;
  Include(lStyle, csSetCaption);
  ControlStyle := lStyle;

  AutoSize := True;
  fCaption := '';
  fAlignment := taLeftJustify;
  fLayout := tlTop;
  fTransparent := True;
  fWordWrap := True;
end;

destructor TUnicodeLabel.Destroy;
begin

  inherited Destroy();
end;

procedure TUnicodeLabel.Paint;
var
  lFormat : Cardinal;
  lRect,
  lRect2 : TRect;
  lSize : TSize;
begin
  Canvas.Font.Assign(Font);

  if Transparent then
    Canvas.Brush.Style := bsClear
  else
  begin
    Canvas.Brush.Color := Color;
    Canvas.FillRect(Rect(0, 0, Width, Height));
  end;
  
  //TextOutW(Canvas.Handle, 0, 0, @fCaption[1], Length(fCaption));
  lFormat := 0;
  case fAlignment of
    taLeftJustify : lFormat := lFormat or DT_LEFT;
    taRightJustify: lFormat := lFormat or DT_RIGHT;
    taCenter : lFormat := lFormat or DT_CENTER;
  end;

  if fWordWrap then
    lFormat := lFormat or DT_WORDBREAK;

  lRect := Rect(0, 0, Width, Height);

  lRect2 := lRect;
  DrawTextW(Canvas.Handle, @fCaption[1], Length(fCaption), lRect2, lFormat or DT_CALCRECT);
  if (fLayout <> tlTop) then
  begin
    if (fLayout = tlBottom) then
    begin
      lRect.Top := Height - (lRect2.Bottom - lRect2.Top);
      lRect.Bottom := Height;
    end
    else
    begin
      lRect.Top := (Height - (lRect2.Bottom - lRect2.Top)) div 2;
      lRect.Bottom := lRect.Top + (lRect2.Bottom - lRect2.Top);
    end;
  end;
  

  DrawTextW(Canvas.Handle, @fCaption[1], Length(fCaption), lRect, lFormat);

  if AutoSize and (caption <> '') then
  begin
    lSize.cx := lRect2.Right - lRect2.Left;
    lSize.cy := lRect2.Bottom - lRect2.Top;
    if (lSize.cx <> Width) or (lSize.cy <> Height) then
    begin
      SetBounds(Left, Top, lSize.cx, lSize.cy);
      Invalidate();
    end;
  end;
end;

procedure TUnicodeLabel.SetAlignment(AValue: TAlignment);
begin
  if (AValue <> fAlignment) then
  begin
    fAlignment := AValue;
    Invalidate();
  end;
end;

procedure TUnicodeLabel.SetCaption(ACaption: WideString);
begin
  fCaption := ACaption;
  Invalidate();
end;

procedure TUnicodeLabel.SetLayout(AValue: TTextLayout);
begin
  if (AValue <> fLayout) then
  begin
    fLayout := AValue;
    Invalidate();
  end;
end;

procedure TUnicodeLabel.SetTransparent(AValue: Boolean);
begin
  if (AValue <> fTransparent) then
  begin
    fTransparent := AValue;
    Invalidate();
  end;
end;

procedure TUnicodeLabel.SetWordWrap(AValue: Boolean);
begin
  if (AValue <> fWordWrap) then
  begin
    fWordWrap := AValue;
    Invalidate();
  end;
end;

end.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#27

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 19:21
Schickes Ding. Ein kleiner Hinweis noch:

Die lokale Variable im Konstruktor kann man sich sparen:ControlStyle := ControlStyle + [csSetCaption]; Ausserdem habe ich mir angewöhnt bei Komponenten bei den Setter'n immer noch vor dem Invalidate folgende Bedingung zu setzen: if not ( csLoading in ComponentState ) then um Windows die ganzen Akkumulationen zu ersparen über die dreckigen Bereiche, schliesslich malst du als TGraphicControl auf dem DC deines Parents...
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#28

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 20:18
Hey super,

das mit dem neuen Label funktioniert echt super. Jetzt kann ich auch andere Zeichen darstellen. Ich bin dafür wenn das in die CodeLib. kommt.

LG Chris
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#29

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 20:32
Zitat von Christian18:
das mit dem neuen Label funktioniert echt super. Jetzt kann ich auch andere Zeichen darstellen. Ich bin dafür wenn das in die CodeLib. kommt.
Ja und? Hast du denn auch dem Vorschlag Taten folgen lassen und den entsprechenden Button neben dem Beitrag von SirThornberry gedrückt? Schliesslich kannst du dies selber auslösen...
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#30

Re: Alpha Zeichen auf Label machen

  Alt 28. Jun 2007, 20:39
ich versteh gerade deinen beitarg nicht sorry
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz