• delphi listview自绘图形 绘ListView ,delphi源码 画TlistView带进度条的Item TListView的Item条一般是由系统画的，但电驴就实现了画，使之看起来很漂亮，我们用DELPHI也可以实现！

delphi listview自绘图形

自绘ListView ,delphi源码
自画TlistView带进度条的Item
TListView的Item条一般是由系统自画的，但电驴就实现了自画，使之看起来很漂亮，我们用DELPHI也可以实现！

首先要引用CommCtrl单元，这是TListView底层控制单元：
uses
CommCtrl;

//画状态条
procedure DrawSubItem(LV: TListView; Item: TListItem; SubItem: Integer;
Prosition: Single; Max, Style: Integer; IsShowProgress: Boolean;
DrawColor: TColor = $00005B00; FrameColor: TColor =$00002F00);
//获取SubItem的区域
function GetItemRect(LV_Handle, iItem, iSubItem: Integer): TRect;
var
Rect: TRect;
begin
ListView_GetSubItemRect(LV_Handle, iItem, iSubItem, LVIR_LABEL, @Rect);
Result := Rect;
end;
var
PaintRect, r: TRect;
i, iWidth, x, y: integer;
S: string;
begin
try

with lv do
begin
//LockPaint := True;
PaintRect := GetItemRect(LV.Handle, Item.Index, SubItem);
r := PaintRect;
//      if SubItem = DrawSubItem then
Begin
//这一段是算出百分比
if Prosition >= Max then
Prosition := 100
else
if Prosition <= 0 then
Prosition := 0
else
Prosition := Round((Prosition / Max) * 100);

if (Prosition = 0) and (not IsShowProgress) then
begin
//如果是百分比是0，就直接显示空白
Canvas.FillRect(r);

end
else
begin
//先直充背景色
Canvas.FillRect(r);
Canvas.Brush.Color := Color;
//          Canvas.FillRect(r);

//画一个外框
InflateRect(r, -2, -2);
Canvas.Brush.Color := FrameColor; //$00002F00; Canvas.FrameRect(R); Canvas.Brush.Color := Color; InflateRect(r, -1, -1); // Canvas.FillRect(r); InflateRect(r, -1, -1); //根据百分比算出要画的进度条内容宽度 iWidth := R.Right - Round((R.Right - r.Left) * ((100 - Prosition) / 100)); case Style of 0: //进度条类型，实心填充 begin Canvas.Brush.Color := DrawColor; r.Right := iWidth; Canvas.FillRect(r); end; 1: //进度条类型，竖线填充 begin i := r.Left; while i < iWidth do begin Canvas.Pen.Color := Color; Canvas.MoveTo(i, r.Top); Canvas.Pen.Color := DrawColor; canvas.LineTo(i, r.Bottom); Inc(i, 3); end; end; end; //画好了进度条后，现在要做的就是显示进度数字了 Canvas.Brush.Style := bsClear; if Prosition = Round(Prosition) then S := Format('%d%%', [Round(Prosition)]) else S := FormatFloat('#0.0', Prosition); with PaintRect do begin x := Left + (Right - Left + 1 - Canvas.TextWidth(S)) div 2; y := Top + (Bottom - Top + 1 - Canvas.TextHeight(S)) div 2; end; SetBkMode(Canvas.handle, TRANSPARENT); Canvas.TextRect(PaintRect, x, y, S); end; //进度条全部画完，把颜色设置成默认色了 Canvas.Brush.Color := Color; end end; except end; end; 上面是画进度条的，现在要给TlistView处理Item重绘的消息，事件是OnCustomDrawItem，需要说明的是，如果想要随心所欲的自画Item，那么就要全部自己来完成，不再需要系统来处理： procedure TForm1.ListView1CustomDrawItem( Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var BoundRect, Rect: TRect; i: integer; TextFormat: Word; LV: 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 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; //开始画图标 i := PDownLoadListItem(Item.Data)^.StatsImageIndex; 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 := ListView1; 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.Alignment of
taLeftJustify:
TextFormat := 0;
taRightJustify:
TextFormat := DT_RIGHT;
taCenter:
TextFormat := DT_CENTER;
end;
case i of
0: //画Caption，0就是表示Caption，这不是Subitems[0]
begin
//先画选择框与图标
Draw_CheckBox_ImageList(BoundRect, LV.Canvas, Item.Checked);
//再画Caption的文字
InflateRect(Rect, -(5 + ImageList_Stats.Width), 0); //向后移3个像素,避免被后面画线框时覆盖
DrawText(
LV.Canvas.Handle,
PCHAR(Item.Caption),
Length(Item.Caption),
Rect,
DT_VCENTER or DT_SINGLELINE or DT_END_ELLIPSIS or TextFormat);
end;
1..MaxInt: //画Subitems
begin
if i - 1 = 2 then //显示状态条
begin
//开始处理进度条了，这个示例是第3栏显示进度条，可以自己随便定义
DrawSubItem(TListView(Sender),
item,
i,
StrToFloatDef(Item.SubItems[i - 1], 0),
100,
0,
True,
//这里用了一个Lable来选颜色，你自己可以使用一个变量来代替
LableProgressColor.Color, //进度条外框颜色
LableProgressColor.Color //进度条颜色
);

