![]() |
Alpha Zeichen auf Label machen
Hallo,
wie kann ich ein Alpha zeichen (ich meine den griech. Buchstaben, womit man Winkel kennzeichnet) als Caption eines Labels machen? LG Chris |
Re: Alpha Zeichen auf Label machen
du musst eine Schriftart finden welche das Zeichen unterstützt. Am besten schaust du da in der Zeischentabelle noch (Startmenü->Programme->Zubehör->Systemprogramme->Zeichentabelle)
|
Re: Alpha Zeichen auf Label machen
Hallo,
so schlau bin ich auch schon gewesen. hat abeer leider nichts gebracht. Ich kann das Alpha Zeichen in der Schrift Arial finden. Wenn ich versuche es zu kopieren, erscheint aber ein ? Was kann ich nun tun? Ich brauche dieses Zeichen dringend und kann auch leider nicht Alpha hinschreiben. LG Chris |
Re: Alpha Zeichen auf Label machen
Nimm Symbol. In Arial gibts das Alpha nur in Unicode, und da die VCL kein Unicode unterstützt, kannst du das vergessen.
|
Re: Alpha Zeichen auf Label machen
Zitat:
|
Re: Alpha Zeichen auf Label machen
Wenn das nicht etwas Overkill ist. ;)
|
Re: Alpha Zeichen auf Label machen
Nur für diesen Fall. Könnte sich aber langfristig lohnen. Oder er wartet bis nächstes jahr.
|
Re: Alpha Zeichen auf Label machen
hi,
ich habe das problem schon ein bisschen anders gelöst. ist bestimmt nicht die eleganteste variante, aber es funktioniert auch. Ich habe einfach einen Screenshot gemacht, dann habe ich mir das zeichen ausgeschnitten und dann als Image in mein Projekt hinzugefügt. PS: Trotzdem vielen dank für die zahlreichen antworten. Das mir einem Jahr waren überlege ich mir nochmal in ruhe :D LG Chris |
Re: Alpha Zeichen auf Label machen
Hi,
eventuell könntest mit TextOutW oder DrawTextW den Text selber zeichnen.
Delphi-Quellcode:
var
WText: PWideChar; begin GetMem(WText, 20); StringToWideChar(' = 3°',WText, 6); PWidechar(WText)^:= WideChar($03B1);//Alpha Zeichen canvas.Font.Name := 'Arial'; TextOutW(canvas.Handle, 10, 10, WText, 5); FreeMem(WText, 20); |
Re: Alpha Zeichen auf Label machen
@bitsetter: Welchen Sinn hat es das du 20 Byte speicher anforderst obwohl du nicht soviel nutzt. Und warum schreibst du ' = 3°' in den WideChar? Und warum castest du WText zu PWideChar wenn es doch schon von dem Typ ist? Das ist jetzt keine blose Kritik sondern sind ernst gemeinte Fragen da ich micht mit der Handhabung von Unicode nicht so recht auskenne und man ja nur dazu lernen kann wenn man auch versteht was man tippt.
[Edit] ok, das mit dem ' = 3°' versteh ich jetzt. Da wird das erste Zeichen (Leerzeichen) dann durch's Alphazeichen ersetzt. Anstelle der festen 5 bei TextOutW kann man auch mit Length arbeiten Nach meinem Verständnis wäre das ganze doch so am besten (zwecks einfacher Änderung des Textes ohne die Zahlen für die Länge gesondert anpassen zu müssen)
Delphi-Quellcode:
[/Edit]
var
WText : PWideChar; lStr : String; begin lStr := ' = 3°'; GetMem(WText, Length(lStr) * 2); StringToWideChar(lStr, WText, Length(lStr) + 1); PWidechar(WText)^:= WideChar($03B1);//Alpha Zeichen canvas.Font.Name := 'Arial'; TextOutW(canvas.Handle, 10, 10, WText, Length(WText)); FreeMem(WText); |
Re: Alpha Zeichen auf Label machen
wo schreibt der das wurzelzeichen dann rein ? sorry bin noch nicht so fortgeschritten ;)
wie würde das aussehen wenn ich es in speedbuttonwu.caption rein schreiben möchte ? |
Re: Alpha Zeichen auf Label machen
in eine speedbutton-caption kannst du es nicht schreiben weil diese vom Typ TCaption ist und somit nicht unicodefähig.
Das Zeichen würde an die erste Stelle geschrieben werden |
Re: Alpha Zeichen auf Label machen
schlecht das gleiche problem hatte ich nämlich auch mit dem wurzelzeichen bzw. habs immernoch ...
|
Re: Alpha Zeichen auf Label machen
Zitat:
|
Re: Alpha Zeichen auf Label machen
ja das mit den unicode controls ist mir atm ein wenig zu aufwendig um ein wurzelzeichen darzustellen dann schreib ich lieber WU
|
Re: Alpha Zeichen auf Label machen
Die Installation ist in wenigen Minuten erledigt.
|
Re: Alpha Zeichen auf Label machen
ja aber die einarbeitung nicht und möchte mir das mal ansehen und nicht nur drüberfliegen..
|
Re: Alpha Zeichen auf Label machen
Da gibt es eigentlich nichts einzuarbeiten. Die Sammlung von TNT (welche nun von TMS weiterentwickelt wird) beinhaltete Komponenetn, die sich außer der Unicodefähigkeit nicht von den VCL-Originalen unterscheiden.
|
Re: Alpha Zeichen auf Label machen
un da gibts dann ne speedbutton komponente die unicodefähig ist oder ist dann delphi komplett unicode fähig?
|
Re: Alpha Zeichen auf Label machen
man könnte ja selber nachschauen, es gibt aber sicher andere hier die das für dich erledigen.
|
Re: Alpha Zeichen auf Label machen
ne brauchen die nicht danke für deine mühe markus ich werde die unicode komponenten mal installen
danke mfg |
Re: Alpha Zeichen auf Label machen
|
Re: Alpha Zeichen auf Label machen
danke ttntspeedbutton wird unterstützt ;)
|
Re: Alpha Zeichen auf Label machen
die ordner design packages und source einfach ins delphi installverz ?
|
Re: Alpha Zeichen auf Label machen
Zitat:
Delphi-Quellcode:
werden doch 12 Byte in den Speicher geschrieben wegen des NULL-Zeichens, oder sehe ich das falsch?Edit:war qatsch
StringToWideChar(lStr, WText, Length(lStr) + 1);
Zitat:
Zitat:
|
Re: Alpha Zeichen auf Label machen
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. |
Re: Alpha Zeichen auf Label machen
Schickes Ding. Ein kleiner Hinweis noch:
Die lokale Variable im Konstruktor kann man sich sparen:
Delphi-Quellcode:
Ausserdem habe ich mir angewöhnt bei Komponenten bei den Setter'n immer noch vor dem Invalidate folgende Bedingung zu setzen:
ControlStyle := ControlStyle + [csSetCaption];
Delphi-Quellcode:
um Windows die ganzen Akkumulationen zu ersparen über die dreckigen Bereiche, schliesslich malst du als TGraphicControl auf dem DC deines Parents...
if not ( csLoading in ComponentState ) then
|
Re: Alpha Zeichen auf Label machen
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 |
Re: Alpha Zeichen auf Label machen
Zitat:
|
Re: Alpha Zeichen auf Label machen
ich versteh gerade deinen beitarg nicht sorry
|
Re: Alpha Zeichen auf Label machen
Hi,
er meinte bestimmt die Glühlampe http://www.delphipraxis.net/images/p...odelibrary.gif neben den Beitrag von SirThornberry. |
Re: Alpha Zeichen auf Label machen
Achso,
dann kann er das doch so sagen. Ich finde er hat ein bisschen um das eigentliche problem herrumgeredet. :D:D:D nicht böse gemeint!!! Ja das mit der Glühbirne habe ich schon gemacht. LG Chris |
Re: Alpha Zeichen auf Label machen
Zitat:
Nächstes mal lasse ich es einfach und klick den Button selber. Sorry.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz