Autor Beitrag
ich1506
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 49

Win XP, Win 98, Win 2000, Eisfair
Delphi 5 Enterp
BeitragVerfasst: Sa 23.09.06 00:34 
Hallo!

Ich wollte ein Label haben, dass am Besten eine feste Buchstabenbreite hat, doch mit jeder beliebigen Schrift (also nicht nur z.B Courier).
Aber mit Label1.Font.Pitch:=fpFixed funktioniert das ja nicht immer.
Also es würde auch erstmal reichen, wenn einfach zwischen den Zeichen etwas mehr Platz ist.
Aber mit setTextCharacterExtra(Label1.Font.Handle,5); tut sich auch nix an der Schrift.

Wer kann mir helfen?
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: So 24.09.06 00:47 
user profile iconich1506 hat folgendes geschrieben:
Hallo!

Ich wollte ein Label haben, dass am Besten eine feste Buchstabenbreite hat, doch mit jeder beliebigen Schrift (also nicht nur z.B Courier).
Aber mit Label1.Font.Pitch:=fpFixed funktioniert das ja nicht immer.
Also es würde auch erstmal reichen, wenn einfach zwischen den Zeichen etwas mehr Platz ist.
Aber mit setTextCharacterExtra(Label1.Font.Handle,5); tut sich auch nix an der Schrift.

Wer kann mir helfen?


Hallo,

Funktionen wie SetTextCharacterExtra sollten mit der Markierung NID versehen sein - Not in Delphi. Dazu braucht man einen Windows-DC und muss den Text mit der entsprechenden Windows-Fuktion ausgeben. Die Labelkomponente dagegen setzt den Font wie sie ihn gespeichert hat (da steht nix von extra spacings) und schreibt den Text, daher läuft so etwas wie SetTextCharacterExtra völlig an der Komponente vorbei.

Ein Font ist fixed oder eben nicht, man kann die Eigenschaft nicht setzen, sondern nur den Font danach auswählen.

Ich sehe da nur die ganz grosse Lösung: OwnerDraw bzw. Paint abfangen und die Buchstaben einzeln in konstantem Abstand schreiben.

Gruss Reinhard

Nachtrag: der Aufruf war sowieso falsch, SetTextCharacterExtra braucht das DC-Handle, nicht den Font.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 25.09.06 00:00 
Hallo,

mit einem Label geht es nicht,
aber man kann direkt auf z.B. Form.Canvas Text mit fester Buchstabenbreite ausgeben:
ausblenden Delphi-Quelltext
1:
2:
3:
SetTextCharacterExtra(Form1.Canvas.Handle,5);
Form1.Canvas.Brush.Style := bsClear;
Form1.Canvas.TextOut(0,0,'Hallo');

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
ich1506 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 49

Win XP, Win 98, Win 2000, Eisfair
Delphi 5 Enterp
BeitragVerfasst: Sa 07.10.06 13:31 
Ok, erstmal ein Dankeschön für die Antworten! :D

Schade, dass es so direkt am Font nicht zu ändern geht, dann muss ich Wohl oder Übel meine Komponente noch einmal neu zusammenbasteln / ändern.

Mal sehen, wie ich es dann mache... Ich glaube, dass die Idee mit dem Label so wie ich es mir gedacht hatte (also im Zusammenhang mit meinem Programm) so nicht ganz gut ist.

Wenn es was neues gibt, kann ich es ja hier post