end
else
//画SubItem的文字
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 := $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 ReDrawItem(HwndLV: HWND; ItemIndex: integer): boolean;
begin
Result := ListView_RedrawItems(HwndLV, ItemIndex, ItemIndex);
end;
//使用：
item:=ListView1.Selected;
item.subitems[1]:='30';//设置为30%
//然后刷新这个item
ReDrawItem(ListView1.handle,Item.index);

不用进度条时的效果图：


展开全文
• 通常情况下，我们在Word2013中插入自选图形，并没有画布，而是鼠标直接画出。这样对于用惯了PS或者fireworks的朋友来说很不适应，那么怎么设置 出绘图画布呢？ ①我们启动Word2013，单击文件按钮，弹出metro...
通常情况下，我们在Word2013中插入自选图形，并没有画布，而是鼠标直接画出。这样对于用惯了PS或者fireworks的朋友来说很不适应，那么怎么设置
出绘图画布呢？①我们启动Word2013，单击文件按钮，弹出metro界面，点击选项。②然后在Word选项界面切换到高级标签。③在编辑选项中勾选插入自选图形时自动创建绘图画布。④确定之后，在插入自选图形，就会生成一个绘图画布了。
展开全文
• 但是此时插入图片，画布与图形大小不匹配，退出后，在word中显示非常大的空白。 那么此时需要做一个画布匹配图形：【设计】-【大小】-【适应绘图】，会发现画布金额图形适应匹配了。 ...
word插入visio绘图

在word中插入visio绘图可以实现双击编辑，特别方便。

画完图后（我一般先在visio画好，然后此时copy在word创建的visio对象中），可以发现，多数情况都是画布与图形大小不匹配，那么保存退出后，在word中会显示非常大的空白（或者图片残缺显示），找不准所画图片位置。

那么此时需要做一个画布匹配图形：【设计】-【大小】-【适应绘图】，会发现画布已经和图形适应匹配了，这个退出之后能在word中良好显示，没有多余空白画布。


展开全文
• 目前我采用的是CMFCTracker，但是这个tracker是绘制在当前的父窗口上的，它上方有其它子窗口时会被那些子窗口遮挡。我想要的效果是：比如选中父窗口的一个子窗口，当前子窗口又不在最上方，包含它的tracker可以显示...
• Word 鼠标移出绘图画布后已选中的图形自动取消选中解决办法： （1）在选择的对象上先鼠标右键再将鼠标移出就不会自动取消选中了 （2）在选择的对象上先鼠标右键，在弹出的菜单项中寻找要修改的项 ...
Word 鼠标移出绘图画布后已选中的图形自动取消选中解决办法：

（1）在选择的对象上先鼠标右键再将鼠标移出就不会自动取消选中了

（2）在选择的对象上先鼠标右键，在弹出的菜单项中寻找要修改的项

展开全文
• VC实现自绘图形输出到bmp文件 在用vc做程序时候，经常需要把输出的文本和图形保存到位图文件，当然可以有现成的控件来实现,但总不能如自己所愿，还是自己动手写吧！如下图： 一、实现方法 ...
• VC实现自绘图形输出到bmp文件 在用vc做程序时候，经常需要把输出的文本和图形保存到位图文件，当然可以有现成的控件来实现,但总不能如自己所愿，还是自己动手写吧！如下图： 一、实现方法 　要...
• 文章目录1、绘图画布 在哪里2、在 绘图画布 插入各种 图形直接插入 图形 1、绘图画布 在哪里 插入 --> 形状 —> 新建绘图画布 （选项的最后一个） 插入 绘图画布 如下： 2、在 绘图画布 插入各种 图形...
• 1. 由Word绘图绘制图形 2. 两种方法都可  方法 1: 通过页面设置调整文档页面大小至刚好放下图形为好; 通过选择"adobe pdf"打印机把Word文档打印至pdf文件  方法2: 通过选择"adobe pdf"打印机把Word文档打印
• 使用“绘图”工具栏，可以在文档中绘制各种形状的图形，包括线条、矩形、圆形、连接符、标注等，默认情况下，“绘图”工具栏显示在窗口的底部，具体操作方法就让Word联盟小编为大家带来分享！ 动画演示： ...
• 比如说2003插入文本框的时候，外面有一...画布一般用于“捆绑”多个图形，但会影响自选图形的编辑，很多人都关闭掉：菜单栏——工具——选项——常规——插入“自选图形”时自动创建绘图画布（取消勾选）——确定。...
• 包括线条、矩形、基本形状（诸如圆形、多边形、星形、括号、笑脸等等图形）、箭头形状、公式形状、流程图、旗帜图形、标注图形等等，我们在编程过程中，想要在Word中绘制不同类型的图形，可以通过类库来操作。...
• 当 word2007 绘图画布 第一次被引入时，其初衷是为了让用户明白绘图对象和文字不在同一层。但是，由于妨碍和干扰用户，它已停用。 在Word2007中，不再默认使用绘图画布，但是如果你是少数几个确实习惯了并还想...
• ## 使用word绘图

