精华内容
下载资源
问答
  • delphi listview自绘图形

    千次阅读 2011-09-14 13:47:54
    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 绘图画布介绍

    千次阅读 2014-12-26 16:49:17
    当 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) 方法即可。 首
  • Matlab图形高清插入word文档的几种方法。

    万次阅读 多人点赞 2019-04-11 20:29:23
    方法一:简单直接粗暴 1.1、在matlab的figure中另存为emf格式,保存到本地,打开Word插入图片,不要复制粘贴。...虽然原图非常清晰,但有个小缺点,当把Word中的图形缩小时,线条会比原来粗很多,很模糊。...
  • word图形组合的问题

    千次阅读 2006-08-09 23:59:00
    最近做一些文档的时候要在软件屏幕截图上做标注,用的是word的绘图标注功能,在使用过程中发现当重新排版的时候这些标注就会跑版(印刷专用术语,哈哈)。上网查资料得知必须把标注和被标注的图片进行组合才可以,这样这...
  • WORD中插入VISIO图形,打印乱码解决

    千次阅读 2011-04-14 00:50:00
    1. 在WORD中,右键VISIO图 > VISIO对象 > 转换 > 确定; <br />2. 或者在复制VISIO图到WORD中时,采用选择性粘贴: 假设在VISIO选择... 选择VISIO图形 > 编辑 > 复制 > 选择性粘贴 > Microsoft Visio
  • word中轻松绘制物理学科的相关图形 。包含4个软件
  • 用graphviz出特殊图形

    千次阅读 2006-04-14 16:47:00
    作者:南火,E-mail:nanhovan@126.com 标题:用...也许你试着直接用Word来画,但你马上发现在Word中要画出这一幅图形可不是那么容易的事;也许你 试着直接用Windows自己带的画图板来画,但你马上也发现还是不容易画出
  • C语言图形编程中的绘图函数~

    千次阅读 多人点赞 2017-02-01 16:19:44
    setviewport() 设置图形视口函数  37. clearviewport()清除图形视口函数  38. cleardevice() 清除屏幕函数  39. getviewsettings() 获取图形视口设置函数 二、调色板和颜色函数  40. setpalette()设置调色板...
  • MATLAB图形输出到word

    千次阅读 2009-01-03 21:39:00
    §5 MATLAB图形功能 MATLAB有很强的图形功能,可以方便地实现数据的视觉化。强大的计算功能与图形功能相结合为MATLAB在科学技术和教学方面的应用提供了更加广阔的天地。下面着重介绍二维图形的画法,对三维图形只作...
  • word文档中把几个图形组合在一起

    千次阅读 2018-05-15 17:38:00
    word文档中把几个图形组合在一起 在文档中绘制图形时,想把多个图形组合在一起成为一个整体。这需要用到组合命令。下面,我们来看下操作步骤。 下面中的文档,已绘制出三个图形; 现在...
  • 我的思路就是讲画过的图形全部保存下来,一旦修改其中一个,就将以前的全部清除,然后重所有图形。不知道思路对不对。 还有就是希望鼠标在靠近图形时会有变化,比如指针变成十字箭头,或者线段端点凸现出来,...
  • 参考MathWorks官方关于图形问题的讨论:...问题描述:之前困扰了我很久,为什么我升级到Matlab2016等高版本以后,发现plot绘图不能显示图线,而且图形很刺眼,有较严重的锯齿现象。折腾了很久

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,642
精华内容 5,456
关键字:

word自绘图形