Autor Beitrag
missi1
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 28.03.09 11:40 
Hi ,

wie kann man in einer ListBox die Ausgabeitems strukturiert anzeigen lassen.

Gruß Missi1.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 28.03.09 11:52 
Hallo,

du kannst die Items selber im Suche in: Delphi-Forum, Delphi-Library 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 02.04.09 10:04 
ich nehme mal an, du meinst zahlenwerte, die du dort alphanumerisch darstellst ?

z.b.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
1 
10
100
1000


und willst diese so
ausblenden Delphi-Quelltext
1:
2:
3:
4:
   1
  10
 100
1000


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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 02.04.09 11:12 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: Do 02.04.09 23:20 
Methode von Keldorn, also selber zeichnen und Textausgabe mit DrawText und dem Flag DT_RIGHT.
missi1 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 270

WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
BeitragVerfasst: Di 07.04.09 12:33 
naja, es gibt ja auch noch die TextOut-Methode für Canvas-Objekte (ListBox ist auch eines :D ). 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



BeitragVerfasst: Mi 08.04.09 12:27 
user profile iconpassiv hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Mi 08.04.09 12:42 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
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.


Oder als Schriftart Lucida Console nehmen! :8

_________________
Die Lösung ist nicht siebzehn.
passiv
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 270

WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
BeitragVerfasst: Mi 08.04.09 12:56 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
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 :wink:

_________________
Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
missi1 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 18.04.09 17:52 
Hi,

nach einigen Versuchen mit mit der OnDrawItem-Procedure

ausblenden 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 user profile iconmatze: Delphi-Tags hinzugefügt
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Sa 18.04.09 18:10 
user profile iconpassiv hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
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 :wink:


Stimmt :mrgreen:...

_________________
Die Lösung ist nicht siebzehn.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 01.05.09 22:55 
Hallo,

user profile iconhansa hat folgendes geschrieben Zum zitierten Posting springen:
Ja, das geht schon und nennt sich Proportionalschriften. Z.B. Courier. ...

da war doch mal was :gruebel:
:arrow: www.delphi-forum.de/....php?p=482994#482994 kann jedem mal passieren :mrgreen:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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."