![]() |
Mal wieder farbige Listbox, aber was spezielles
Also ich hoffe, das hier wenigstens ein paar von Euch reinschauen, da ich die Routine zum Selbstzeichnen schon gefunden und eingebaut habe. Aber leider funzt es nicht so recht.
Delphi-Quellcode:
Ok, ich habe in der globalen Stringliste Clientlist alle angemeldeten Clients drin stehen, welche mir auch bei aktivierter Showmessage als gefunden oder nicht gefunden angezeigt werden. Aber leider funktioniert das Einfärben überhaupt nicht. Es ist immer alles rot. Wenn ich die Showmessage aktiviert habe, sehe ich zwar, dass er ab und zu zwischen durch was grün zeichnet, aber leider haut das nicht hin.
procedure TForm1.list_clients_clDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState); var i:integer; begin with (control as TListBox) do begin for i:= 0 to Count-1 do begin if ClientList.IndexOf(Items[i]) > -1 then begin //ShowMessage(items[i]+' found'); Canvas.Brush.Color := clLime; Canvas.Pen.Color := clWhite; Canvas.Rectangle(Rect); Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]); // Item wird immer gezeichnet end else begin //ShowMessage(items[i]+' not found'); Canvas.Brush.Color := clRed; Canvas.Pen.Color := clWhite; Canvas.Rectangle(Rect); Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]); // Item wird immer gezeichnet end end; end; end; Es soll also so sein, dass in der Liste immer alle Clients stehen, die aus einer Datei ausgelesen werden, aber nur die grün eingefärbt sein sollen, die sich in der ClientList befinden, damit man eine optische Kontrolle hat, welche Rechner Online sind und welche nicht. Wo liegt hier der Fehler? |
Re: Mal wieder farbige Listbox, aber was spezielles
Hallo Tom,
die Routine heißt Drawitem, nicht DrawListBox. Gruß Hawkeye |
Re: Mal wieder farbige Listbox, aber was spezielles
Sorry, damit kann ich leider nix anfangen. Ich benutze doch das richtige Event. Sicher meinst Du, dass ich versuche dieses Event zu missbrauchen...Oder!?
Ok, dann frage ich eben, wie ich es ansonsten lösen könnte...??? |
Re: Mal wieder farbige Listbox, aber was spezielles
Du solltest in der Behandlungsroutine für den Event nur ein Element der Listbox zeichnen. Der Index des Elements wird dir im Parameter Index übergeben.
Gruß Hawkeye |
Re: Mal wieder farbige Listbox, aber was spezielles
Liste der Anhänge anzeigen (Anzahl: 1)
Hm, das war leichter als gedacht. Was mir nun noch nicht gefällt ist, dass zwischen den einzelnen Items da wo Text ist, kein leerer Zwischenraum ist und da wo kein Text mehr steht, ein weißer Zwischenraum ist. Wenn ich das mal bildlich zeigen soll, würde ich das tun. Wie schaffe ich da noch Abhilfe?
|
Re: Mal wieder farbige Listbox, aber was spezielles
Hallo Tom,
könnte es nicht sein, dass du den weißen Rand um deine farbige Ausgabe selbst produzierst? Nimm doch statt Rectangle() mal FillRect(). Grüße vom marabu |
Re: Mal wieder farbige Listbox, aber was spezielles
Danke, genau das war´s! Ich hatte dann zwar noch Abweichungen, wenn ein Item den Focus hatte, aber das habe ich eliminiert, indem ich aus:
Delphi-Quellcode:
Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]);
Delphi-Quellcode:
gemacht habe.
Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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