![]() |
Listbox Select Farbe
moin,
wie ihr ja sicher wisst hat die Listbox wenn ein eintrag markiert ist eine blaue "Markierfarbe"(so ein dunkelblau) kann man die ändern? Sie passt nicht zu meinem programm danke gruss mario |
Selber zeichen und für einen markierten Eintrag die gewünschte Frabe wählen. Ereignis: OnDrawItem.
|
Da schließ ich mich gleich mit einer Frage an:
Wie kann ich diesen gestricheltem Rahmen um die Auswahl wegmachen. Aussehen solte das dann so wie bei Winamp 2 in der Playlist. |
jo, nur leider weiss ich nichtmal wie das zeichnen geht :(
@janjan: genau das ist das was ich suche ^^ |
Das müsste auch im "OnDrawXXX" gehen, indem du "DrawFocusRect" (API-Funktion) aufrufst. Dadurch wird das bereits vorhandene entfernt (XOR).
Angabe allerdings ohne Gewähr, weil ich mir für den Zweck eine Komponente geschrieben habe, in der man das mit einer zusätzlichen Eigenschaft im Objektinspektor ein- und ausschalten kann. Und da geht´s dann in der "CNDrawItem"-Methode. |
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Gruß Yheeky |
Ist es das was du suchst?
Delphi-Quellcode:
Gruß Tino
//markierter Eintrag in ListBox in eigener Farbe
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (Control as TListbox) do begin if odSelected in State then Canvas.Brush.Color := $00C08000; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+5, Rect.Top, Items[Index]); end; end; |
Wenn man den Tip von City Light und MathiasSimmack kombiniert hat man zu 90% das was ich suche:
Delphi-Quellcode:
Ganz perfekt ist es immer noch nicht, da nach dem Start solange dieses dumme Auswahlrechteck angezeigt wird bis man einen eintrag anwählt.
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin with (Control as TListbox) do begin if odSelected in State then Canvas.Brush.Color := $00C08000; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+5, Rect.Top, Items[Index]); if odSelected in State then DrawFocusRect(canvas.Handle,rect); end; end; Hat da einer ne Idee zu? |
*selbermeld*
So klappt es:
Delphi-Quellcode:
und hier noch eine nicht ganz perfekte Winamp-2-Standard-Skin-Imitation:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin with (Control as TListbox) do begin if odSelected in State then Canvas.Brush.Color := $00C08000; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+5, Rect.Top, Items[Index]); if (odFocused in state) then DrawFocusRect(canvas.Handle,rect); end; end;
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin with (Control as TListbox) do begin Canvas.Brush.Color := clBlack; if odSelected in State then Canvas.Brush.Color := clBlue;; Canvas.FillRect(Rect); Canvas.Font.Color:=clLime; Canvas.TextOut(Rect.Left+5, Rect.Top, Items[Index]); if (odFocused in state) then DrawFocusRect(canvas.Handle,rect); end; // with end; // procedure |
hey das ist super, danke an alle...mal ne frage, woher kennt man denn begriffe wie "odSelect" ? ich meine man kann sie ja nicht selbst herausfinden....stehen die irgendwo?
gruss mario ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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