![]() |
Linien Ausrichtung
Hallo Leute,
ich habe eine kniffliges Problem. 1. Ich habe eine Listbox mit Namen: 2. Alle Namen die sich in der Listbox befinden, weise ich einer Varibalen zu und hänge noch ein ': ______' hinzu;
Delphi-Quellcode:
So das Problem ist jetzt natürlich, dass die Namen in der Listbox unterschiedlich lang sind, d.h.
for z := 0 to Pred(Listbox.Items.Count) do
begin Variable:= Variable+ Listbox.Items.Strings[z]+': ______' + #13#10; end; dass die Ausgabe wie folgt aussehen könnte: Zitat:
Mein Ansatz: Ich habe mir überlegt, dass wenn ich die Länge des längsten Namen in der Listbox in mm oder so berechne lasse und anschließend nur die Diefferenz zu den anderen Namen berechne und diese anschließen addiere, hätte ich das die X-Position für ': ______' erhalten. Kann man das so in der Art machen? Da ich keine Schrift benutze wo alles Ziffern gleich breit sind, und ich es auch nicht benutzen möchte kann ich diesen Weg schonmal ausschließen :D Danke im voraus :-D |
Re: Linien Ausrichtung
Wenn du Informationen spaltenweise darstellen willst, solltest du evtl. über eine Listview im reportmodus oder ein Stringgrid nachdenken ;)
Ansonsten: Längsten Eintrag suchen, länge merken und bei allen Einträgen entsprechend Leerzeichen hinzufügen. Zusätzlich am Ende ein Tabulator einfügen (um die Differenzen der Buchstabenbreiten auszugeleichen). Ist aber nur so ne Überlegung ... |
Re: Linien Ausrichtung
Zitat:
Wie kann ich den Längsten Eintrag suchen? |
Re: Linien Ausrichtung
Die Länge in Pixeln eines Eintrages einer Listbox kannst du mit
Delphi-Quellcode:
ListBox1.Canvas.TextWidth(ListBox1.Items[<Index>]);
|
Re: Linien Ausrichtung
Also so?
Delphi-Quellcode:
laenge:=0;
for i := 0 to Listbox.Items.Count -1 do begin Variable:= Listbox.items[i]; if length(Variable)>laenge then begin laenge:=length(s) Target:=Variable; end; end; Variable2:=ListBox1.Canvas.TextWidth(ListBox1.Items[laenge]);; end; |
Re: Linien Ausrichtung
Eher so
Delphi-Quellcode:
var
i, b, h: Integer; ... begin b := 0; for i := 0 to ListBox1.Count - 1 do begin //Ermittle breitesten String h := ListBox1.Canvas.TextWidth(ListBox1.Items[i]); if h > b then b := h; end; ... end; |
Re: Linien Ausrichtung
Äh.. Ja klar :lol: Danke
Okay und wenn ich dann die Länge habe in Px,kann ich dann ':_________' dahinter setzten? Also z.B Längster String hat 20Px Also setzte ich ':_________' für jeden Wert in der Listbox bei 20px. Geht das dann so? Und wenn ja, wie kann ich das ':_________' setzten mit MoveTo? |
Re: Linien Ausrichtung
Also vielleicht wäre ja eine andere Möglichkeit, dass man die Textbreite des Leerezeichens der Schrift berechnet.
Ich habe jetzt herausgefunden, dass bei der Schriftart 'Calibri' ein Leerzeichen 3Px lang ist. Kann man daraus was machen? Wenn ich den längsten Wert habe in der Listbox, dann müsste ich diese Länge mit den Längen der anderen Werte vergeleichen und demetsprechen die Anzahl der Lehrzeichen hinzufügen, aber wie? :gruebel: |
Re: Linien Ausrichtung
Wenn du es sowieso auf einem Canvas ausgeben willst, kannst du es doch gleich pixelgaenau steuern
|
Re: Linien Ausrichtung
Ja da hast du Recht, aber wie ich das anstellen soll weißt du auch nicht, oder?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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 by Thomas Breitkreuz