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

📄 00202.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 align="left"><span style="BACKGROUND-COLOR: #ff0000"><a href="00202.zip">源程序下载</a></span><b><span style="background-color: #000080"><br>
</span><span style="background-color: #000000"><br>
</span><span style="background-color: #000080"><a name="1"></a>1:变色窗口背景&nbsp;</span></b> 
</p> 
 
<p>第一步:创建一个应用程序,保存为Unit为U00202.Pas,Form.Name = Form1,Progect为P00202.prg。<br>     
第二步:在Form1的OnCreate事件里面添加如下一段代码:<br>     
	procedure TForm1.FormPaint(Sender: TObject);<br>     
	var<br>     
&nbsp;&nbsp;&nbsp; i:word;<br>    
&nbsp;&nbsp;&nbsp; dy,y:real;<br>    
	begin<br>    
&nbsp;&nbsp;&nbsp; dy:=clientheight/256;<br>    
&nbsp;&nbsp;&nbsp; y:=0;<br>    
&nbsp;&nbsp;&nbsp; for i:=255 downto 0 do<br>     
&nbsp;&nbsp;&nbsp; begin<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; canvas.brush.color:=$00000000+i*$10000;<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; canvas.fillrect(rect(0,round(y),clientwidth,round(y+dy)));<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y:=y+dy;<br>    
&nbsp;&nbsp;&nbsp; end;<br>    
	end;<br>    
自己动手试一下吧,你还可以把$00000000,改成其他你喜欢的颜色。<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:不用标题栏也移动窗体</span></b>   
<br>   
  一般情况下,移动一个窗体需要将鼠标放置在标题栏上才能拖动窗体,为 什么非要使用标题栏呢?其实我们可以使用一个巧妙的方法来实现将鼠标放置 在窗体上按下就可拖动窗体,下面先看实现代码。在Form1的“Private”部分声明过程:<br>     
<br>     
	在private部分加入下列代码:<br>     
	procedure wmnchittest(var msg:twmnchittest);message wm_nchittest;<br>     
	在程序部分加入以下代码:<br>     
	procedure TForm1.wmnchittest(var msg:twmnchittest);<br>     
	begin<br>     
&nbsp;&nbsp;&nbsp; inherited;<br>    
&nbsp;&nbsp;&nbsp; if (htclient=msg.result) then msg.result:=htcaption;<br>     
	end;<br>     
  上面的关键代码虽然只有两行,但它实现了鼠标直接拖动窗体的目的。代码的原理是利用窗体的WM_NCHITTEST消息,这个消息是当光标移动、鼠标按下或释放时发生的,当程序检测到鼠标在窗体中按下的消息后(消息的值为htClient),将鼠标在标题栏上按下时产生的消息(值为htCaption)传递出去,这样就巧妙的欺骗程序认为是标题栏被按下,当然就可拖动窗体了。<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:状态条插入可视控件&nbsp;</span><br>
  </b>首先,在FROM中放置一个状态条控件StatusBar1:TStatusBar,。调节StatusBar1.Panels,在其中插入3个状态条嵌板。把第二个嵌板的参数Style设置成psOwnerDraw。这一点很重要,如果没有这样做,将永远无法显示文字以外的东西。在From中放置一个Button1:TButton ;<br>     
  第二步,在FROM的Public中申明一个StatusDrawRect:TRect; //记录要插入状态条特技的坐标范围<br>     
  第三步:在状态条的OnDrawPanel事件中插入一行StatusDrawRect:=rect;以记录参数Style设置成psOwnerDraw的嵌板的坐标。在Button1的OnClick事件,中定义一个TProgressBar类型的变量Progress。响应过程中调用Create方法把它建立起来,再设定状态条为该进程条的父窗口,进而设定进程条的一些必要参数。例如:最大值、最小值、原点坐标、高度和宽度等。<br>
procedure TForm1.Button1Click(Sender: TObject);<br>    
Var<br>    
&nbsp;&nbsp;&nbsp; ssbmp:Tbitmap;<br>   
&nbsp;&nbsp;&nbsp; progress:TProgressbar;<br>   
&nbsp;&nbsp;&nbsp; I, count:integer;<br>    
&nbsp;&nbsp;&nbsp; staPanleWidth:integer;<br>   
begin<br>   
&nbsp;&nbsp;&nbsp; progress:=TProgressbar.create(form1);<br>   
&nbsp;&nbsp;&nbsp; count:=9000; //进程条的最大值<br>    
&nbsp;&nbsp;&nbsp; staPanleWidth:=StatusBar1.Panels.Items[1].width; //由于进程条的很宽,所以需要改变状态条嵌板的宽度,这里先保存它的宽度。<br>    
&nbsp;&nbsp;&nbsp; StatusBar1.Panels.Items[1].width:=300; // 改变宽度<br>    
&nbsp;&nbsp;&nbsp; StatusBar1.repaint;<br>   
&nbsp;&nbsp;&nbsp; with progress do<br>    
&nbsp;&nbsp;&nbsp; begin<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; top:=StatusDrawRect.top;<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; left:=StatusDrawRect.left;<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width:=StatusDrawRect.right-StatusDrawRect.left;<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height:=StatusDrawRect.bottom-StatusDrawRect.top;<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设定进程条的宽度和高度<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; visible:=true;<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Parent := StatusBar1; //该进程条的拥有者为状态条status<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Max := Count; //进程条的最大和最小值<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Min := 0;<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Step := 1; //进程条的步长<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i := 1 to Count do Stepit; // 累加进程条<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowMessage('现在,进程条将要从内存中被释放');<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Free; //释放进程条<br>    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; //try<br>    
&nbsp;&nbsp;&nbsp; end; //with<br>    
&nbsp;&nbsp;&nbsp; StatusBar1.Panels.Items[1].width:=staPanleWidth; //恢复状态条嵌板的宽度<br>    
end;<br>    
<br>    
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;  Panel: TStatusPanel; const    
Rect:TRect);<br>   
begin<br>   
&nbsp;&nbsp;&nbsp; StatusDrawRect:=rect; //记录要实现状态条特技的坐标范围<br>    
end;<br>    
</p>    
    
<p align="left"><span style="background-color: #FF0000"><a href="00202.zip">源程序下载</a></span>   
</p>   
   
</body>   
   
</html>   

⌨️ 快捷键说明

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