📄 h20000424-23.htm
字号:
<html><head><script language="JavaScript"> function reset(){ for ( var i=0; i < document.Form1.elements.length; i++ ) { document.Form1.elements[i].options[0].selected=true }}function going(url){ parent.location=url; reset();}</script><style><!--A:link {text-decoration: none; color: #000000; font-family: 宋体}A:visited {text-decoration: none; color: #000000; font-family: 宋体}A:active {text-decoration: none; font-family: 宋体}A:hover {text-decoration: underline:#ffffff; color: #ff0000}body,table {font-size: 9pt; font-family: 宋体}.H1 {font-size: 9pt ; line-height:9pt; align=center}.ourfont {font-size: 9pt ; line-height:9pt; }.ourfont1 {font-size: 9pt ; line-height:9pt; }--></style><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>在Delphi中不使用VCL库建立窗口 </title></head><body topmargin="0" leftmargin="0"><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody> <tr> <td><p class="content4"><span class="font"><img border="0" height="3" src="../../soft/pix.gif" width="700"></span></td> </tr></tbody></table></center></div><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody> <tr> <td bgColor="#3399ff" width="658"><p class="ourfont"><span class="font"> </span><a style="text-decoration: none; color: rgb(255,255,255)" href="../os/H00705-2.htm">操作系统</a><font color="#FFFFFF"><span class="font"><span> |</span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../image/H00705-14.htm">图像处理</a><font color="#FFFFFF"><span>|<span class="font"> </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../autoCAD/H00705-19.htm">辅助设计</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../data/H00705-18.htm">数 据 库</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="H00706-1.htm">高级编程</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../netuse/H00705-20.htm">网络应用</a><font color="#FFFFFF"><span><span class="font"> | </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../webpage/H00705-21.htm">网页制作</a><font color="#FFFFFF"><span><span class="font"> |</span></span></font> <a style="color: rgb(255,255,255); text-decoration: none" href="../technic/H00706-3.htm">技术交流 </a><a style="color: rgb(255,255,255); text-decoration: none" href="http://202.100.13.77/clslyb/default.asp?clsid=jiaoc"><font color="#FFFFFF"><strong>过客留言</strong></font></a></td> <td bgColor="#3399ff" width="32"><p align="center" class="ourfont"><a href="mailto:net@163.sn.cn"><img src="../../soft/email.gif" alt="email.gif (493 字节)" border="0" WIDTH="20" HEIGHT="19"></a></td> </tr></tbody></table></center></div><div align="center"><center><table border="1" cellSpacing="1" width="700" bordercolor="#3399FF"><tbody> <tr> <td align="left" bgColor="#FFFFFF" vAlign="top" width="700" bordercolor="#0000FF" bordercolorlight="#0000FF" bordercolordark="#0000FF"><p class="ourfont"> </p> <p align="center">在Delphi中不使用VCL库建立窗口 </p> <p><br> Borland的Delphi语言中提供了类似于VB中ActiveX的VCL控件库,利用它建立程序界面是十分方便的,但是这也带来了一个问题,就是即使建立一个非常简单的窗口,Delphi也会将所有的控件编译进去,使得程序十分庞大(通过常规方式建立一个仅包含一个窗口,不响应任何消息的程序的尺寸大概就有至少200K字节以上)。<br> 这里,我向大家介绍一个不使用VCL库建立窗口的方法。首先打开一个文本编辑器(例如NotePad),然后在其中输入以下的程序代码:<br> program Project2;<br> uses<br> Windows;<br> const<br> AppName = ‘Windows’;<br> WM_DESTROY = 2;<br> WM_LBUTTONUP = 514;<br> {$R *.RES}<br> //窗口处理函数<br> function WindowProc(Window:Hwnd;Amessage,wParam,<br> lParam:LongInt):LongInt;stdcall;export;<br> begin<br> WindowProc:=0;<br> case AMessage of<br> WM_DESTROY:<br> begin<br> PostQuitmessage(0);<br> Exit;<br> end;<br> WM_LBUTTONUP:<br> begin<br> PostQuitmessage(0);<br> Exit;<br> end;<br> end;<br> WindowProc := DefWindowProc(Window,AMessage,wParam,lParam);<br> end;<br> <br> //注册窗口函数<br> function WinRegister:Boolean;<br> var<br> WindowClass:TWndClass;<br> begin<br> WindowClass.style:=cs_hredraw or cs_vRedraw or cs_NoClose;<br> WindowClass.lpfnWndProc := @WindowProc;<br> WindowClass.cbClsExtra := 0;<br> WindowClass.cbWndExtra := 0;<br> WindowClass.hInstance := Hinstance;<br> WindowClass.hIcon := LoadIcon(0,idi_Application);<br> WindowClass.hCursor := LoadCursor(0,idc_Arrow);<br> WindowClass.hbrBackground:=HBrush(COLOR_BTNFACE);<br> WindowClass.lpszMenuName := nil;<br> WindowClass.lpszClassName := AppName;<br> <br> Result:=RegisterClass(WindowClass)<>0;<br> end;<br> <br> //建立工具栏窗口函数<br> function WinCreate:HWnd;<br> var<br> hWindow:Hwnd;<br> pcharTemp:PChar;<br> begin<br> hWindow:=CreateWindowEx(WS_EX_RTLREADING or WS_EX_TOOLWINDOW,<br> AppName,‘Samples Window’,ws_OverlappedWindow,<br> cw_UseDefault,cw_UseDefault,cw_UseDefault,cw_UseDefault,0,0,<br> Hinstance,nil);<br> if hWindow<>0 then<br> begin<br> pcharTemp:=‘Samples’;<br> ShowWindow(hWindow,cmdShow);<br> TextOut(GetWindowDC(hWindow),10,50,pcharTemp,7);<br> UpdateWindow(hWindow);<br> end;<br> <br> Result:=hWindow;<br> end;<br> <br> var<br> AMessage:TMsg;<br> hWindow:HWnd;<br> begin //主程序部分<br> if not WinRegister then<br> begin<br> MessageBox(0,‘窗口注册失败’,nil,mb_ok);<br> Exit;<br> end;<br> hWindow:=WinCreate;<br> if hWindow=0 then<br> begin<br> MessageBox(0,‘建立窗口失败’,nil,mb_ok);<br> Exit;<br> end;<br> While GetMessage(AMessage,0,0,0)do<br> begin<br> TranslateMessage(AMessage);<br> DispatchMessage(AMessage);<br> end;<br> Halt(AMessage.wParam);<br> end.<br> 将上面的内容以 Project2.dpr 为文件名保存到Delphi的Bin目录中,然后使用Delphi中的DCC32来编译工程文件,具体的使用方法是:<br> DCC32 Project2.dpr 。在编译过程中可能有一些警告(Warning)消息,不要理会。编译完成后,在Bin目录下会产生一个Project2.exe的文件,查看一下,这个文件是不是“缩水”了很多呢?在我的机器上编译出来的程序只有17K左右,这同使用C++编译的程序大小几乎没有什么两样。分析上面的程序,使用C++编写过Windows下程序的读者可能会觉得十分的熟悉,的确,同C++编写一样。在Delphi中不使用VCL编写窗口界面也需要三个函数:窗口建立函数、窗口注册函数和窗口消息处理函数。在上面的程序中,函数WinCreate是窗口建立函数,这个函数通过CreateWindowsEx函数建立一个工具栏窗口,窗口建立成功后显示窗口并在窗口中10,50的位置输出“Samples”。WindowProc函数是窗口消息处理函数,这个函数只处理两个消息:WM_DESTROY和WM_LBUTTONUP。在得到这两个消息后退出。WinRegister是窗口注册函数,这个函数注册WinCreate建立的窗口并禁止窗口系统菜单的“关闭”项,同时将WindowProc定义为窗口消息处理函数。<br> 对于使用Pascal语言,对C++不熟悉的朋友来说,只要根据自己的需要对上面的程序稍微做一些修改,就可以编写同C++编写出来的一样“苗条”的程序了。<br> 以上程序在Borland Delphi4.0,Win98下编译通过。 </td> </tr></tbody></table></center></div><hr align="center" SIZE="1" width="700"><p align="center" class="ourfont"><span><span><font color="#000000"> <a style="color: rgb(0,0,0); text-decoration: none" href="../../soft/network/index.htm">互联网络</font><font color="#FFFFFF"> </font></a><font color="#000000">|</span></span><a href="../../soft/system/index.htm" style="color: rgb(0,0,0); text-decoration: none">系统工具</a><span>|<span> <a href="../../soft/tools/index.htm" style="color: rgb(0,0,0); text-decoration: none">实用工具</a> | <a href="../../soft/multimedia/index.htm" style="color: rgb(0,0,0); text-decoration: none">媒体工具</a> | <a href="../../soft/image/index.htm" style="color: rgb(0,0,0); text-decoration: none">图形图像</a> | <a href="../../soft/game/index.htm" style="color: rgb(0,0,0); text-decoration: none">游戏娱乐</a> | </span><a href="../../soft/usesoft/index.htm" style="color: rgb(0,0,0); text-decoration: none">软件<span>使用</a></font><font color="#FFFFFF"> |</font> </span></span></p><hr align="center" SIZE="1" width="700"><font color="#FFE8BB"><p align="center" class="ourfont"></font><font color="#000000"><span><span>© Copyright 2000 </span></span>陕西公用计算机互联网信息中心<span><span> 版权所有 </font></p></span></span><p align="center" class="ourfont"><font color="#000000"><span><span>本站制作维护by <a style="color: rgb(0,0,0)" href="mailto:haiyuan@163.sn.cn">HAIYUAN</a></span></span></font></p><p align="center" class="ourfont"><font color="#000000"><span><span>电话:(029)8371051 8371055 8371049 联系信箱:<a href="mailto:net@163.sn.cn">net@163.sn.cn</a></span></span></font></p></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -