AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit ListView, OwnerDraw und Font

Ein Thema von igel457 · begonnen am 30. Jan 2007 · letzter Beitrag vom 1. Feb 2007
Antwort Antwort
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Problem mit ListView, OwnerDraw und Font

  Alt 30. Jan 2007, 19:55
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
Miniaturansicht angehängter Grafiken
temp_158.gif  
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Problem mit ListView, OwnerDraw und Font

  Alt 31. Jan 2007, 00:00
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
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Problem mit ListView, OwnerDraw und Font

  Alt 31. Jan 2007, 20:40
Du hast recht...

Danke!

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

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...
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Problem mit ListView, OwnerDraw und Font

  Alt 31. Jan 2007, 22:46
Den Canvas neu zeichnen hilft.
Delphi-Quellcode:
  Font.Style:= [];//oder [fsBold]
  Sender.canvas.Refresh;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Problem mit ListView, OwnerDraw und Font

  Alt 1. Feb 2007, 15:49
Danke!

Du warst mir wirklich eine große Hilfe!
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:38 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