⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00102.htm

📁 提供了Delphi编程的几个巧妙用法
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>1</title>
</head>

<body bgcolor="#000000" text="#FFFFFF" link="#FFFFFF">

<p><span style="BACKGROUND-COLOR: #ff0000"><a href="00102.zip">源程序下载</a></span><b><span style="background-color: #000080"><br>
</span></b><span style="background-color: #000000">
<br>
</span><b><span style="background-color: #000080">
<a name="1"></a>
1:给ListBox、ComboBxox添加图片<br>
</span><span style="background-color: #000000">
<br>
</span></b>第一步:<br>
  在Form1上分别放置一个ComboBox1: TComboBox,改变ComboBox1的Style属性:ComboBox1.Style := csOwnerDrawVariable;ListBox1 : TListBox,改变ListBox1的Style属性 ListBox1.style := lbOwnerDrawVariable<br>     
<br>     
<br>     
第二步:<br>     
  定义一个图片数组,TheBitmap : Array [1..10] of TBitmap ;同时再设置一个BmpAlreadyCreate : Boolean;变量,用于判断图片是否已经生成。<br>     
<br>     
第三步:<br>     
  给ComboBox1.OnDrawItem和ListBox1.OnDrawItem事件添加内容。<br>
<br>
第四步:<br>
  在程序退出时释放所创建的图片资源,图片是否创建,由变量BmpAlreadyCreat来判断;<br>
<br>
具体程序如下:<br>
procedure TForm1.FormCreate(Sender: TObject);<br>     
begin<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BmpAlreadyCreate := False ;<br>     
end;<br>     
<br>     
procedure TForm1.Button1Click(Sender: TObject);<br>     
Var<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I : Integer ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AppPath : String ;<br>     
begin<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AppPath := ExtractFilePath(Application.Exename);<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Not BmpAlreadyCreate Then<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
For I := 1 to 10 do<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
TheBitmap[i] := TBitmap.Create ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
TheBitmap[i].LoadFromFile(AppPath+'00102\'+IntToStr(i)+'.bmp') ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
ComboBox1.Items.AddObject('ComboBox测试 '+IntToStr(i), TheBitmap[i]) ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
ListBox1.Items.AddObject('ListBox测试 '+IntToStr(i), TheBitmap[i]) ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
End ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BmpAlreadyCreate := True ;<br>     
end;<br>     
<br>     
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;<br>     
  Rect: TRect; State: TOwnerDrawState);<br>     
var<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bitmap: TBitmap ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Offset: Integer ;<br>     
begin<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; offset := 0 ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with (Control as TComboBox).Canvas do<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
FillRect(Rect);<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Bitmap := TBitmap(ComboBox1.Items.Objects[Index]);<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
if Bitmap &lt;> nil then<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width,<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width,<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Bitmap.Height), clRed);<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Offset := Bitmap.width + 8;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
end;<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
TextOut(Rect.Left + Offset, Rect.Top, Combobox1.Items[Index]) //display the text<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>    
end;<br>    
<br>    
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect:     
TRect; State: TOwnerDrawState);<br>     
var<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bitmap: TBitmap;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Offset: Integer;<br>     
Begin<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; offset := 0 ;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with (Control as TListBox).Canvas do<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
FillRect(Rect);<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Bitmap := TBitmap(ListBox1.Items.Objects[Index]);<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
if Bitmap &lt;> nil then<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width,<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width,<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Bitmap.Height), clRed);<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Offset := Bitmap.width + 8;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
End;<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
TextOut(Rect.Left + Offset, Rect.Top, ListBox1.Items[Index]) //display the text<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End ;<br>     
End ;<br>     
<br>     
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>     
Var<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I : Integer ;<br>     
begin<br>     
  if BmpalreadyCreate Then<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For I := 1 to 10 do TheBitmap[i].Free ;<br>     
end;<b><span style="background-color: #000080"><br>    
</span><span style="background-color: #000000">    
<br>    
</span><span style="background-color: #000080">    
<a name="2"></a>   
2:给ListBox添加水平滚动条</span></b>      
<br>   
  给LitBox添加水平滚动条,只需要一句话,SendMessage(ListBox1.Handle,LB_SetHorizontalExtent,5000, longint(0)); 就可以实现。<br>     
procedure TForm1.Button2Click(Sender: TObject);<br>     
begin<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SendMessage(ListBox1.Handle,LB_SetHorizontalExtent,5000, longint(0));<br>     
end;<b><span style="background-color: #000080"><br>    
</span><span style="background-color: #000000">    
<br>    
</span><span style="background-color: #000080">    
<a name="3"></a>   
3:Delphi中动态定制菜单</span></b>      
<br>   
  Delphi的标准构件组中提供了Menu标准菜单和PopupMenu弹出式菜单两种组件,这两个构件,既可以在设计过程中根据需要填写各个菜单项,定制各菜单项的响应事件,也可以在程序运行过程当中,根据使用者的选择,动态确定菜单项的内容与响应事件,即动态定制菜单。前一种方法较为简单,被广大程序员广泛采用;后一种方法较为复杂,但适用性特别好,可移植性强,在实际编程当中,一些特殊的要求下,是解决问题的唯一方法。<br>
  PopupMenu弹出式菜单的各菜单项实际上是一个个TMenuItem类的对象,不同对象的Caption属性就是菜单在屏幕上显示的内容。改变这些Caption属性的内容即可达到动态定制菜单项的目的。弹出时菜单项数目的增减,可以通过TPopupMenu.items.add(TMenuItem)和TPopupMenu.items.delete(Word)两种方法来实现,然后再通过对TmenuItem.OnClick事件的重定向,实现菜单选择的事件响应。<br>
  在Form1上放置PopuMenu1: TPopupMenu与Button3:Tbutton,设置各Form1.PopupMenu := PopuMenu1,在按Delphi中动态定制菜单之前和按了之后,所见到弹出式菜单有什么不同。<br>     
  本程序的注意事项:删除弹出式菜单PopupMenu1原先的菜单项时,PopupMenu1.items.count会随着Delete(0)方法的使用自动逐步减小。因此删除菜单时,应该注意。<br>
Procedure Tform1.ShowIt(Sender:Tobject);<br>     
begin<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; With Sender as TmenuItem do<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Label1.Caption := Caption<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>    
end;<br>    
<br>    
procedure TForm1.Button3Click(Sender: TObject);<br>     
Var<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Menuitem:array[1..4]of Tmenuitem;<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I:integer;<br>    
begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While(popupmenu1.items.count>0) Do<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PopupMenu1.Items[0].free ; //释放已经创建的TmenuItem<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for I:=1 to 4 do<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
Menuitem[I]        := TmenuItem.Create(Self); //动态创建TMenuItem<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
MenuItem[I].Caption:= 'File '+inttostr(I);    //设置MenuItem的Caption属性<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
MenuItem[I].OnClick:= ShowIt;                 //定义menuItem的OnClick事件的处理过程<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
PopupMenu1.Items.Add(MenuItem[I]);            //增加到PopMenu中<br>     
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End;<br>    
end;<br>    
  <br>
<br>  
<span style="background-color: #FF0000"><a href="00102.zip">源程序下载</a></span>   
</p> 
 
</body>   
   
</html>   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -