ListBox mit Columns
-
Hallo,
ich hab eine ListBox mit 4 Columns. Aber wie kann ich in die einzelnen Columns was rein schreiben???
-
Soviel ich weiss, kennt TListBox keine Columns... bitte äussere dich etwas konkreter?
-junix
-
OK soviel hab ich jetzt auch rausgefunden das das mit TListBox nicht geht.
aber mit TListView geht das.
ich will zb vornamen und namen in einer extra spalte in einer TListView haben.
-
Schau doch mal in der VCL-Hilfe die Doku zum Thema TListView::Items::Item und den zugehörigen Eigenschaften zu Rate gezogen? Da gibts sowas schönes wie "UnterTeile" (o;
-junix
-
0 Punkte, junix.
TListBox kennt Columns. Du kannst allerdings nicht direkt auf die einzelnen Columns zugreifen, es wird automatisch in die 2. Column geschrieben, wenn die erste voll ist. Ungefähr so:
____________________________________________ |a |dsfg | | |test |//hier gehts weiter| | |c | | | |c | | | |c | | | |_____|___________________|_________________|
Edit: ASCII-Bilder halten verdammt lange auf...
-
Eßer schrieb:
0 Punkte, junix.
Dafür gibts für Eser -100 Punkte weil er voll am Thema vorbeigeschrieben hat. Das ist wohl keine Praktikable lösung, die Listbox einfach mit Items aufzufüllen bis die nächste Spalte kommt... Das ist dann wirklich Basteln.
wärst du jetzt mit Tabstopps gekommen, hätts nur -50 Gegeben, aber so...
-junix
-
Er wollte doch unbedingt TListBox...
Aber ansonsten hast du natürlich Recht.
Edit: BTW: Nur zum Verständnis: Ich bezog mich mit den 0 punkten auf deine Aussage TListBox kenne keine Columns. Hatte die anderen Beiträge noch nicht gesehn.
-
Das mit Tabulatoren funktioniert nicht so einfach, dazu muss man in OnDrawItem den Text mit TabbedTextOut ausgeben.
Ganzneben bei: Ich hab mal vor paar Jahren, als ich mit der Programmierung anfing, in Delphi eine Kompontente geschrieben, die mehrere Spalten unterstützt. Wenn es einen Bedarf gibt, dann kann ich entweder Posten oder mailen. Die ist aber von TComboBox abgeleitet, mit wenigen Veränderungen lässt sich auch als ListBox einsetzen.
-
TListItem* a = ListView1->Items->Add();
a->Caption = "poink";
a->SubItems[0].Text = "narf";
a->SubItems[1].Text = "Warum heißen die Gabelstabler Gabelstabler, wenn man damit keine Gablen stapelt, Brain?"0 = 1. Subitem
1 = 2. Subitem
usw.
-
also ich hab da was, was vielleicht weiterhilft
ich hab folgendes auf meiner Form
ein Panel
darauf ist ein THeaderControl (name hdr1)
und eine ListBox (lb1)
(das Panel, damit sich die beiden Elemente besser aneinander ausrichten lassen)in der Headercontrol habe ich die Spaltenüberschriften festgelegt (und indirekt auch die Spaltenbreite)
in der "DrawItem"Routine der Listbox steht nun folgendes:
int p, len, x, Offset = 2; TListBox *ListBox = (TListBox*) Control; TCanvas *Canvas = ListBox->Canvas; THeaderControl *Header = hdr1; AnsiString str = ListBox->Items->Strings[ Index ]; x = Rect.Left; Canvas->FillRect( Rect ); // Abschnitte ( je nachdem wieviele abschnitte man mit HeaderControl- // unterteilungen gemacht hat) for (int i=0; i < 4; i++ ) { // Abschnittsstring bis Separator // p: Position bis vor Sep. // len: Länge einschließlich mit/ohne Sep. if ( (p = str.Pos( SECTION_SEP )) == 0) len = p = str.Length(); else len = p--; Rect.Right = Rect.Left + Header->Sections->Items[i]->Width; Canvas->TextRect( Rect, x + Offset + Header->Sections->Items[i]->Left, Rect.Top, str.SubString( 1, p ) ); // Rect-Bereich nach rechts schieben Rect.Left += Header->Sections->Items[i]->Width; str.Delete( 1, len ); }
dazu muss noch gesagt werden, dass SECTION_SEP ein define ist (bei mir #define SECTION_SEP '\f' )
jetzt schreibt man folgendermaßen in die Listbox:
lb1->Add("Text1"+SECTION_SEP+"Text2"+SECTION_SEP+[...]);
ich hoffe ich konnte helfen und habe auch nichts vergessen