Suche Komponente ähnlich der ListBox
-
Hi.
Ich habe beliebig viele "Objekte" welche mit einem Benutzertext beschrieben sind.
Jetzt möchte ich gern eine Auswahl anbieten wo die mehrzeiligen Texte gut auseinanderhaltbar aufgelistet werden. Kennt wer dafür eine gute schicke Komponente/Lösung?
-
Sowas in der Art meine ich http://www.tmssoftware.com/AdvCodeList.gif
-
Hallo
Du kannst eine TListBox nehmen und die Items selber zeichnen.
bis bald
akari
-
Ja. http://www.codeguru.com/cpp/controls/controls/lists,treesandcombos/article.php/c2291/
Habe dieses Beispiel gefunden, leider kein CBuilder Code.
Soweit habe ich es schon güt gelöst.
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) { TRect ARect = Rect; ListBox1->Canvas->Brush->Color = clYellow; ListBox1->Canvas->FillRect(ARect); ListBox1->Canvas->Font->Color = clBlack; DrawText(ListBox1->Canvas->Handle, ListBox1->Items->Strings[Index].c_str(), - 1, &ARect, DT_WORDBREAK); ListBox1->Canvas->Brush->Style = bsClear; ListBox1->Canvas->Pen->Color = clBlack; ListBox1->Canvas->Rectangle(ARect); } //--------------------------------------------------------------------------- void __fastcall TForm1::ListBox1MeasureItem(TWinControl *Control, int Index, int &Height) { Height = 50; }
Problem ist das ListBox1MeasureItem und sein Height. Ich möchte das natürlich Variable, aber wie bekomme ich die Höhe?
-
Hallo
Indem du in dem Measure-Event die Höhe des zu Zeichnenden Textes bestimmst. Mit einer Canvas-Methode (siehe BCB-Hilfe) bekommst du heraus wie hoch ein Text im aktuellen Font ist. Das must du noch mit der Anzahl der Zeilen multiplizieren und den Abstand zwischen den Zeilen hinzuaddieren.
Eventuell gibt es auch eine WinAPI-Funktion die die Höhe von mehrzeiligen Text gleich mitberechnet.
bis bald
akari
-
Na so einfach ist das nun nicht, ich weiss ja garnicht wieviele Zeilen das werden, das ja kein Font mit festen Zeichengrösse. Ich befürchte aber auch das zuviele Listeneinträge das dann aber auch sehr verlangsamt, jeden Eintrag dessen Höhe zu berechnen...
-
Hallo
Wenn du im Paint-Event weißt was du zeichnen must dann weißt du im Measure-Event auch wie hoch das sein soll.
Das dieses Vorgehen zu einer zusätzlichen Belastung führt die bei vielen Einträgen merkbar wird ist klar und auch nicht zu verhindern.bis bald
akari
-
Ich glaube du berücksichtigst nicht das jedes Schriftzeichen eine andere Breite hat. Ich weiss eben dadruch nicht, wieviele Zeilen es werden. Ich müsste es quasi erstmal wo "zeichnen" mit WordBreak als Bedingung und selben Zeilenbreite, um dies zu ermitteln. Oder lieg ich da falsch?
-
Hallo
Doch das habe ich berücksichtigt
Mit einer Canvas-Methode (siehe BCB-Hilfe) bekommst du heraus wie hoch ein Text im aktuellen Font ist. Das must du noch mit der Anzahl der Zeilen multiplizieren und den Abstand zwischen den Zeilen hinzuaddieren.
Eventuell gibt es auch eine WinAPI-Funktion die die Höhe von mehrzeiligen Text gleich mitberechnet.
bis bald
akari