Delphi字符串列表及应用(四)

 我来答
舒适还明净的海鸥i
2022-10-18 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:70万
展开全部

   把图像加入字符串列表 

  上节已介绍如何把对象加入字符串列表 例程把位图对象加入Tabset 的Tabs中  

  procedure TForm FormCreate(Sender: TObject);  var  Bitmap: TBitMap;  begin  Listbox Items := Screen Fonts;  Bitmap := TBitmap Create;  Bitmap LoadFromFile( PHONE BMP );  Tabset Tabs AddObject( phone Bitmap);  Bitmap := TBitmap Create;  Bitmap LoadFromFile( PRINTER BMP );  Tabset Tabs AddObject( printer Bitmap);  end;    绘制自画项目 

  当部件的Style属性是自画式时 Windows不再绘制部件 相反Windows为每个可视项目产生事件 而应用程序必须在事件中绘制项目

  在应用程序绘制自画控制之前 Windows产生测量项目事件 这个事件告诉程序项目显示的位置

  通常由Windows决定项目显示的大小 但应用程序可以处理这个事件并自己选择显示区域 例如 程序要用位图代替文本显示 则需要把区域设置成位图的大小 测量项目事件的名称随部件的名称不同而不同 对于列表框和组合框 该事件叫OnMeasureItem 对于Tabset 该事件叫OnMeasureTab

  测量项目事件有两个重要参数: 项目索引号与项目的大小 这个大小是变化的 后继项目的输出位置由前面项目的大小决定 例如 在自画式列表框中 如果应用程序把第一个项目的高度设置成 个象素点 则第二个项目在第六个象素点开始输出 列表框和组合框中 应用程序只能设置成项目的高度 而项目的宽度就是部件的高度 在Tabset中 tabs的宽度是可变的 而高度则是固定的 自画式网格允许应用程序改变网格单元的高度和宽度

  OnMeasureItem的声明如下

  ListBox MeasureItem(Control: TwinControl;Index: Integer; var Height: Integer);

  例程中响应OnMeasureItem事件的代码如下:  

  procedure TForm ListBox MeasureItem(Control: inControl; Index: Integer;  var Height: Integer);  begin  with ListBox Canvas do  begin  Font Name := ListBox Items[Index];  Height := TextHeight( A );  end;  end;   procedure TForm TabSetMeasureTab(Sender: TObject; Index: Integer;  var TabWidth: Integer);  var  BitmapWidth: Integer;  begin  BitmapWidth := TBitmap( TabSet Tabs Objects[Index]) Width;  Inc(TabWidth + BitmapWidth);  end;

  在OnMeasureItem事件发生后 Windows激发一个叫OnDrawItem的事件 这个事件也随部件名称不同而不同 常见的有OnDrawItem OnDrawTab OnDrawCell

  OnMeasureItem的声明如下

  DrawItem( Control: inControl; Index: integer; Rect: TRect; State: TOwnerDraw); 

  其中Control是包含项目的部件引用

  Index 是项目的索引号

  Rect  是绘制的矩形

  State 是项目的状态 如选中 得到焦点等  

  在例程的列表框中 所列项目是屏幕支持的各种字体名称 当列表框发生OnDrawItem事件时 程序把输出字体设置成该项目所代表的字体 因而 列表框的项目呈现出不同的字体 其代码如下  

lishixinzhi/Article/program/Delphi/201311/24764

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式