Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Linien Ausrichtung (https://www.delphipraxis.net/133808-linien-ausrichtung.html)

thiagojonas 9. Mai 2009 10:26


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:
for z := 0 to Pred(Listbox.Items.Count) do
      begin
       Variable:= Variable+ Listbox.Items.Strings[z]+': ______' + #13#10;
      end;
So das Problem ist jetzt natürlich, dass die Namen in der Listbox unterschiedlich lang sind, d.h.
dass die Ausgabe wie folgt aussehen könnte:

Zitat:

Peter : ______
Alexander : ______
Carolina : ______
Hans : ______
Mein Ziel ist es jetzt die Formatierung so hinzukriegen, dass ': ______' genau übereinander stehen.


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

jfheins 9. Mai 2009 10:43

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 ...

thiagojonas 9. Mai 2009 10:52

Re: Linien Ausrichtung
 
Zitat:

Wenn du Informationen spaltenweise darstellen willst, solltest du evtl. über eine Listview im reportmodus oder ein Stringgrid nachdenken Wink
Ich möchte das dann via Printer.Canvas Ausdrucken :-D

Wie kann ich den Längsten Eintrag suchen?

mkinzler 9. Mai 2009 10:55

Re: Linien Ausrichtung
 
Die Länge in Pixeln eines Eintrages einer Listbox kannst du mit
Delphi-Quellcode:
ListBox1.Canvas.TextWidth(ListBox1.Items[<Index>]);

thiagojonas 9. Mai 2009 11:04

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;

mkinzler 9. Mai 2009 11:06

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;

thiagojonas 9. Mai 2009 11:12

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?

thiagojonas 9. Mai 2009 12:03

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:

mkinzler 9. Mai 2009 12:09

Re: Linien Ausrichtung
 
Wenn du es sowieso auf einem Canvas ausgeben willst, kannst du es doch gleich pixelgaenau steuern

thiagojonas 9. Mai 2009 12:30

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 16:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz