![]() |
TLabel + taRightJustify = katastrophe?
Hi DP,
Ich habe folgenden simplen Code:
Delphi-Quellcode:
Soweit, würdet ihr sagen, dass macht Probleme? Nein, keine Fehler/Warunungen, aber die Anzeige spielt verrückt. Und zwar ist er nicht beim 300. Pixel zu ende, sondern irgendwo bei 350 - 360.
lCaptionDesc := TLabel.Create(self);
with lCaptionDesc do begin Left := 300; Top := 3; Alignment := taRightJustify; Parent := tsFilter; Caption := 'Ein bischen Text... Bla bla blub'; end; Und egal welchen Text, Left + Width ergibt immer das gleiche. Erst, wenn Alignment normal ist, funktioniert Left wieder. Warum das denn bitte schön :) MfG xZise [edit]Bevor jemand meint, dass Left nach dem eingeben des Textes dann auf Left = 300 steht: Nein, dem ist nicht so![/edit] |
Re: TLabel + taRightJustify = katastrophe?
Auf was steht .AutoSize?
|
Re: TLabel + taRightJustify = katastrophe?
Warum sollte es bei 300 Pixeln zu ende sein? Da fängt es doch an.
|
Re: TLabel + taRightJustify = katastrophe?
Delphi-Quellcode:
[edit] :? [/edit]
with lCaptionDesc do
begin Left := 0; AutoSize := false; Width := 300; Top := 3; Alignment := taRightJustify; Parent := tsFilter; Caption := 'Ein bischen Text... Bla bla blub'; end; |
Re: TLabel + taRightJustify = katastrophe?
Zitat:
Zitat:
Und .Left wird nirgends geändert :) MfG xZise PS: Ich habe das mal isoliert mit ein paar Sachen, gleiches Problem ^^ [edit]WO BLEIBT MEINE REDBOX ^^ Zitat:
Aber warum so umständlich? [/edit] |
Re: TLabel + taRightJustify = katastrophe?
Setz mal Color auf z.B. clRed, dann wirst Du es sehen ;)
|
Re: TLabel + taRightJustify = katastrophe?
Hmm, richtiges Ergebnis, aber unlogisches Ergebnis.
Weil, wenn man das von oben im Komponentendesginer macht, funktioniert alles wunderbar ?! |
Re: TLabel + taRightJustify = katastrophe?
Ich finde das Ergebnis nicht unlogisch. Durch die Property AutoSize wird die Größe (und damit auch die Breite) an den Text angepasst. Und wenn Du Left auf 300 stellst, ist die linke Begrenzung eben 300. D.h. ergo, dass es nichts bringt, Alignment einzustellen, wenn AutoSize auf true steht.
|
Re: TLabel + taRightJustify = katastrophe?
Zitat:
|
Re: TLabel + taRightJustify = katastrophe?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Und dann tippt Text ein, und oh wunder. Left hat sich verändert (je nachdem, ob er Text hinzugefügt oder entfernt habt). :mrgreen: Und ich finde es unlogisch, dass er sich nach rechts schiebt, wenn er eigentlich nach links größer wird. MfG xZise PS: Testet es einfach mal selber aus, bevor ihr wieder meint es sei unlogisch :zwinker: [edit]Ich habe sogar noch etwas entdeckt. Wenn ihr den obigen Code nehmt (von mir), und während der Laufzeit, z.B. durch Buttonklick, Text hinzufügt, dann bewegt er sich auch nach links, und nicht nach rechts. Abgesehen davon, dass das LINKE Ende nicht 300 beträgt, sondern, je nach länge mehr/weniger sein kann. Ach ihr müsst noch nicht mal selber coden ^^ ich hänge mal die Exe an. Das Panel ist Links auf 300. Pixel ;) Der Text müsste als dort enden. Mit dem Button fügt ihr ein Zeichen hinzu. Das Label unten ist während der Desgintime erstellt worden ;)[/edit] [edit] Mist Anhang ^^[/edit] |
Re: TLabel + taRightJustify = katastrophe?
Das ist ein intelligentes Feature der IDE und kann zur Laufzeit ja nicht verfügbar sein.
|
Re: TLabel + taRightJustify = katastrophe?
Zitat:
[edit]Hier mein ganzer Code (bis auf die Deklaration von l und den Standardkram von Delphi):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin l.Caption := l.Caption + 'A'; end; procedure TForm1.FormCreate(Sender: TObject); begin l := tLabel.Create(self); l.Left := 300; // l.Width := 300; // l.AutoSize := false; l.Alignment := taRightJustify; l.Parent := Self; l.Top := 3; l.Caption := 'Hallo Welt'; Showmessage(IntToStr(l.Left)); end; |
Re: TLabel + taRightJustify = katastrophe?
Bei Ausrichtung rechts wird bei AutoSize auf der linken vergrößert/verkleinert
|
Re: TLabel + taRightJustify = katastrophe?
Irgendwas passt da aber nicht. Zumindest bei mir steht das Label zu weit rechts. Kontrolle mit einer Line bei 300.
Delphi-Quellcode:
var l: TLabel;
procedure TForm1.Button1Click(Sender: TObject); begin l.Caption := l.Caption + 'A'; end; procedure TForm1.FormCreate(Sender: TObject); begin l := tLabel.Create(self); l.Alignment := taRightJustify; l.Left := 300; l.Parent := Self; l.Top := 3; l.Caption := 'Hallo Welt'; end; procedure TForm1.FormPaint(Sender: TObject); begin Canvas.Pen.Color := clRed; Canvas.MoveTo(300,0); Canvas.LineTo(300,Height); end; procedure TForm1.FormDestroy(Sender: TObject); begin l.Free; end; |
Re: TLabel + taRightJustify = katastrophe?
Zitat:
So will ichs ja: Problem ist nur, dass er es im Create nicht so richtig will xD [edit] WANTED ------ REDBOX ------ ^^ Also DeddyH: Gucks dir beim Panel an. Panel1.Left ist 300. Und l.Left ist 317 (so im Dreh), also höher, weil l.Left + l.Width viel zu hoch ist, und eigentlich 300 ergeben sollte.[/edit] |
Re: TLabel + taRightJustify = katastrophe?
Dann mach es besser in .Loaded()
|
Re: TLabel + taRightJustify = katastrophe?
Zitat:
|
Re: TLabel + taRightJustify = katastrophe?
Weil man im onCreate keine Eigenschaften von Objekten setzen sollte, welche auch in der Dfm stehen, da diese dann mit denen überschrieben werden. Diese setzt man in der .Loaded-Methode, welche nach dem Laden der persistenten Eigenschaften aufgerufen wird.
|
Re: TLabel + taRightJustify = katastrophe?
|
Re: TLabel + taRightJustify = katastrophe?
manches setzt sich halt irgendwie im Gedächnis fest. :oops:
|
Re: TLabel + taRightJustify = katastrophe?
Delphi-Quellcode:
die erste Ausgabe ergibt "Left: 300 Width: 65". "65" ist also die Default-Breite eines (leeren) Labels. Wenn Du jetzt l.Caption den neuen Text zuweist, erhältst Du "Left: 316 Width: 49". Der Text ist als kürzer als die bisherige Breite, und daher wird (bei rechtsbündiger Ausrichtung) der Anfang des Labels nach rechts verschoben.
procedure TForm1.FormCreate(Sender: TObject);
begin l := tLabel.Create(self); l.Left := 300; l.Alignment := taRightJustify; l.Parent := Self; l.Top := 3; Showmessage('Left: ' + IntToStr(l.Left) + ' Width: ' + IntToStr(l.Width)); l.Caption := 'Hallo Welt'; Showmessage('Left: ' + IntToStr(l.Left) + ' Width: ' + IntToStr(l.Width)); end; jkr |
Re: TLabel + taRightJustify = katastrophe?
Zitat:
Zitat:
Ich hatte es schon mal mit .Width := 0 versucht, aber da hatte es auch nicht hingehauen, aber jetzt funzts :) Danke! MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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