![]() |
TListView - OnAdvancedCustomDrawSubItem VCL-Bug
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Delphianer!
Ich habe hier ein mittelschweres Problem mit einem (offensichtlichen) VCL-Bug. Nicht, das ich mit dem Event nicht schon gearbeitet habe, aber laut der Beschreibung auf der Seite ![]() unter dem Punkt Bugs in Delphi implementation Zitat:
Zitat:
Zeile nicht ganz weiß, sondern rgb(254,255,255) gemacht habe. Folgendes einfaches Beispiel sollte mein Problem klar machen. Es soll ein Bitmap auf den ListView gemalt werden und jede zweite Zeile leicht eingefärbt. Soweit, sogut. Jetzt kommt das Problem, das nach dem Knopfdruck (Bitmap wird erstellt und repaint auf ListView) kommt es zu einem Rendering Problem mit den Fonts hinter der Bitmap-Spalte. Hier mein SourceCode zur Erklärung:
Delphi-Quellcode:
vielleicht noch kurz das kleine Projekt als Anhang.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls,StdCtrls; type TForm1 = class(TForm) ListView1: TListView; Button1: TButton; procedure ListView1AdvancedCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); procedure ListView1AdvancedCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); procedure Button1Click(Sender: TObject); private FBitmap : TBitmap; end; var Form1: TForm1; implementation {$R *.dfm} {******************************************************************************* * description : *******************************************************************************} procedure TForm1.Button1Click(Sender: TObject); begin FBitmap := TBitmap.Create; FBitmap.Canvas.Create; FBitmap.Height := 12; FBitmap.Width := 12; FBitmap.Canvas.Ellipse(0,0,12,12); ListView1.Repaint; end; {******************************************************************************* * description : *******************************************************************************} procedure TForm1.ListView1AdvancedCustomDrawItem( Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); begin if Stage = cdprePaint then begin if (Item.Index mod 2) = 0 then Sender.Canvas.Brush.Color := rgb(255,255,255) else Sender.Canvas.Brush.Color := rgb(0,245,245); end; end; {******************************************************************************* * description : *******************************************************************************} procedure TForm1.ListView1AdvancedCustomDrawSubItem( Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); var _R : TPoint; begin if FBitmap <> nil then begin if (SubItem = 2) then begin sender.Canvas.Draw(125, Item.Position.Y, FBitmap); end; end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 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-2025 by Thomas Breitkreuz