Vielleicht nicht elegant, aber wie wärs mit:
Delphi-Quellcode:
Listbox3.Clear;
if assigned(FResult) then begin
if FMysql.Status<>MYSQL_STATUS_READY then
ShowMessage('Ein Ergebnis wurde unvollständig gelesen!');
FreeAndNil(FResult);
end;
FResult := FMysql.query('select * from users;', true, ex);
if assigned(FResult) then
begin
FResult.First;
for j:=0 to FResult.RowsCount-1 do
begin
if FResult.FieldValuebyname('status')='online' then
begin
//Hier muss die Schrift grün werden
ListBox3.Items.InsertObject(0, FResult.FieldValuebyname('login'), TObject(clGreen));
end
else
begin
//Hier muss die Schrift rot werden
ListBox3.Items.InsertObject(0, FResult.FieldValuebyname('login'), TObject(clRed));
end;
FResult.Next;
end;
end
else
Das würde für jede Zeile die Farbe festhalten, im TObject-Zeiger dieser Zeile.
Danach mußt du aber trotzdem OnDrawItem erstellen, damit die Farbe auch dargestellt wird.
Nach der Methode von @Hansa wäre das:
Delphi-Quellcode:
procedure TForm1.ListBox3DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
Listbox3.Canvas.Brush.Color := TColor(ListBox3.Items.Objects[Index]);
Listbox3.Canvas.FillRect(Rect);
Listbox3.Canvas.TextOut(Rect.Left, Rect.Top, Listbox3.Items[Index]);
end;
Für ListBox3 - Style auf lbOwnerDrawFixed - stellen.
Gruß Manfred