怪事年年有哈,我的listview不是在生成的时候闪烁。而是生成之后鼠标在上面移动时,移动到哪一条,哪一条就闪一下,请高手指教。我是用repaint+ondata动态生成的。
解决方案 »
- LoadFromStream时丢失小数!!!在线等!!!急!!!100分送上
- 问题有点麻烦,期待高手解决 Parent 问题 或许是这个问题
- 定义一个DWord数据类型的变量a,三十二byte位,如何判断变量a的第五个byte位的值是不是一?
- 用什么办法可以防止网页中的代码改变webbrowser的大小
- 100分求高手赐教: 用idSmtp怎么通过Socks5代理发送邮件?
- 参数传递的问题、serder()的问题!高分求教(100),不够再加!需要例子
- 我的目标是要做csdn史上最努力的菜鸟;^_^
- 关于DevExpress的TcxGrid问题。
- 请问哪里有有关COM原理的Ebook可以下载????
- jpg图片尺寸问题?
- 如何改变TMainMenu整个主菜单条的背景颜色?
- 看看我写的可以显示农历和节的日历程序
DoubleBuffered := True试试
我试过Form.doublebuffered:=true;,Listview.doublebuffered:=true;都不管用。
listview 的mouseMove没有任何处理,但是我想这里能不能屏蔽掉重画的消息?
listview 有 columnclick 用来sort一个list ,然后用repaint调用了ondata 画 Item.
有oncustomdraw自画,其中procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
//Sender.DoubleBuffered:=true;
if (Item.Index mod 2) = 0 then
Sender.Canvas.Brush.Color :=$00C0DCC0 //间隔绿
else
Sender.Canvas.Brush.Color :=$00F0FBFF; //间隔灰 LVDrawItem(ListView1, Item, State, DefaultDraw);----->这个对应下面的函数
end;procedure LVDrawItem(Sender: TListView; Item: TListItem; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
BoundRect, Rect: TRect;
i: integer;
TextFormat: Word;
LV: TListView;
procedure Draw_CheckBox_ImageList(r: TRect; aCanvas: TCanvas; Checked: Boolean);
var
R1: TRect;
begin
if Sender.Checkboxes then
begin
aCanvas.Pen.Color := clBlack;
aCanvas.Pen.Width := 2;
//画CheckBox外框,也可以修改成你想要的图标显示
aCanvas.Rectangle(r.Left + 2, r.Top + 2, r.Left + 14, r.Bottom - 2); //draw a rectangle using Pen and fill it with Brush
if Checked then
begin //画CheckBox的勾
aCanvas.MoveTo(r.Left + 4, r.Top + 6);
aCanvas.LineTo(r.Left + 6, r.Top + 11);
aCanvas.LineTo(r.Left + 11, r.Top + 5);
end;
aCanvas.Pen.Width := 1;
end;
//开始画图标
if (Item.ImageIndex > -1) and (LV.SmallImages <> nil) then
begin
//获取图标的RECT
if Boolean(ListView_GetSubItemRect(sender.Handle, item.Index, 0, LVIR_ICON, @R1)) then
begin
LV.SmallImages.Draw(LV.Canvas, R1.Left, R1.Top, Item.ImageIndex);
end;
end;
end;
begin
LV := Sender;
BoundRect := Item.DisplayRect(drBounds); //Returns the bounding rectangle of the list item.
InflateRect(BoundRect, -1, 0); //increases or decreases the width and height of the specified rectangle.
if Item.Selected then //设置选中条颜色
begin
if cdsFocused in State then
begin
LV.Canvas.Brush.Color := clHighlight; //$00ECCCB9; // //clHighlight; // 手动选中
//LV.Canvas.Font.Color := clred;//clBtnText; //clHighlightText;
end
else
begin
LV.Canvas.Brush.Color := clHighlight; //$00F8ECE5; //clSilver; //自动选中--没有得到焦点
// LV.Canvas.Font.Color := clBtnText;
end;
end
else
begin
// LV.Canvas.Brush.Color := clWindow;
// LV.Canvas.Font.Color := clWindowText;
end;
LV.Canvas.FillRect(BoundRect); //初始化背景 using the current brush.
for i := 0 to LV.Columns.Count - 1 do
begin
//获取SubItem的Rect
ListView_GetSubItemRect(LV.Handle, Item.Index, i, LVIR_LABEL, @Rect);
case LV.Columns[i].Alignment of
taLeftJustify:
TextFormat := 0;
taRightJustify:
TextFormat := DT_RIGHT;
taCenter:
TextFormat := DT_CENTER;
end;
case i of
0: //画Caption
begin
Draw_CheckBox_ImageList(BoundRect, LV.Canvas, Item.Checked);
InflateRect(Rect, -3, 0); //向后移3个像素,避免被后面画线框时覆盖
DrawText(
LV.Canvas.Handle, //HDC hDC, // handle to device context
PCHAR(Item.Caption), // pointer to string to draw
Length(Item.Caption), // string length, in characters
Rect, // pointer to structure with formatting dimensions
DT_VCENTER or DT_SINGLELINE or DT_END_ELLIPSIS or TextFormat); // text-drawing flags
end;
1..MaxInt: //画Subitems[i]
begin
if i - 1 <= Item.SubItems.Count - 1 then
DrawText(
LV.Canvas.Handle,
PCHAR(Item.SubItems[i - 1]),
Length(Item.SubItems[i - 1]),
Rect,
DT_VCENTER or DT_SINGLELINE or DT_END_ELLIPSIS or TextFormat);
end;
end;
end;
LV.Canvas.Brush.Color := clWhite;
if Item.Selected then //画选中条外框
begin
if cdsFocused in State then
LV.Canvas.Brush.Color := clHighlight //$00DAA07A // $00E2B598; //clHighlight;
else
LV.Canvas.Brush.Color := $00E2B598; //$00DAA07A // clHighlight;
LV.Canvas.FrameRect(BoundRect); //draw a 1 pixel wide border around a rectangular region
// DrawFocusRect(Item.DisplayRect(drBounds)); //
end;
DefaultDraw := False; //True;//cdsSelected in State;
//with Sender.Canvas do
//if Assigned(Font.OnChange) then Font.OnChange(Font);
end;我很奇怪,为什么鼠标移动到Item,Item就要重画一下呢?我该怎么让它不闪?请高手指教,分不够我再加
ListView1.Items.BeginUpdate;…………
代码
…………
ListView1.Items.EndUpdate;
CSDNAttM000013460100C2CDBFA59F42D4FEA6C70EFAAA4E4A00000001000000000114dVBhcGVyUX
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
================================================================================
所以如果你能根据listview的事件看出问题的话上面的就是全部了。
不过很感谢你的热心。
但是我想也想不明白,ownerdraw:=true;不是和我在
procedure LVDrawItem(Sender: TListView; Item: TListItem; State: TCustomDrawState;
var DefaultDraw: Boolean);
里面的DefaultDraw := False;一样的效果吗?能告诉我原因吗?
DefaultDraw := False;不是阻止自动画了吗?