Moin Holger,
das klingt schwieriger als es ist.
Schau Dir mal dieses Beispiel an (ListBox.Style auf lbOwnerDrawFixed):
(Dazu brauchst Du nur ein Formular, mit einer ListBox, in der eine Zeile Text steht, die mit Leerzeichen getrennte Strings enthält)
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
sValue : string;
sOut : string;
lb : TListBox;
iLeft : integer;
iTop : integer;
begin
// Auszugebenden Eintrag merken
sValue := ListBox1.Items[Index]+' ';
// Startpunkt für die Ausgabe merken
iLeft := Rect.Left;
iTop := Rect.Top;
// Damit's übersichtlicher wird die Listbox in eine kleine Variable
lb := (Control as TListBox);
// Aktuelle Schriftfarbe auf Blau
lb.Canvas.Font.Color := clBlue;
// Alle mit Leerzeichen getrennten Teile unterschiedlich einfärben
// (rot / blau im Wechsel
while pos(' ',sValue) > 0 do begin
// Auszugebenden Teil auslesen
sOut := copy(sValue,1,pos(' ',sValue));
// Schriftfarbe setzen (aktuell rot? dann blau und umgekehrt)
if lb.Canvas.Font.Color = clRed then begin
lb.Canvas.Font.Color := clBlue;
end else begin
lb.Canvas.Font.Color := clRed;
end;
// Text ausgeben
// (Dadurch wird auch gleich die Ausgabeposition neu gesetzt)
lb.Canvas.TextOut(iLeft,iTop,sOut);
// Auszugebenden ListBox eintrag um bereits ausgegebenen
// Text verkürzen
sValue := copy(sValue,pos(' ',sValue)+1,MaxInt);
// Startposition für den nächst Abschnitt setzen
iLeft := lb.Canvas.PenPos.X;
end;
end;