Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: alle Strings aus Edit.Text in der ListBox farbig darstel

  Alt 6. Sep 2006, 16:48
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat