设为首页 加入收藏

TOP

带进度条的ListView(二)
2017-10-10 12:06:46 】 浏览:11786
Tags:进度 ListView
TListView;
//这个子过程是用来画CheckBox和ImageList的 procedure Draw_CheckBox_ImageList(r: TRect; aCanvas: TCanvas; Checked: Boolean); var R1: TRect; i: Integer; 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); if Checked then //画CheckBox的钩 begin 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; //开始画图标 i := 2; //ImageIndex的值,可以任意 if i > -1 then begin //获取图标的RECT if Boolean(ListView_GetSubItemRect(sender.Handle, item.Index, 0, LVIR_ICON, @R1)) then begin //ImageList_Stats.Draw(LV.Canvas, R1.Left, R1.Top, i); if item.ImageIndex > -1 then LV.SmallImages.Draw(LV.Canvas, R1.Right + 2, R1.Top, item.ImageIndex); end; end; end; begin LV := TListView(Sender); BoundRect := Item.DisplayRect(drBounds); InflateRect(BoundRect, -1, 0); //这个地方你可以根据自己的要求设置成想要的颜色,实现突出显示 LV.Canvas.Font.Color := clBtnText; //查看是否被选中 if Item.Selected then begin if cdsFocused in State then begin LV.Canvas.Brush.Color := $00ECCCB9; // //clHighlight; end else begin LV.Canvas.Brush.Color := $00F8ECE5; //clSilver; end; end else begin if (Item.Index mod 2) = 0 then LV.Canvas.Brush.Color := clWhite else LV.Canvas.Brush.Color := $00F2F2F2; end; LV.Canvas.FillRect(BoundRect); // 初始化背景 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 := DT_LEFT; taRightJustify: TextFormat := DT_RIGHT; taCenter: TextFormat := DT_CENTER; else TextFormat := DT_CENTER; end; case i of 0: //画Caption,0表示Caption,不是Subitem begin //先画选择框和图标 Draw_CheckBox_ImageList(BoundRect, LV.Canvas, Item.Checked); //再画Caption的文字 InflateRect(Rect, -(5 + il1.Width), 0); //向后移3个像素,避免被后面画线框时覆盖 //InflateRect(Rect, -(5), 0); //向后移3个像素,避免被后面画线框时覆盖 DrawText(LV.Canvas.Handle, PAnsiChar(Item.Caption), Length(Item.Caption), Rect, DT_VCENTER or DT_SINGLELINE or DT_END_ELLIPSIS or TextFormat); end; 1..MaxInt: //画SubItem[i] begin if (i - 1) = 1 then //显示状态条,本示例是第三栏显示,可以随便定 begin DrawSubItem(LV, Item, i, StrToFloatDef(Item.SubItems[i - 1], 0), 100, 0, True); end else begin //画SubItem的文字 InflateRect(Rect, -2, -2); 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; //end case end; //end for LV.Canvas.Brush.Color := clWhite; if Item.Selected then //画选中条外框 begin if cdsFocused in State then//控件是否处于激活状态 LV.Canvas.Brush.Color := $00DAA07A // $00E2B598; //clHighlight; else LV.Canvas.Brush.Color := $00E2B598; //$00DAA07A // clHighlight; LV.Canvas.FrameRect(BoundRect); // end; DefaultDraw := False; //不让系统画了 with Sender.Canvas do if Assigned(Font.OnChange) then Font.OnChange(Font); end; function TForm1.ReDrawItem(HwndLV: HWND; ItemIndex: integer): boolean; begin Result := ListView_RedrawItems(HwndLV, ItemIndex, ItemIndex); end; procedure
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/13/13
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Firemonkey 调整 MainMenu 字型大.. 下一篇技术笔记:Indy的TIdSMTP改造,解..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目