gpt4 book ai didi

delphi - 为什么我的自定义绘制 ListView 上会出现白色的列分隔符?

转载 作者:行者123 更新时间:2023-12-02 02:58:47 26 4
gpt4 key购买 nike

基本上,我有以下 Delphi 2007 代码 (CustomDrawItem):

procedure TForm1.ListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if (Item.SubItems[0] = '...') then
ListView.Canvas.Brush.Color := clSkyBlue;
end;

在我的 Windows XP 上,一切正常:

On Windows XP

但是在 Windows 7 上,我拥有以下内容:

On Windows 7

现在,当然,我想知道填充这些垂直白色条纹的正确代码是什么。而且,我也想知道为什么会发生这种情况。它来自德尔福吗? Windows 7的?我的代码?

最佳答案

这似乎是 Windows 7 绘画行为,作为解决方法,您可以将 ownerdraw 属性设置为 true 并使用 OnDrawItem而是事件。

像这样

uses
CommCtrl;

{$R *.dfm}

procedure TForm7.ListView1DrawItem(Sender: TCustomListView; Item: TListItem;
Rect: TRect; State: TOwnerDrawState);
var
LIndex : integer;
ListView : TListView;
LRect: TRect;
LText: string;
begin
ListView:=TListView(Sender);
for LIndex := 0 to ListView.Columns.Count-1 do
begin

if not ListView_GetSubItemRect(ListView.Handle, Item.Index, LIndex, LVIR_BOUNDS, @LRect) then
Continue;

if Item.Selected and (not ListView.IsEditing) then
begin
ListView.Canvas.Brush.Color := clHighlight;
ListView.Canvas.Font.Color := clHighlightText;
end
else
if (Item.SubItems[0] = '...') then
begin
ListView.Canvas.Brush.Color := clSkyBlue;
ListView.Canvas.Font.Color := ListView.Font.Color;
end
else
begin
ListView.Canvas.Brush.Color := ListView.Color;
ListView.Canvas.Font.Color := ListView.Font.Color;
end;

ListView.Canvas.FillRect(LRect);
if LIndex = 0 then LText := Item.Caption
else LText := Item.SubItems[LIndex-1];

ListView.Canvas.TextRect(LRect, LRect.Left + 2, LRect.Top, LText);
end;
end;

Windows 7

enter image description here

Windows XP

enter image description here

关于delphi - 为什么我的自定义绘制 ListView 上会出现白色的列分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13276910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com