千次阅读 2015-07-16 17:33:54
Word是能用来绘图的，惊讶吧，而且功能相当的强大，有时候可以不用思维导图，直接使用word来替代，因为思维导图它有一定的规定，就是你必须这么画，很多都不能自定义，而且不方便，在word中你可以想怎么画就怎么画...
• 通常在word绘制好多边形后，还会对其进行编辑，使绘制的图形更加美观。 　(1)任意角度旋转绘制图形 　选中需要进行旋转的图形，移动鼠标到绘制图形的绿色控点处，当鼠标指针变成环绕箭头时，拖曳鼠标旋转图形到...
• word2003中可以使用鼠标框选多个图形，可是在word2010中却只能使用ctrl+键标一个个点选，非常不便。 如果要实现框选，需要先插入一个画布，再在画布中绘制图形。已经绘制的图形可以粘贴到画布中。 插入画布操作：...
• 有时候我们在编辑word文档的时候需要利用一些图形来完成操作，那么应该如何画图呢，下面就由小编来为大家讲解讲解如何在word文档中画图。 首先我们把需要编辑的word文档打开，或者新建一个空白的文档来进行学习。...
• 【Android 2D绘图解析】系列文章将全面介绍Android绘图相关，这篇简单介绍下如何利用Android API进行一些简单图形的绘制，绘图的前提是需要继承View，然后重写它的onDraw(Canvas canvas) 方法即可。 首
• 方法一：简单直接粗暴 1.1、在matlab的figure中另存为emf格式，保存到本地，打开Word插入图片，不要复制粘贴。...虽然原图非常清晰，但有个小缺点，当把Word中的图形缩小时，线条会比原来粗很多，很模糊。...
• 最近做一些文档的时候要在软件屏幕截图上做标注,用的是word的绘图标注功能,在使用过程中发现当重新排版的时候这些标注就会跑版(印刷专用术语,哈哈)。上网查资料得知必须把标注和被标注的图片进行组合才可以，这样这...
• 1. 在WORD中,右键VISIO图 > VISIO对象 > 转换 > 确定; <br />2. 或者在复制VISIO图到WORD中时,采用选择性粘贴: 假设在VISIO选择... 选择VISIO图形 > 编辑 > 复制 > 选择性粘贴 > Microsoft Visio
• word中轻松绘制物理学科的相关图形 。包含4个软件
• 作者：南火，E-mail:nanhovan@126.com 标题：用...也许你试着直接用Word来画，但你马上发现在Word中要画出这一幅图形可不是那么容易的事；也许你 试着直接用Windows自己带的画图板来画，但你马上也发现还是不容易画出
• ## C语言图形编程中的绘图函数~

千次阅读 多人点赞 2017-02-01 16:19:44
setviewport() 设置图形视口函数  37. clearviewport()清除图形视口函数  38. cleardevice() 清除屏幕函数  39. getviewsettings() 获取图形视口设置函数 二、调色板和颜色函数  40. setpalette()设置调色板...
• §5 MATLAB图形功能　MATLAB有很强的图形功能，可以方便地实现数据的视觉化。强大的计算功能与图形功能相结合为MATLAB在科学技术和教学方面的应用提供了更加广阔的天地。下面着重介绍二维图形的画法，对三维图形只作...
• word文档中把几个图形组合在一起 在文档中绘制图形时，想把多个图形组合在一起成为一个整体。这需要用到组合命令。下面，我们来看下操作步骤。 下面中的文档，已绘制出三个图形； 现在...
• 我的思路就是讲画过的图形全部保存下来，一旦修改其中一个，就将以前的全部清除，然后重所有图形。不知道思路对不对。 还有就是希望鼠标在靠近图形时会有变化，比如指针变成十字箭头，或者线段端点凸现出来，...
• 参考MathWorks官方关于图形问题的讨论：...问题描述:之前困扰了我很久，为什么我升级到Matlab2016等高版本以后，发现plot绘图不能显示图线，而且图形很刺眼，有较严重的锯齿现象。折腾了很久

...