《Delphi高手突破》节选--脱离VCL的Windows程序

Nicrosoft 2002-09-29 06:50:35
我知道,朋友们等待这本书很久了,好多朋友都发Email来问。出版社现在说,10月中旬可以上市。上市最快的,应该是网络上的销售,然后,常规渠道来说,北京应该比其他区域快。

在此,再贴出一段节选。

书的支持网站:http://www.sunistudio.com/nicrosoft/book/did/
光盘内容下载暂时不提供。

谢谢!

-----------------------------------------------
4.4.1 脱离VCL的Windows程序
我想读者有必要先了解一个标准Windows程序的运行流程,如果您还不了解,请看下面的一个示例程序。在此,我给出一个用纯pascal所编写的十分简单的Windows应用程序,以演示标准Windows程序是如何被建立及运行的。该程序的代码及可执行文件可在本书配套光盘的WindowDemo目录下找到,程序可被Delphi编译通过。
以下是代码清单,请注意其中的注释:
program WindowDemo;

uses Windows, Messages;

// 窗口函数,窗口接到消息时被Windows所调用
function WindowProc(hwnd : HWND; uMsg : Cardinal; wParam : WPARAM;
lParam : LPARAM) : LResult; stdcall;
begin
Result := 0;

case uMsg of
// 关闭窗口消息,当用户关闭窗口后,通知主消息循环结束程序
WM_CLOSE : PostMessage(hwnd, WM_QUIT, 0, 0);
// 鼠标左键按下消息
WM_LBUTTONDOWN : MessageBox(hwnd, 'Hello!', '和您打个招呼',
MB_ICONINFORMATION);

else
// 其它消息做默认处理
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
end;
end;

var
wndcls : WNDCLASS; // 窗口类的记录(结构)类型
hWnd : THandle;
Msg : tagMSG; // 消息类型
begin
wndcls.style := CS_DBLCLKS; // 允许窗口接受鼠标双击
wndcls.lpfnWndProc := @WindowProc; // 为窗口类指定窗口函数
wndcls.cbClsExtra := 0;
wndcls.cbWndExtra := 0;
wndcls.hInstance := hInstance;
wndcls.hIcon := 0;
wndcls.hCursor := LoadCursor(hInstance, 'IDC_ARROW');
wndcls.hbrBackground := COLOR_WINDOWFRAME;
wndcls.lpszMenuName := nil;
wndcls.lpszClassName := 'WindowClassDemo'; // 窗口类名称

// 注册窗口类
if RegisterClass(wndcls) = 0 then
Exit;

// 创建窗口
hWnd := CreateWindow(
'WindowClassDemo', // 窗口类名称
'WindowDemo', // 窗口名称
WS_BORDER or WS_CAPTION or WS_SYSMENU, // 窗口类型
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0,
0,
hInstance,
nil
);
if hWnd = 0 then
Exit;

// 显示窗口
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);

// 创建主消息循环,处理消息队列中的消息并分发
// 直至收到WM_QUIT消息,退出主消息循环,并结束程序
// WM_QUIT消息由PostMessage()函数发送
while GetMessage(Msg, hWnd, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
该程序没有使用VCL,它所做的事情就是显示一个窗口,当你在窗口上单击鼠标右键时弹出一个友好的对话框向您问好。如果您从来不曾了解过这些,那么我建议您实际运行一下光盘上的这个程序,对其多一些感性认识。
就是这样一个简单的程序,演示了标准Windows程序的流程:
1、从入口函数WinMain开始
2、注册窗口类及窗口函数(Window Procedure)
3、创建并显示窗口
4、进入主消息循环,从消息队列中获取并分发消息
5、消息被分发后,由Windows操作系统调用窗口函数,由窗口函数对消息进行处理。
在Object Pascal中,我们看不到所谓的“WinMain”函数,不过,其实整个program的begin处就是Windows程序的入口。
注册窗口类通过系统API函数RegisterClass()来完成,它向Windows系统注册一个窗口的类型。
注册窗口类型完成后,就可以创建这个类型的窗口实例,创建出一个真正的窗口通过API函数CreateWindow()来实现。
创建出的窗口实例通过API函数ShowWindow()来使得它显示在屏幕上。
当这一切都完成后,窗口开始进入一个while循环以处理各种消息,直至API函数GetMessage()返回0退出程序。循环中,程序需要从主线程的消息队列中取出各种消息,并将它分发给系统,然后由Windows系统调用窗口的窗口函数(WndProc)以完成窗口对消息的响应处理。
也许你会觉得,写一个Windows应用程序原来是那么繁琐的,需要调用大量的API函数来完成平时看起来很简单的事情,而我们平时使用VCL编写窗口应用程序时,似乎从来没有遇到过这些东西。是的,VCL作为一个Framework为我们做了很多事情,其中的TApplication除了定义一个应用程序的特性及行为外,另一个重要的使命就是封装以上的那些令人讨厌的、繁琐的步骤。
...全文
196 21 打赏 收藏 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
TINA 2002-10-21
  • 打赏
  • 举报
回复
哈哈,楼上的,我期待有人出本书叫做
<<Delphi高高高手突破>>
不用vcl,也不用api了,全都用汇编搞定。那样才叫高手呢。

无聊!!!
zwt00 2002-10-19
  • 打赏
  • 举报
回复
期待网上提供电子书籍
chons 2002-10-19
  • 打赏
  • 举报
回复
wait.
ijk1981 2002-10-19
  • 打赏
  • 举报
回复
有人知道有人不知道。
知道的人还不一定写的出来呢。
好歹给人家点面子嘛。
支持!
progray 2002-10-19
  • 打赏
  • 举报
回复
千万不要把VC入门那一套改成PASCAL,那样还不如学VC。期待更好!
my007 2002-10-19
  • 打赏
  • 举报
回复
真无聊,有vcl不用,自己写?
TINA 2002-10-18
  • 打赏
  • 举报
回复
这就是国产特色
TINA 2002-10-18
  • 打赏
  • 举报
回复
写书就是这儿抄点那儿抄点吗,有什么奇怪的
xjspa 2002-10-18
  • 打赏
  • 举报
回复
你的例子我在 delphi2.0 上见过
stanely 2002-10-17
  • 打赏
  • 举报
回复
楼主没有贴出整个一本书的“节选”,明明是在做广告嘛:)
大家给点面子好不好阿?
man8888 2002-10-17
  • 打赏
  • 举报
