AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

mehrzeilige listbox-einträge

Ein Thema von maddins · begonnen am 9. Apr 2007 · letzter Beitrag vom 11. Okt 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#11

Re: mehrzeilige listbox-einträge

  Alt 9. Apr 2007, 23:27
Moin!

@maddins: Weil Du per PN anfragtest, jo, da muß man etwas Tricksen.

Wir basteln uns einen Record
Delphi-Quellcode:
type
  PItem=^TItem;
  TItem packed record
     FileName:String;
     FileSize:Int64;
     Comment:String;
     UndWasHaltSonstNoch:TIrgendwas;
  end;
Hinzufügen eines Items
Delphi-Quellcode:
   var Item:PItem;
...
   New(Item);
   If Item=nil then ... // Fehlerabfrage

   Item^.FileName:=...;
   Item^.FileSize:=...;
   Item^.Comment:=...;

   ListBox1.Items.AddObject(Item^.FileName, TObject(Item));
Anwendungsbeispiel
Delphi-Quellcode:
   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);
Und net vergessen, den Speicher mit Dispose wieder frei zu geben


Zitat von LAWn-M0W3R:
und was die Benutzerfreundlichkeit angeht, so mach es wie Sunlight7 und bau nen Farbverlauf in die Paint-Prozedur!
Nicht in die Paint, in die OnDrawItem
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#12

Re: mehrzeilige listbox-einträge

  Alt 9. Apr 2007, 23:32
Zitat von LAWn-M0W3R:
Hier noch eine Möglichkeit:

Du willst einfach nur mehrere Zeilen? Dann unterteile den jeweiligen String doch einfach in eine Art stringlist.
Also, wenn du da so ein neues item.Caption oder so einfügst, dann sagst du ihm einfach:
Caption := 'string1' + chr($0D) {Zeichen für Zeilenumbruch} + 'string2' + chr($0D) + 'string3'; Das sieht dann so aus:
Zitat:
string1
string2
string3
...und was die Benutzerfreundlichkeit angeht, so mach es wie Sunlight7 und bau nen Farbverlauf in die Paint-Prozedur!
Hoffe geholfen zu haben!
Schönen Abend noch und Grüße vom Max
Das zeichen für Zeilenumbruch ist aber $0D + $0A!

Daraus folgt:

Caption := 's1' + #13+#10 + 's2';

(#13 = $0D und #10 = $0A)

Mfg
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: mehrzeilige listbox-einträge

  Alt 10. Apr 2007, 06:19
Oder die Konstante sLineBreak verwenden.
Markus Kinzler
  Mit Zitat antworten Zitat
maddins

Registriert seit: 3. Nov 2006
16 Beiträge
 
#14

Re: mehrzeilige listbox-einträge

  Alt 12. Apr 2007, 21:56
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.

bis dann
maddins
  Mit Zitat antworten Zitat
maddins

Registriert seit: 3. Nov 2006
16 Beiträge
 
#15

Re: mehrzeilige listbox-einträge

  Alt 12. Apr 2007, 22:26
also ich hab jetzt mal testweise folgendes gemacht:

Delphi-Quellcode:
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;
lieder bleibt er bei der zeile
eintrag:=PItem(......); mit folgender fehlermeldung stehen:

"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
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#16

Re: mehrzeilige listbox-einträge

  Alt 12. Apr 2007, 22:39
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

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 Delphi-Referenz durchsuchenOnDrawItem, Da findest Du auch ein Beispiel dazu
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
maddins

Registriert seit: 3. Nov 2006
16 Beiträge
 
#17

Re: mehrzeilige listbox-einträge

  Alt 13. Apr 2007, 09:45
aha, jetz versteh ich langsam...

so sieht das jetz aus:

Delphi-Quellcode:
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;
gibts egtl auch nen mittel gegen diese etwas "komische" darstellung, wenn man auf die einträge klickt??
Miniaturansicht angehängter Grafiken
utest_133.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#18

Re: mehrzeilige listbox-einträge

  Alt 13. Apr 2007, 14:42
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;
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
maddins

Registriert seit: 3. Nov 2006
16 Beiträge
 
#19

Re: mehrzeilige listbox-einträge

  Alt 16. Apr 2007, 22:49
jo! das funktioniert soweit ganz gut...

allerdings scheint er immer noch beim scrollen durcheinander zu kommen!?

grüße
maddins
Miniaturansicht angehängter Grafiken
utest_175.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#20

Re: mehrzeilige listbox-einträge

  Alt 17. Apr 2007, 00:22
Moin!

Ja, der Screenshot is schön anzusehen, aber ohne zu wissen wie Dein Quellcode aussieht kann ich da nur schwer Fehler finden
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 Uhr.
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