![]() |
TColorListBox mit eigenen Farben aufwerten
Hallo!
Ich möchte gerne eigene Farben zur TColorListBox hinzufügen - habs bisher aber weder mit Google noch mit Ausprobieren hinbekommen. Mit items.add lässt sich zum Beispiel zwar ein beliebiger Text hinzufügen, die Farbe bleibt aber immer die gleiche. Desweiteren gibt es Eigenschaften wie colors und colornames, aber diese stehen auf onlyread und lassen sich auch nicht beeinflussen. Weiß von euch jemand was man da machen kann oder ob es eine elegantere Lösung gibt? Im Programm soll der Benutzer eine Farbpalette zur Verfügung gestellt bekommen, die er selber bestücken und löschen kann. Vielen Dank! |
Re: TColorListBox mit eigenen Farben aufwerten
Hallo,
nimm doch einfach eine Combobox und stelle Style auf csOwnerDrawVariable. Dann Farben hinzufügen...
Delphi-Quellcode:
... und über DrawItem
Items.Add('clBlack');
Items.Add('clMaroon'); Items.Add('clGreen'); ...
Delphi-Quellcode:
Gruß RoGa
Canvas.Brush.Color := StringToColor(ComboBox.Items[Index]);
|
Re: TColorListBox mit eigenen Farben aufwerten
Ich habs inzwischen mit einer Listview hinbekommen, das ist der Code:
Delphi-Quellcode:
Allerdings funktioniert es noch nicht ganz so, wie ich es mir vorstelle. Die Farbe erscheint erst wenn man mit der Maus längere Zeit darüberfährt, offenbar wird das Rechteck teilweise wieder übermalt - es ist nur noch an einer Ecke sichtbar. Habt ihr ne Idee???procedure Tprog.tabelleCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var r, r2: trect; breite: integer; begin breite:=sender.Column[0].Width; //Breite der ersten Spalte r:=item.DisplayRect(drbounds); //Rect der Zelle der ersten Spalte sender.canvas.Brush.Color:=farbliste[item.Index]; //farbliste ist ein Array mit den Farbwerten sender.Canvas.fillrect(r); //Rechteck wird in erste Zelle gezeichnet sender.Canvas.Brush.Color:=clwindow; //Farbe wird wieder zurückgestellt end; Danke schonmal! |
Re: TColorListBox mit eigenen Farben aufwerten
Hallo,
so sollte es auch mit der TColorListBox gehen:
Delphi-Quellcode:
Gruß Hawkeye
// vorne einfügen
ColorListBox.Items.InsertObject(0, 'Meine Farbe', TObject(clRed)); // hinten anhängen ColorListBox.Items.AddObject('Meine Farbe', TObject(clBlue)); |
Re: TColorListBox mit eigenen Farben aufwerten
Vielen Dank. So klappts wunderbar.
|
Re: TColorListBox mit eigenen Farben aufwerten
Eine kleine Frage hätte ich doch noch: Wie kann man die Farben wieder aus der Liste löschen oder innerhalb der Liste verschieben?!
Zwar kann man Items ganz normal mit delete und dem enstprechenden Index löschen, es existiert aber kein Zugriff auf das selektierte Item, wie es bei normalen Listboxen der Fall ist. Ich möchte also dass der Benutzer des Programms ein Item anklickt und dieses dann mit ENTF oder einem Popup-Fenster löschen kann. Außerdem wäre es gut wenn die Items vom User verschoben werden können. Vielen Dank! |
Re: TColorListBox mit eigenen Farben aufwerten
Hallo,
Zitat:
Das Verschieben per Drag&Drop erfordert ein Setzen der Eigenschaft DragMode, und die ist bei der ColorListBox leider nicht öffentlich. Du musst dir also über einen kleinen Trick Zugriff auf diese Eigenschaft verschaffen:
Delphi-Quellcode:
Gruß Hawkeye
type
TColorListBoxCracker = class (TColorListBox); procedure TDemoForm.FormCreate(Sender: TObject); begin TColorListBoxCracker(ColorListBox).DragMode := dmAutomatic; end; procedure TDemoForm.ColorListBoxDragDrop(Sender, Source: TObject; X, Y: Integer); var TargetIndex : Integer; begin with (Sender as TColorListBox) do begin TargetIndex := ItemAtPos(Point(X, Y), False); if (TargetIndex >= Items.Count) then TargetIndex := Pred(Items.Count); Items.Move(ItemIndex, TargetIndex); end; end; procedure TDemoForm.ColorListBoxDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := ((Sender is TColorListBox) and (Source = Sender)); end; |
Re: TColorListBox mit eigenen Farben aufwerten
Super! Funktioniert perfekt! Danke! :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 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