回复
用Win32 asm就不用VCL了。
吐血推荐!
谁感说下面程序不是windows程序!做出来的程序只有几个K谁都比不上!

.if wParam == 1000
invoke SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL
.elseif wParam == 1900
szText TheMsg,"Assembler, Pure & Simple"
invoke MessageBox,hWin,ADDR TheMsg,ADDR szDisplayName,MB_OK
.endif
z_hongbao 2002-10-17
  • 打赏
  • 举报
回复
gz
hansion3406 2002-09-30
  • 打赏
  • 举报
回复
还好啦....有电子书我就来一本...
michaelpeng7799 2002-09-29
  • 打赏
  • 举报
回复
我认的几个学VC的就是编不出程序来,还告诉我标准模板库是ATL,真好笑
s_x_d 2002-09-29
  • 打赏
  • 举报
回复
收钱的东西不看!!
go_my_sky 2002-09-29
  • 打赏
  • 举报
回复
学vc的都知道,很简单
del_c_sharp 2002-09-29
  • 打赏
  • 举报
回复
呵呵,你为什么不早写呢,等我明白的差不多了才出来
yan_hui 2002-09-29
  • 打赏
  • 举报
回复
GOOD!! 希望你的书早点出来!!!
michaelpeng7799 2002-09-29
  • 打赏
  • 举报
回复
very very good
air_line 2002-09-29
  • 打赏
  • 举报
回复
把那五分给我吧~
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 【创新7.1声卡KX驱动+连线图】是一款专门为创新公司所制造的7.1音频声卡量身定制的驱动方案,其核心宗旨在于为用户带来超越官方原生驱动程序的卓越音质感受。KX驱动属于一种由爱好者群体自主开发的非官方驱动软件,该驱动在Creative公司原版驱动程序的基础上进行了深度改良与功能扩充,旨在提供更为多样化的声音调节参数以及更为出色的运行表现。 我们现在来详细认识一下7.1声道系统。7.1声道代表的是一种沉浸式音频技术规范,该规范包含七个全频域音箱单元(具体包括前置左声道、前置右声道、中央声道、环绕左声道、环绕右声道、后置左声道以及后置右声道)搭配一个低频震动单元,其设计目的是为用户构建更加立体且逼真的听觉场景,尤其适合应用于电子游戏、电影观影以及音乐欣赏等场景。 KX驱动的独到之处在于其赋予了用户更为广阔的个性化定制权限,使用者能够依据自身的听音偏好对音频参数进行细致调节,例如均衡器参数、混响效果、压缩比设定、噪声抑制门限等,从而使得最终的音效呈现出更为精致且个性化的特质。不仅如此,KX驱动还兼容VST插件机制,该机制是虚拟乐器与音频效果处理软件的通用标准,用户通过安装各式各样的VST插件,能够进一步增强声卡的实用功能,例如模拟多种乐器音色或达成复杂的声音效果制作。 在获取并部署KX驱动程序之后,对"连线图"的正确导入工作具有决定性意义。连线图又被称为音频路由配置图或信号流向示意图,它是一份用于指导用户如何正确配置并连接各个音频输出通道的视觉化手册。对于非专业背景的使用者而言,准确设定这些音频通道可能会面临一定程度的困难,因此连线图的提供极大地简化了这一过程。依照连线图进行配置操...
内容概要:本文介绍了基于粒子群优化算法(PSO)优化长短期记忆网络(LSTM)的电力负荷预测方法,并通过Python代码实现。该方法结合PSO强大的全局搜索能力,对LSTM模型的关键超参数进行智能寻优,有效提升了模型在处理非线性、强时序性电力负荷数据时的预测精度与泛化性能。文中系统阐述了从数据预处理、模型构建、PSO优化流程到预测结果分析的完整技术链条,重点展示了如何通过优化算法克服传统LSTM参数依赖经验设定的局限性,为复杂时间序列预测提供了高效解决方案。; 适合人群:具备一定Python编程能力和机器学习基础知识,从事电力系统分析、能源管理、负荷预测等相关领域的研究人员、工程师以及高校研究生。; 使用场景及目标:①应用于电力系统的短期与中期负荷预测,提升电网调度的准确性与经济性;②作为智能优化算法与深度学习融合的典型范例,用于科研项目开发与教学实践;③目标在于通过超参数自动优化,显著降低预测模型的均方根误差(RMSE)和平均绝对百分比误差(MAPE),增强模型的鲁棒性与实用性。; 阅读建议:建议读者结合所提供的完整Python代码,深入理解PSO优化LSTM的具体实现过程,重点关注适应度函数的设计、参数编码方式及优化迭代机制,并鼓励在自有数据集上进行复现实验与调参优化,以深刻掌握模型性能提升的技术路径。

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