Announcement

Collapse
No announcement yet.

TListView: Fetter oder farbiger Text

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TListView: Fetter oder farbiger Text

    Hallo, <br>
    ich möchte bei einem TListView-Objekt eine (einzelne) Zeile Fett oder andersfarbig ausgeben. Ist das möglich?<br>
    Danke, Thomas<br>

  • #2
    <p>Hallo Thomas,<br>
    <br>
    ja, das ist möglich :-).<br>
    <br>
    Um die Formatierung zu erreichen, musst Du die Ereignisse <b>OnCustomDrawItem</b> und <b>OnCustomDrawSubItem</b> benutzen.<br>
    Die ListView in folgendem Beispiel hat 3 Spalten, färbt jede 2. Zeile grau ein und zeigt in der 2. Spalte den Text fett an.<br>
    <pre>
    procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
    Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
    if (Item=nil) then Exit;
    with Sender.Canvas.Brush do if not Odd(Item.Index) then Color:=clGray else Color:=clWhite;
    end;
    </pre>
    <pre>
    procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
    Item: TListItem; SubItem: Integer; State: TCustomDrawState;
    var DefaultDraw: Boolean);
    begin
    if (SubItem=0) then Exit;
    SubItem:=SubItem-1;
    with Sender.Canvas do
    begin
    case SubItem of
    0:begin
    Font.Color:=clWindowText;
    Font.Style:=[fsBold];
    end;
    1:begin
    Font.Color:=clNavy;
    Font.Style:=[];
    end;
    end; // case
    if not Odd(Item.Index) then Color:=clGray else Color:=clWhite;
    end; // with
    end;
    </pre>
    Ich hoffe, das Beispiel hilft.<br>
    <br>
    Gruß Thomas</p&gt

    Comment


    • #3
      Hallo Thomas, <br>

      Ja, solche Beispiele helfen immer sehr gut. Danke, es hat auf Anhieb geklappt. <br>

      Gruss Thoma

      Comment


      • #4
        Hallo Thomas, <br>
        <br>
        Es hat gut funktioniert.. hab ich gedacht!<br>
        Jetzt hab ich das Problem, dass der oberste Eintrag Fett und mit einer grösseren Schrift dargestellt wird, eigentlich aber richtig definiert ist. (Sehe ich daran, dass wenn ich draufklicke, es dann plötzlich richtig dargestellt wird). Ein Repaint oder Update hat jedoch nichts gebracht. <br>
        Was kann man dagegen tun?<br>
        <br>
        Gruss Thoma

        Comment


        • #5
          <p>Hallo Thomas,<br>
          <br>
          mein Beispiel müsste eigentlich ohne den von Dir beschriebenen Seiteneffekt funktionieren. Schau Dir einmal das Beispiel zur Virtual-Listview von Delphi an.<br>
          <br>
          Ach ja, im Beispiel zur CustomDrawSubItem ist mir ein kleiner Fehler unterlaufen: Statt <pre>if not Odd(Item.Index) then Color:=clGray else Color:=clWhite;</pre> muss es <b>if not Odd(Item.Index) then Brush.Color:=clGray else Brush.Color:=clWhite;</b> heissen.<br>
          <br>
          Gruß Thomas</p&gt

          Comment

          Working...
          X