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:
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;
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.
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?