![]() |
Text in Listbox zentrieren
Hallo,
ich erstelle während der laufzeit eine bestimmte anzahl von Listboxen. Nun möchte ich das der Inhalt der Listboxen zentriert ist deswegen habe ich es mit dem Befehl
Delphi-Quellcode:
jetzt haben die listboxen aber nicht mehr die eingestellte größe und sind alle in der mitte zentriert.
setwindowlong(APunkte[i].Handle ,GWL_Style , ES_CENTER);
Also nicht das was ich wollte wie schaffe ich es nun nur den text(Inhalt) der listboxen zu zentrieren hier noch mal der gesamte quellcode
Delphi-Quellcode:
APunkte : array of TListbox;
setlength(APunkte,unit1.anz); For i :=0 to High(APunkte) do begin APunkte[i] := TListbox.Create(self); with APunkte[i] do begin parent := TPunkt; Items.add (inttostr(aspieler[i].punkte[0])); Height := 320; Top := 105; Width := 85; Left := 15 + (i * 90); parent := self; end; setwindowlong(APunkte[i].Handle ,GWL_Style , ES_CENTER); end; |
DP-Maintenance
Dieses Thema wurde von "Sharky" von "Multimedia" nach "VCL / WinForms / Controls" verschoben.
Ist eher eine Frage für die VCL-Sparte |
Re: Text in Listbox zentrieren
hallo,
geht es denn wenn ich statt einer listbox ein memofeld nehme , weil ich ja bloß eine Zahlenreihe anzeigen will, und wenn ja wie schaffe ich es ein memofeld nur read only ist |
Re: Text in Listbox zentrieren
Hi,
es sollte funktionieren, wenn Du die Einträge der Listboxen selbst zeichnest. Dazu setzt Du die Eigenschaft Style auf den Wert lbOwnerDrawFixed und schreibst eine Behandlungsroutine für das Ereignis OnDrawItem. Diese Routine könnte so aussehen:
Delphi-Quellcode:
Die Erklärung der Parameter findest Du in der Online-Hilfe.
procedure TForm1.ListBox1DrawItem (Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); var Breite, x : Integer; begin // Pixelbreite des Eintrags bestimmen Breite := ListBox1.Canvas.TextWidth(ListBox1.Items[Index]); // x-Position des Eintrags bestimmen x := (Rect.Left + Rect.Right - Breite) div 2; // Eintrag darstellen ListBox1.Canvas.TextRect(Rect, x, Rect.Top, ListBox1.Items[Index]); end; Gruß Hawkeye |
Re: Text in Listbox zentrieren
Hallo,
kannst auch DrawText nehmen, dann brauchst Du nichts berechnen.
Delphi-Quellcode:
DrawText(ListBox1.Canvas.Handle,
PChar(ListBox1.Items[Index]), Length(ListBox1.Items[Index]), Rect, DT_CENTER); |
AW: Text in Listbox zentrieren
auch wenn es schon etwas älter ist, ist der Code auch anwendbar für Mobile Firemonkey Anwendungen?
Bzw. wie kann ich bei einer MF-Anwendung den Text in einer Listbox zentrieren? PS: Ich nutzte Delphi XE5, es ist eine Mobile Firemonkey Anwendung und es ist für Android! |
AW: Text in Listbox zentrieren
Ich kenne Firemonkey nicht, aber hat die ListBox eine DrawItem? DrawItem bedeutet, dass du das Item selbst zeichnest.
|
AW: Text in Listbox zentrieren
![]() Ebenso bei ![]() Ein Event ala OnDrawItem dürfte/könnte es aber auch in der FireMonkey-ListBox geben, so das du es selber zeichnen könntest, falls es dort nicht doch eine Möglichkeit gibt, den ListItems eine entsprechende Formatierungsoption mitzugeben. |
AW: Text in Listbox zentrieren
Hier ein Beispiel, kannst es testen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin with ListBox1 do Style := lbOwnerDrawFixed; end; procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var LB: TListBox; dTop, dLeft: Integer; Size: TSize; begin if not (Control is TListBox) then Exit; LB := Control as TListbox; Size := LB.Canvas.TextExtent(LB.Items[Index]); dTop := (LB.ItemHeight - Size.cy) div 2; dLeft := ((Rect.Right - Rect.Left) - Size.cx) div 2; LB.Canvas.TextRect(Rect, Rect.Left + 2 + dLeft, Rect.Top + dTop, LB.Items[Index]); end; |
AW: Text in Listbox zentrieren
Hallo,
Zitat:
![]() ![]() Gruß *) Die Angabe in der Hilfe taCenter sei der Defaultwert, ist für XE4 - vermutlich auch für XE5 - falsch (Default ist taLeading). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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