| Autor |
Beitrag |
missi1
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 28.03.09 11:40
Hi ,
wie kann man in einer ListBox die Ausgabeitems strukturiert anzeigen lassen.
Gruß Missi1.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Sa 28.03.09 11:52
Hallo,
du kannst die Items selber im ONDRAWITEM selbst zeichnen. Im Forum solltest Du genügend Beispiele dazu finden.
Ansonsten nochmal nachfragen und genau sagen, wie die Formatierung aussehen soll.
Gruß Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
missi1 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 02.04.09 09:20
Hallo Frank ,
also in den verschieden ListBoxen sollte der Inhalt mit unterschiedlich "langen" Einträgen ähnlich einer Tabellen-Kalkulation sichbar gestaltet werden.
Viele eigene Experimente mit Stinglängen-Formaten scheiterten.
Gruß Missi1.
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Do 02.04.09 10:04
ich nehme mal an, du meinst zahlenwerte, die du dort alphanumerisch darstellst ?
z.b.
Delphi-Quelltext
und willst diese so
Delphi-Quelltext
darstellen ?
dann könntest du die größte (= als String längste) Zahl ermitteln,
diese größe merken und allen anderen Zahlen
z.b Leerzeichen oder nullen voranstellen. mit
length(IntToStr(1000))
erfährst du die Länge einer Zahl, mit
längsteZahl - length(IntToStr(eineZahl)
ermittelst du, wie viele Zeichen dir fehlen, die brauchst du dann nur noch deinem Eintrag voranstellen.
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 02.04.09 11:12
zuma hat folgendes geschrieben : | ich nehme mal an, du meinst zahlenwerte, die du dort alphanumerisch darstellst ?
dann könntest du die größte (= als String längste) Zahl ermitteln,
diese größe merken und allen anderen Zahlen
z.b Leerzeichen oder nullen voranstellen. mit
length(IntToStr(1000))
erfährst du die Länge einer Zahl, mit
längsteZahl - length(IntToStr(eineZahl)
ermittelst du, wie viele Zeichen dir fehlen, die brauchst du dann nur noch deinem Eintrag voranstellen. |
das geht allerdings nur bei schriftarten bei denen alle Zeichen die gleiche breite haben.
wenn das nicht der Fall ist, würde ich die methode von Keldorn nochmal in betracht ziehen.
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 02.04.09 23:20
Methode von Keldorn, also selber zeichnen und Textausgabe mit DrawText und dem Flag DT_RIGHT.
|
|
missi1 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 07.04.09 12:27
Hallo,
vielen Dank für die Antworten.
Auf die Methode zuma war ich auch schon mal gekommen , leider geht das nicht , da die Zahlen und Zeichen verschiedene Breiten haben ( 12,44 od. 232D4 oder ...Lösung etc).
Die Methode Keldorn verstehe ich leider nicht.Kleine Hilfe (?).
Gruß Missi1.
|
|
passiv
      
Beiträge: 270
WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
|
Verfasst: Di 07.04.09 12:33
naja, es gibt ja auch noch die TextOut-Methode für Canvas-Objekte (ListBox ist auch eines  ). Und da sagt man dem den Text und die X- und Y-Koordinaten. Die Y kriegst du über das mitgelieferte Rect.Top, den X-Wert rechnest du dir aus, indem du ListBox1.Canvas.TextWidth(TextZumAusgeben) von deinem rechtesten Punkt abziehst.
Bis dann
_________________ Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 08.04.09 12:27
passiv hat folgendes geschrieben : | | den X-Wert rechnest du dir aus, indem du ListBox1.Canvas.TextWidth(TextZumAusgeben) von deinem rechtesten Punkt abziehst. |
Und was ist daran jetzt anders als DrawText mit DT_RIGHT?
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Mi 08.04.09 12:42
_________________ Die Lösung ist nicht siebzehn.
|
|
passiv
      
Beiträge: 270
WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
|
Verfasst: Mi 08.04.09 12:56
Luckie hat folgendes geschrieben : | | Und was ist daran jetzt anders als DrawText mit DT_RIGHT? |
Ähmm, kA ... hab das von missi1 falsch verstanden, hab gedacht, da wäre schon das DrawText ausprobiert worden. Dabei scheints am Grundsatz zu fehlen ...
@missi1: weißt du denn, wie man die OnDrawItem-Prozedur kreiert und dann benutzt?
@Mitmischer 1703: oder Courier New 
_________________ Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
|
|
missi1 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 18.04.09 17:52
Hi,
nach einigen Versuchen mit mit der OnDrawItem-Procedure
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var text : string;
begin ListBox1.CanVas.TextOut(20,Rect.top,Items[index]); end;
procedure TForm1.AReiheClick(Sender: TObject); var ii:integer; begin for ii:=1 to 5 do begin ListBox1.items.Add(FloatToStr(y)+'...ein 1.Satz'+'...2.Satz'); y:=y+100; end; end; |
kann man jetzt an eine beliebige Position das Element im ListFeld setzen,doch
ein zweites oder drittes unabhäniges Element zu positionieren ist mir nicht
gelungen.
Vielleicht hat jemand eine Lösung.
Gruß Missi1.
Moderiert von matze: Delphi-Tags hinzugefügt
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Sa 18.04.09 18:10
_________________ Die Lösung ist nicht siebzehn.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Sa 18.04.09 18:36
Hallo
setze bitte deinen Code in delphi-tags, das ließt sich besser.
| Zitat: |
ListBox1.items.Add(FloatToStr(y)+'...ein 1.Satz'+'...2.Satz');
|
ich dann jetzt davon aus, das Du sowas haben willst:
| Zitat: |
12,44 xyz abc
18,45 zxy vvcxyv
136,63 vgcx gfgdfgdf
...
|
Wenn ja, dann ist eine Listbox das ungeeigneste. Nimm ein Listview im viewstyle vsreport und füge per columns eigenschaft die Spalten hinzu, die kannst du auch rechts/linksbündig setzen.
Ein Bsp, wie du zur Listview Zeilen hinzufügst, findest du in der Delphi-Hilfe.
Wenn die Daten geändert werden sollen können, nimm ein stringgrid
Gruß Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Fr 01.05.09 15:36
Zum Thema mit den Leerzeichen davor:
Kann man da in der ListBox nicht unter Font einen Schriftsatz einstellen, bei dem alle Zeichen die gleiche Länge/Breite haben?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 01.05.09 20:10
Ja, das geht schon und nennt sich Proportionalschriften. Z.B. Courier. Da ginge ohne Verrenkungen auch die Listbox. Ansonsten gibts noch Stringgrid, aber da müssten alle Zellen einzeln formatiert werden.
_________________ Gruß
Hansa
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Fr 01.05.09 22:55
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Sa 02.05.09 15:39
Du hast hier mehrere Möglichkeiten... zum einen, wie schonmal von Keldorn gesagt, gleich ein TListView nehmen, das ist dafür gedacht.
Ansonsten findet man da auch Fertig-Komponenten, falls man das für irgendwas mit einer TListBox machen muss. Stichwort ist hier "TabListBox".
Tja, und ansonsten selber schreiben. Grundgedanke ist, dass du deinen Text aufteilst und per TextOut mit an verschiedenen X-Positionen in der Zeile ausgibst. Da kannst du dann auch noch Alignment & co implementieren.
Ist aber wie gesagt in einem Listview alles schon drin.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|