AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Verschiedene Farben im ListBox-String
Thema durchsuchen
Ansicht
Themen-Optionen

Verschiedene Farben im ListBox-String

Ein Thema von delphi10 · begonnen am 26. Jun 2008 · letzter Beitrag vom 30. Jun 2008
 
Benutzerbild von delphi10
delphi10

Registriert seit: 9. Mai 2008
Ort: Salzgitter
14 Beiträge
 
Delphi 2007 Professional
 
#1

Verschiedene Farben im ListBox-String

  Alt 26. Jun 2008, 13:46
Hallo

Für die farbige Textausgabe aus Listboxen etc. steht ja die Möglichkeit ListBox1DrawItem() zur Verfügung um einzelne Zeilen unterschiedlich einzufärben. Die Variante, ein einzelnes Wort aus einem String zu beeinflussen, ist damit aber nicht möglich.
Das wollte ich aber realisieren, habe aber nichts einschlägiges gefunden. Also habe ich ListBox1DrawItem() etwas abgeändert. Statt den gesamten String auszugeben, löse ich ihn in einzelne Worte auf und gebe die nacheinander aus. Durch voranstellen eines Steuerzeichens kann das einzelne Wort jetzt fast beliebig formatiert werden. Gewählt habe ich § für Farbe und Fett, das # für Farbe, Fett und kursiv. Die Auswahl der Steuerzeichen ist etwas eingeschränkt, man will sie ja vielleicht auch im normalen Text verwenden können.
Delphi-Quellcode:
 Procedure TForm10.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
  Var
  ASt, //Ausgabestring
  tAst: String; //Teilausgabestring (einzelnes Wort)
  m, //Zähler durch den Ausgabestring
  l: Integer; //Länge des Teilstrings im Canvas
  begin
    tAst := '';
    m := 1;
    With TListBox(Control) do
    begin
      Form10.Listbox1.Font.Name := 'Arial';
      Canvas.Font.Size := 10;
      Form10.ListBox1.ItemHeight := 18;
      ASt := Items[Index];
      Repeat
// ++++++++++++++++++++++++++++++++++++++++++++++++++
// Löst den Ausgabestring in einzelne Worte auf. Delimiter ist space
        If Ast <> 'then
        repeat
          tAst := tAst + Ast[m];
          inc(m);
        until (Ast[m] = ' ') or (m >= length(Ast)+1);
// ++++++++++++++++++++++++++++++++++++++++++++++++++
// Entsprechend des Steuerzeichens das einzelne Wort behandeln
        If (Pos('§',tAst) >= 1) or (Pos('#',tAst) >= 1) then
        begin
          If (Pos('§',tAst) >= 1) then
          begin
            Canvas.Font.Color:=clBlue;
            Canvas.Font.Style:=[fsbold];
            Delete(tAst,Pos('§',tAst),1);
          end;
          If (Pos('#',tAst) >= 1) then
          begin
            Canvas.Font.Color:=clRed;
            Canvas.Font.Style:=[fsItalic] + [fsBold];
            Delete(tAst,Pos('#',tAst),1);
          end;
        end else
        begin
          Canvas.Font.Style:=[];
          Canvas.Font.Color:=clHotLight;
        end;
        Canvas.TextOut(Rect.Left+4, Rect.Top, tAst); //Teilstring in das Canvas schreiben
        l := Canvas.TextWidth(tAst); //Länge des Teilstrings bzw. Platzbedarf im Canvas ermitteln
        Rect.Left := Rect.Left + l; //Zum linken X-Wert der Canvas addieren (für den nächsten Teilstring)
        If tAst = 'then Exit;
        tAst := '';
      until m >= length(Ast);
    end;
  end;

Ein Beispiel habe ich mal angehängt. Es geht möglicherweise eleganter, aber vielleicht kann's ja jemand gebrauchen. Feedback ist willkommen.

Gruß Delphi10
Angehängte Grafiken
Dateityp: jpg ausgabe_192.jpg (14,2 KB, 81x aufgerufen)
Angehängte Dateien
Dateityp: txt ausgabe_193.txt (225 Bytes, 31x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz