![]() |
Re: mehrzeilige listbox-einträge
Moin!
@maddins: Weil Du per PN anfragtest, jo, da muß man etwas Tricksen. Wir basteln uns einen Record
Delphi-Quellcode:
Hinzufügen eines Items
type
PItem=^TItem; TItem packed record FileName:String; FileSize:Int64; Comment:String; UndWasHaltSonstNoch:TIrgendwas; end;
Delphi-Quellcode:
Anwendungsbeispiel
var Item:PItem;
... New(Item); If Item=nil then ... // Fehlerabfrage Item^.FileName:=...; Item^.FileSize:=...; Item^.Comment:=...; ListBox1.Items.AddObject(Item^.FileName, TObject(Item));
Delphi-Quellcode:
Und net vergessen, den Speicher mit Dispose wieder frei zu geben ;)
var Item:PItem;
... Item:=PItem(ListBox1.Items.Objects[ListBox1.ItemIndex]); Canvas.TextOut(0, 0, Item^.FileName); Canvas.TextOut(0, 20, IntToStr(Item^.FileSize)); Canvas.TextOut(0, 40, Item^.Comment); Zitat:
|
Re: mehrzeilige listbox-einträge
Zitat:
Daraus folgt: Caption := 's1' + #13+#10 + 's2'; (#13 = $0D und #10 = $0A) Mfg |
Re: mehrzeilige listbox-einträge
Oder die Konstante sLineBreak verwenden.
|
Re: mehrzeilige listbox-einträge
hallo,
danke für die hilfe. zwar hab ich solch eine art der implementation noch nie gesehen :? , werds aber ausprobieren und gucken, was ich damit alles anstellen kann. :thumb: bis dann maddins |
Re: mehrzeilige listbox-einträge
also ich hab jetzt mal testweise folgendes gemacht:
Delphi-Quellcode:
lieder bleibt er bei der zeile
procedure TForm1.Button3Click(Sender: TObject);
var eintrag:pitem; begin new(eintrag); eintrag^.zeile1:='test1'; eintrag^.zeile2:='test2'; eintrag^.zeile3:='test3'; ListBox1.Items.AddObject(eintrag^.zeile1, TObject(eintrag)); eintrag:=PItem(ListBox1.Items.Objects[ListBox1.ItemIndex]); listbox1.Canvas.TextOut(0, 0, eintrag^.zeile1); listbox1.Canvas.TextOut(0, 20, eintrag^.zeile2); listbox1.Canvas.TextOut(0, 40, eintrag^.zeile3); end;
Delphi-Quellcode:
mit folgender fehlermeldung stehen:
eintrag:=PItem(......);
"List index out of bounds (-1)" wenn ich fortsetze ist zwar der eintrag da mit dem inhalt aus "zeile1" aber mehr auch nicht. die restlichen zeilen fehlen. btw: was bewirken die ^ ?? maddins |
Re: mehrzeilige listbox-einträge
Abend!
Die ^ sagen dem Compiler, das es sich bei der Variable um einem dynamischen Zeiger auf ein Object o.ä. handelt (besser kann ichs um diese Zeit net ausdrücken ^^) Der Fehler liegt daren, das Du ListBox1.ItemIndex als Index verwendest Und ich mich zu wetten traue, das nicht in der ListBox markiert ist :zwinker: Abgesehen, das es keinen Sinn macht, es in dem ButtonClick Ereignis Zu zeichnen, das wäre besser im OnDrawItem der ListBox aufgehoben, da hast Du dann auch den Index, welcher gerade zu Zeichnen ist und die Variable Rect, damit Du auch weist wohin es gezeichnet werden soll ;) Sieh mal in die OH zum Thema ![]() |
Re: mehrzeilige listbox-einträge
Liste der Anhänge anzeigen (Anzahl: 1)
aha, jetz versteh ich langsam...
so sieht das jetz aus:
Delphi-Quellcode:
gibts egtl auch nen mittel gegen diese etwas "komische" darstellung, wenn man auf die einträge klickt??
procedure TForm1.Button3Click(Sender: TObject);
var eintrag:pitem; begin new(eintrag); eintrag^.zeile1:='test1'; eintrag^.zeile2:='test2'; eintrag^.zeile3:='test3'; ListBox1.Items.AddObject(eintrag^.zeile1, TObject(eintrag)); end; procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var item:pitem; begin Item:=PItem(ListBox1.Items.Objects[Index]); listbox1.Canvas.TextOut(0, index*40+0, Item^.zeile1); listbox1.Canvas.TextOut(0, index*40+12, Item^.zeile2); listbox1.Canvas.TextOut(0, index*40+24, Item^.zeile3); end; |
Re: mehrzeilige listbox-einträge
Jo gibt es, Du hast net das Beispiel der OH geguckt?
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var Item:PItem; begin // Die Variable Rect zeigt Dir den Bereich, wohin gezeichnet werden soll Item:=PItem(ListBox1.Items.Objects[Index]); Listbox1.Canvas.FillRect(Rect); // ! Bereich vorher löschen Listbox1.Canvas.TextOut(Rect.Left+1, Rect.Top+ 1, Item^.Zeile1); Listbox1.Canvas.TextOut(Rect.Left+1, Rect.Top+13, Item^.Zeile2); Listbox1.Canvas.TextOut(Rect.Left+1, Rect.Top+25, Item^.Zeile3); end; |
Re: mehrzeilige listbox-einträge
Liste der Anhänge anzeigen (Anzahl: 1)
jo! das funktioniert soweit ganz gut...
allerdings scheint er immer noch beim scrollen durcheinander zu kommen!? :wall: grüße maddins |
Re: mehrzeilige listbox-einträge
Moin!
Ja, der Screenshot is schön anzusehen, aber ohne zu wissen wie Dein Quellcode aussieht kann ich da nur schwer Fehler finden ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 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