Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listbox Select Farbe (https://www.delphipraxis.net/3271-listbox-select-farbe.html)

Pseudemys Nelsoni 4. Mär 2003 09:37


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

Luckie 4. Mär 2003 09:42

Selber zeichen und für einen markierten Eintrag die gewünschte Frabe wählen. Ereignis: OnDrawItem.

janjan 4. Mär 2003 09:46

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.

Pseudemys Nelsoni 4. Mär 2003 10:28

jo, nur leider weiss ich nichtmal wie das zeichnen geht :(

@janjan: genau das ist das was ich suche ^^

MathiasSimmack 4. Mär 2003 10:29

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.

Yheeky 4. Mär 2003 12:42

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von janjan
Aussehen solte das dann so wie bei Winamp 2 in der Playlist.

Ich habe sowas mal mit der Playlist von WinAmp3 gemacht. War ein bisschen Arbeit aber sah dann am Ende ganz nett aus. Habe mal nen Screenshot angehängt. Also wenn du genauere Fragen hast, kannst du mir ja mal ne PM schreiben.

Gruß Yheeky

City Light 4. Mär 2003 15:15

Ist es das was du suchst?
Delphi-Quellcode:
//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;
Gruß Tino

janjan 4. Mär 2003 15:44

Wenn man den Tip von City Light und MathiasSimmack kombiniert hat man zu 90% das was ich suche:

Delphi-Quellcode:
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;
Ganz perfekt ist es immer noch nicht, da nach dem Start solange dieses dumme Auswahlrechteck angezeigt wird bis man einen eintrag anwählt.

Hat da einer ne Idee zu?

janjan 4. Mär 2003 16:09

*selbermeld*

So klappt es:

Delphi-Quellcode:
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;
und hier noch eine nicht ganz perfekte Winamp-2-Standard-Skin-Imitation:


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

Pseudemys Nelsoni 4. Mär 2003 21:19

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.
Seite 1 von 2  1 2      

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