📄 011.htm
字号:
每个项目有不同的高度</font> <fontface="宋体" lang="ZH-CN"> </font> 1bOwnweDrawVarible</p><p> </p><font face="宋体" lang="ZH-CN"><p> </font> <font face="宋体"lang="ZH-CN">由运行数据决定 </font> csOwnerDrawVarible</p><p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p><p> </font>tab-set<font face="宋体" lang="ZH-CN">与字符串网格的</font>Style<fontface="宋体" lang="ZH-CN">属性通常是</font>Varible.</p><p><font face="宋体" lang="ZH-CN">在</font>Strlist<font face="宋体" lang="ZH-CN">程序中,列表框与</font>tab-set<fontface="宋体" lang="ZH-CN">取值如表</font>3.3<font face="宋体" lang="ZH-CN">: </p></font><p><font face="宋体" lang="ZH-CN">表</font>3.3 <font face="宋体" lang="ZH-CN">列表框与</font>tab-set<fontface="宋体" lang="ZH-CN">的取值</font></p><p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p> 名称 </font>style</p><p><font face="宋体" lang="ZH-CN">──────────────────────────</font></p><p>ListBox1 lbOwnerDrawVariable</p><p>Tabset1 tsOwnerDrawVariable</p><p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━</p></font><p>3.2.2 <font face="宋体" lang="ZH-CN">把图像加入字符串列表 </p><p> 上节已介绍如何把对象加入字符串列表,例程把位图对象加入</font>Tabset1<fontface="宋体" lang="ZH-CN">的</font>Tabs<font face="宋体" lang="ZH-CN">中: </p></font><p>procedure TForm1.FormCreate(Sender: TObject);</p><p>var</p><p>Bitmap: TBitMap;</p><p>begin</p><p>Listbox1.Items := Screen.Fonts;</p><p>Bitmap := TBitmap.Create;</p><p>Bitmap.LoadFromFile('PHONE.BMP');</p><p>Tabset1.Tabs.AddObject('phone',Bitmap);</p><p>Bitmap := TBitmap.Create;</p><p>Bitmap.LoadFromFile('PRINTER.BMP');</p><p>Tabset1.Tabs.AddObject('printer ',Bitmap);</p><p>end; </p><p>3.2.3 <font face="宋体" lang="ZH-CN">绘制自画项目 </p><p> 当部件的</font>Style<font face="宋体" lang="ZH-CN">属性是自画式时,</font>Windows<fontface="宋体" lang="ZH-CN">不再绘制部件,相反</font>Windows<font face="宋体"lang="ZH-CN">为每个可视项目产生事件,而应用程序必须在事件中绘制项目。</p><p> 在应用程序绘制自画控制之前,</font>Windows<font face="宋体"lang="ZH-CN">产生测量项目事件,这个事件告诉程序项目显示的位置</font><font face="宋体" lang="ZH-CN">。</p><p> 通常由</font>Windows<font face="宋体" lang="ZH-CN">决定项目显示的大小,但应用程序可以处理这个事件并自己选择显示区域。例如,程序要用位图代替文本显示,则需要把区域设置成位图的大小。测量项目事件的名称随部件的名称不同而不同,对于列表框和组合框,该事件叫</font>OnMeasureItem<fontface="宋体" lang="ZH-CN">。对于</font>Tabset<font face="宋体" lang="ZH-CN">,该事件叫</font>OnMeasureTab<fontface="宋体" lang="ZH-CN">。</p><p> 测量项目事件有两个重要参数</font>: <font face="宋体" lang="ZH-CN">项目索引号与项目的大小。这个大小是变化的。后继项目的输出位置由前面项目的大小决定。例如,在自画式列表框中,如果应用程序把第一个项目的高度设置成</font>5<fontface="宋体" lang="ZH-CN">个象素点,则第二个项目在第六个象素点开始输出。列表框和组合框中,应用程序只能设置成项目的高度,而项目的宽度就是部件的高度。在</font>Tabset<fontface="宋体" lang="ZH-CN">中,</font>tabs<font face="宋体" lang="ZH-CN">的宽度是可变的,而高度则是固定的。自画式网格允许应用程序改变网格单元的高度和宽度。</p><p> </font>OnMeasureItem<font face="宋体" lang="ZH-CN">的声明如下:</font></p><p>ListBox1 MeasureItem(Control: TwinControl;Index: Integer; var Height: Integer);</p><font face="宋体" lang="ZH-CN"><p> 例程中响应</font>OnMeasureItem<fontface="宋体" lang="ZH-CN">事件的代码如下</font>: </p><p>procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;</p><p>var Height: Integer);</p><p>begin</p><p>with ListBox1.Canvas do</p><p>begin</p><p>Font.Name := ListBox1.Items[Index];</p><p>Height := TextHeight('A');</p><p>end;</p><p>end; </p><p>procedure TForm1.TabSetMeasureTab(Sender: TObject; Index: Integer;</p><p>var TabWidth: Integer);</p><p>var</p><p>BitmapWidth: Integer;</p><p>begin</p><p>BitmapWidth := TBitmap( TabSet1.Tabs.Objects[Index]).Width;</p><p>Inc(TabWidth, 2 + BitmapWidth);</p><p>end; </p><p><font face="宋体" lang="ZH-CN"> 在</font>OnMeasureItem<font face="宋体"lang="ZH-CN">事件发生后,</font>Windows<font face="宋体" lang="ZH-CN">激发一个叫</font>OnDrawItem<fontface="宋体" lang="ZH-CN">的事件,这个事件也随部件名称不同而不同,常见的有</font>OnDrawItem<fontface="宋体" lang="ZH-CN">、</font>OnDrawTab<font face="宋体" lang="ZH-CN">、</font>OnDrawCell<fontface="宋体" lang="ZH-CN">。</p><p> </font>OnMeasureItem<font face="宋体" lang="ZH-CN">的声明如下:</font></p><font face="宋体" lang="ZH-CN"><p> </font>DrawItem( Control: TWinControl; Index:integer; Rect: TRect; State: TOwnerDraw); </p><p><font face="宋体" lang="ZH-CN">其中</font>Control<font face="宋体" lang="ZH-CN">是包含项目的部件引用</p><p> </font>Index<font face="宋体" lang="ZH-CN"> 是项目的索引号</p><p> </font>Rect<font face="宋体" lang="ZH-CN"> </font> <font face="宋体"lang="ZH-CN">是绘制的矩形</p><p> </font>State <font face="宋体" lang="ZH-CN">是项目的状态,如选中,得到焦点等。 </p><p> 在例程的列表框中,所列项目是屏幕支持的各种字体名称,当列表框发生</font>OnDrawItem<fontface="宋体" lang="ZH-CN">事件时,程序把输出字体设置成该项目所代表的字体,因而列表框的项目呈现出不同的字体,其代码如下:</font> </p><p>procedure TForm1.DrawItem(Control: TWinControl; Index: Integer;</p><p>Rect: TRect; State: TOwnerDrawState);</p><p>begin</p><p>with ListBox1.Canvas do</p><p>begin</p><p>FillRect(Rect);</p><p>Font.Name := ListBox1.Items[Index];</p><p>TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]);</p><p>end;</p><p>end;</p><font face="宋体" lang="ZH-CN"><p> 在</font>Tabset<font face="宋体" lang="ZH-CN">部件中,则把位图与文本同时输出,其代码如下: </p></font><p>procedure TForm1.TabSet1DrawTab(Sender: TObject; TabCanvas: TCanvas;</p><p>R: TRect; Index: Integer; Selected: Boolean);</p><p>var</p><p>Bitmap: TBitmap;</p><p>begin</p><p>Bitmap := TBitmap(TabSet1.Tabs.Objects[Index]);</p><p>with TabCanvas do</p><p>begin</p><p>Draw(R.Left, R.Top + 4, Bitmap);</p><p>TextOut(R.Left + 2 + Bitmap.Width,</p><p>R.Top + 2, TabSet1.Tabs[Index]); </p><p>end;</p><p>end;</p><BR><hr width="94%"></TD><TD CLASS="tt3" VALIGN="bottom" width="8%" ><strong><A HREF="012.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="010.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD></TR></table></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -