Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit ListView, OwnerDraw und Font (https://www.delphipraxis.net/85428-problem-mit-listview-ownerdraw-und-font.html)

igel457 30. Jan 2007 19:55


Problem mit ListView, OwnerDraw und Font
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe gerade ein kleines Problem mit einem Listview.
ViewStyle steht auf vsReport und OwnerDraw auf true. Nun zeichne ich jedes Item einzeln. Allerdings möchte ich auch den Font verändern. Leider funktioniert dies nicht. Die entsprechende Codestelle ist makiert.

Delphi-Quellcode:
procedure TMainDlg.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  x,y,i:integer;
  s:string;
begin
  with Sender as TListView do
  begin
    with Canvas do
    begin
      if Item.Index mod 2 = 1 then
      begin
        Brush.Color := rgb(240,240,255);
      end
      else
      begin
        Brush.Color := rgb(255,255,255);
      end;
      if Item.Selected then
      begin
        Brush.Color := rgb(220,220,255);
        Pen.Style := psDot;
        Pen.Color := clGray;
      end
      else
      begin
        Pen.Style := psSolid;
        Pen.Color := Brush.Color;
      end;
      Rectangle(Item.DisplayRect(drLabel).Left+2,Item.DisplayRect(drLabel).Top+2,
                Item.DisplayRect(drBounds).Right-2,Item.DisplayRect(drLabel).Bottom-2);

      SmallImages.Draw(Canvas,Item.DisplayRect(drIcon).Left,
       Item.DisplayRect(drIcon).Top,Item.ImageIndex,dsTransparent,itImage);

      x := Item.DisplayRect(drLabel).Left+4;
      y := Item.DisplayRect(drLabel).Top+4;

      Sender.Canvas.Font.Style := [fsBold]; // <---- Keine Reaktion!!!!

      for i := 0 to Item.SubItems.Count-1 do
      begin
        s := Item.SubItems[i];
        TextOut(x,y,s);
        y := y + TextHeight(s);
      end;
    end;
  end;
  DefaultDraw := false;
end;
Ich habe zur verdeutlichung mal einen Screenshot angehängt...

Schonmal danke im vorraus,
Igel457

bitsetter 31. Jan 2007 00:00

Re: Problem mit ListView, OwnerDraw und Font
 
Wenn du die entsprechende Zeile um 7 Zeilen höher setzt funktioniert es.
Delphi-Quellcode:
      Sender.Canvas.Font.Style := [fsBold];// <---- hier geht es noch!!!!
      SmallImages.Draw(sender.Canvas,Item.DisplayRect(drIcon).Left,
       Item.DisplayRect(drIcon).Top,Item.ImageIndex,dsTransparent,itImage);

      x := Item.DisplayRect(drLabel).Left+4;
      y := Item.DisplayRect(drLabel).Top+4;

      Sender.Canvas.Font.Style := [fsBold]; // <---- Keine Reaktion!!!!

      for i := 0 to Item.SubItems.Count-1 do

igel457 31. Jan 2007 20:40

Re: Problem mit ListView, OwnerDraw und Font
 
Du hast recht...

Danke!

Kannst du mir jetzt nur noch erklären, warum das jetzt funktioniert? :gruebel:

Wie kann ich jetzt aber die zweite Zeile nicht dick schreiben, also folgendes?
Delphi-Quellcode:
for i := 0 to Item.SubItems.Count-1 do
begin
  s := Item.SubItems[i];
  TextOut(x,y,s);
  y := y + TextHeight(s);
  Font.Style := [];
end;
Das klappt nämlich nicht...

bitsetter 31. Jan 2007 22:46

Re: Problem mit ListView, OwnerDraw und Font
 
Den Canvas neu zeichnen hilft.
Delphi-Quellcode:
  Font.Style:= [];//oder [fsBold]
  Sender.canvas.Refresh;

igel457 1. Feb 2007 15:49

Re: Problem mit ListView, OwnerDraw und Font
 
Danke!

Du warst mir wirklich eine große Hilfe! :bouncing4:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz