Button in Listbox einfügen
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Button in Listbox einfügen
Hi!
Ich hätte gerne eine Listendarstellung, wie die aus dem Anhang (das Ubuntu Software Center), also mit mehrzeiligem Titel, bild und button in der Listbox.
Also habe ich eine neue Klasse von TCustomListbox abgeleitet und dann ewig rumprobiert, den gewünschten Effekt zu erreichen.
Das Ergebnis ist - nichts. Es gibt nichtmal Fehlermeldungen, die Listbox tut einfach überhaupt nichts, was ich programmiere.
Also: Ist sowas plattformunabhängig mit der LCL möglich? Und wenn ja, wie? Ich kenne mich in der grafischen LCL nämlich nicht wirklich gut aus.
Ich hätte gerne eine Listendarstellung, wie die aus dem Anhang (das Ubuntu Software Center), also mit mehrzeiligem Titel, bild und button in der Listbox.
Also habe ich eine neue Klasse von TCustomListbox abgeleitet und dann ewig rumprobiert, den gewünschten Effekt zu erreichen.
Das Ergebnis ist - nichts. Es gibt nichtmal Fehlermeldungen, die Listbox tut einfach überhaupt nichts, was ich programmiere.
Also: Ist sowas plattformunabhängig mit der LCL möglich? Und wenn ja, wie? Ich kenne mich in der grafischen LCL nämlich nicht wirklich gut aus.
Re: Button in Listbox einfügen
Probier's mal mit einem TListView, da kannst du in den versch CustomDraw Events schon einiges machen auch ohne Ableitung.
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Button in Listbox einfügen
Gibt's da irgendwo eine Stelle, wo ich ansetzen kann? Ich würde am liebsten eine Komponente von TCustomListview ableiten. Um das Verhalten zu erreichen, müsste ich aber wahrscheinlich auch TListViewItem verändern.
Gibt es irgendwo Codebeispiele, wo ähnliches schonmal gemacht wurde? Oder wenigstens eine Dokumentation, wie man in den Zeichenprozess eingreifen kann? (Wenn ich's bei "OnItemDraw" versuche, passiert wieder nichts.)
Gibt es irgendwo Codebeispiele, wo ähnliches schonmal gemacht wurde? Oder wenigstens eine Dokumentation, wie man in den Zeichenprozess eingreifen kann? (Wenn ich's bei "OnItemDraw" versuche, passiert wieder nichts.)
Re: Button in Listbox einfügen
Hmm ich hab das auch noch nie gemacht, aber bei mir funzt es (GTK2);Targion hat geschrieben:Wenn ich's bei "OnItemDraw" versuche, passiert wieder nichts.
Property Style auf lbOwnerDrawFixed setzen und dann z.B:
Code: Alles auswählen
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
var Style:TTextStyle;
begin
if odSelected in State then TListBox(Control).Canvas.Brush.Color:=clNavy else
if odd(Index) then TListBox(Control).Canvas.Brush.Color:=clLtGray else TListBox(Control).Canvas.Brush.Color:=clwhite;
TListBox(Control).Canvas.FillRect(ARect);
Style.Alignment:=taLeftJustify;
Style.Layout:=tlCenter;
TListBox(Control).Canvas.TextRect(ARect,0,0,TListBox(Control).Items[Index], Style);
end;
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Button in Listbox einfügen
Danke, damit bekomme ich zumindest die Symbole andersfarbig... Ich habe jetzt den Grund gefunden, warum der Button nicht angezeigt wird: Der Button befindet sich hinter dem ListBox control, und nicht vor einem ListItem.
Wie bringe ich den Button dazu, auf einem ListItem angezeigt zu werden? Und wie ändere ich die Höhe eines ListItems, um mehr Text darauf anzeigen zu lassen?
Wie bringe ich den Button dazu, auf einem ListItem angezeigt zu werden? Und wie ändere ich die Höhe eines ListItems, um mehr Text darauf anzeigen zu lassen?
Re: Button in Listbox einfügen
Keine Ahnung. Lass mal sehen... ListBox1.ItemHeight... klingt nicht schlecht....Targion hat geschrieben:Und wie ändere ich die Höhe eines ListItems, um mehr Text darauf anzeigen zu lassen?
Ich würde da keinen Systembutton nehmen, sondern nur ein Icon.Targion hat geschrieben:Wie bringe ich den Button dazu,..
Mit
ListBox1.
OnMouseDown
ItemAtPos
ItemRect
Müsste man eig. alles anstellen können mit dem Pseudo Button.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Button in Listbox einfügen
Das Problem hier bei ist, die TListBox basiert auf eine TStringList. Es währe möglich / denkbar dort auch Buttons anzuzeigen. Gerade so eine Ansicht wie im Bild ist leicht hinzubekommen.Keine Ahnung. Lass mal sehen... ListBox1.ItemHeight... klingt nicht schlecht....
Du musst beim Klicken nur dafür sorgen, dass ein Button sichtbar ist / wird. Der Parent des Buttons sollte die ListBox sein.
In der ListView geht das auf jedenfall in der DP gab es dazu einige Einträge. ItemHeigt sollt auf jedenfall Groß genug sein, damit du zwei Zeilen hast. Z.B. 40 bis 60. Was auch noch denkbar währe: Denn Button neben der ListBox anzuzeigen. In einer extra Panel-Leiste. Weißt du wie ich meine ?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Button in Listbox einfügen
Diese Eigenschaft hat ein ListView aber nichttheo hat geschrieben:Keine Ahnung. Lass mal sehen... ListBox1.ItemHeight... klingt nicht schlecht....

Den Button könnte ich einfach über das ListView zeichnen, das sollte also kein großes Problem werden.
Problem ist jetzt nur noch die unterschiedliche Schriftgröße der Einträge. (erste Zeile größer, zweite kleiner)
Ich probiere mal weiter rum, irgendwas geht bestimmt.
Re: Button in Listbox einfügen
Ich dachte wir reden von ListBox.Targion hat geschrieben:Diese Eigenschaft hat ein ListView aber nichttheo hat geschrieben:Keine Ahnung. Lass mal sehen... ListBox1.ItemHeight... klingt nicht schlecht....
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Button in Listbox einfügen
Ergenzung zu ItemHeight: Mit einer Listbox hat das bei mir (GTK2) überhaupt keinen Effekt...
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Button in Listbox einfügen
Das geht nur wenn du den Zeichen Modus auf Variable stellst: Style:=csOwnerDrawVariable; dann sollte ItemHeihgt auch gehen.
MFG
Michael Springwald
Michael Springwald
Re: Button in Listbox einfügen
Wer bist du und was hast du mit Targion gemacht?Targion hat geschrieben:Ergenzung zu ItemHeight: Mit einer Listbox hat das bei mir (GTK2) überhaupt keinen Effekt...

Genau.Pluto hat geschrieben: Das geht nur wenn du den Zeichen Modus auf Variable stellst: Style:=csOwnerDrawVariable;
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Button in Listbox einfügen
Stimmt, die Frage ist berechtigt...Monta: Kannst du Prüfen, ob Targion noch Targion ist ? *G*Wer bist du und was hast du mit Targion gemacht?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Button in Listbox einfügen
Keine Sorge, ich bin's
Nur im Moment anscheinend etwas verpeilt
Der nächste Beitrag von mir hier wird bestimmt die fertige Lösung. Aber bevor ich mit dem Listbox-Zeug angefangen habe, habe ich viel zu lange (fast 3 Stunden) versucht, den LZMA-Algorithmus des LZMA-Pascal-SDK zu fixen. (Decoding geht nicht) Leider erfolglos... (Versucht mal, den auch nur ansatzweise (ist nicht dokumentiert...) aus dem Quellcode zu verstehen)
Naja, ich habe jetzt schon einen Button angezeigt und den Text kriege ich auch noch drauf (manuell auf's Canvas zeichnen wahrscheinlich)


Der nächste Beitrag von mir hier wird bestimmt die fertige Lösung. Aber bevor ich mit dem Listbox-Zeug angefangen habe, habe ich viel zu lange (fast 3 Stunden) versucht, den LZMA-Algorithmus des LZMA-Pascal-SDK zu fixen. (Decoding geht nicht) Leider erfolglos... (Versucht mal, den auch nur ansatzweise (ist nicht dokumentiert...) aus dem Quellcode zu verstehen)
Naja, ich habe jetzt schon einen Button angezeigt und den Text kriege ich auch noch drauf (manuell auf's Canvas zeichnen wahrscheinlich)
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Button in Listbox einfügen
Meines Wissens ist das manuelle zeichnen hier nicht notwendig, wenn du das Event DrawItem nicht nutzt. Aber das ist doch auch schon mal was *G*Naja, ich habe jetzt schon einen Button angezeigt und den Text kriege ich auch noch drauf (manuell auf's Canvas zeichnen wahrscheinlich)
MFG
Michael Springwald
Michael Springwald