使用Delphi,SDK编写Windows简单程序

原创 2002年07月22日 10:10:00
 

       接触Delphi也已经有好长时间了,使用Delphi进行程序开发非常方便、快速,Delphi本身就提供了大量的组件(网上还有更多的组件)进行程序开发,这大大减轻了程序员的工作量,但是越方便越说明Delphi本身在背后为我们做的工作就越多,也许很多人没有考虑过这些,还在充分的享受着它带给我们的快捷与方便。我也是个C的爱好者,学习和使用C也有好长一段时间了,学了C/C++以后,要进行Windows程序设计,常规的有两种方法一种是利用SDK开发包,还有就是MFC,现在还有BCB,等等更多,当时很多人都把SDK作为一个基础,无论怎样都要或多或少的了解一些,然后在逐步走向MFC,尽管是这样,不难发现后一种方法是前一种方法的改进,有一种逐步提高的感觉,MFC是对API的一种封装而已,给程序开发带来了巨大的方便。

       有一本书《Windows程序设计》可以说是一本经典之作,我想很多人都有这套书,书上第一个完整的例子就是Helloworld,一个简单的窗体,有着Windows窗体的一般特征,但是写了很多代码。但是学完了Pascal语法,使用Delphi进行Windows程序设计好像是一下子就跳到了使用VCL,对于什么消息循环,消息处理,丝毫没有涉及到,很多参考书也没有提到这些,对于我的感觉好像就是C/C++天生就是用来开发Windows程序的,无缝连接,Pascal的语法是有一点怪怪的,好像不适合(一开始给我的感觉就是不可以)配合SDK进行Windows程序开发,后来查了一点资料,逐渐摸索,找到了一点眉目,希望能够和大家共同进步。这个例子可以说是Charles例子的一个克隆,只是语法换成了Pascal而已,在这里也同样有消息循环,消息处理,等等。下面给出这个程序的具体代码还有详细的注释,为了阅读的关系我分成了几个处理函数,都有特殊的注明。

       具体开始的时候也是new一个Application然后关掉默认给我们加的窗口还有代码窗口当显示提示是否要保存的时候选择否,然后在project中选择view source选项,跳到代码窗口,修改其中代码。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

program Project2;

 

uses

  Windows,

  Messages;

 

var

    Msg:TMsg;

    wc:TWndClass;          //RegisterClass()所需要的参数

    hWnd:THandle;          //主窗体的句柄

    const

        ClassName='MainWClass';

        OutText='Hello ';

Function MainWndProc(Handle:THandle;MsgID:UINT;wParam,lParam:Integer):LRESULT;stdcall;

var

    pDC:HDC;

    lpRect:TRECT;

begin

    Result:=1;

    case MsgID of

        WM_CLOSE:

        begin     //关闭窗体所产生的消息

            if MessageBox(Handle,'要关闭这个程序吗?','程序示例',MB_ICONQUESTION or MB_YESNO)=IDYES then

                DestroyWindow(hWnd)

            else

                Result:=0;

            Exit;

        end;

 

        WM_DESTROY:     //DestroyWindow()所产生的消息

        begin

            PostQuitMessage(0);

        end;

 

        WM_PAINT:

        begin

            pDC:=GetDC(hWnd);

            GetClientRect(hWnd,lpRect);

            DrawText(pDC,OutText,5,lpRect,DT_SINGLELINE or DT_CENTER or DT_VCENTER);

            //TextOut(pDC,10,10,OutText,5);

            ReleaseDC(hWnd,pDC);

        end;

    end;

//剩下的消息交给Windows预设的处理函数就可以了,比如画窗体的WM_NCPAINT消息等等

    Result:=DefWindowProc(Handle,MsgID,wParam,lParam);

end;

 

//初始化,注册窗口类

Function InitApplication(hInstance:THANDLE):Boolean;

begin

    //首先使用RegisterClass()注册窗体类,这可不是Delphi数据类型中的类哦

    wc.style:=CS_HREDRAW OR CS_VREDRAW;

    wc.lpfnWndProc:=@MainWndProc;      //消息处理函数的地址

    wc.hInstance:=hInstance;           //程序的句柄,同时也是基地址

    wc.hIcon:=LoadIcon(0,PChar(IDI_APPLICATION));

    wc.hCursor:=LoadCursor(0,IDC_ARROW); //图标

    wc.hbrBackground:=GetStockObject(WHITE_BRUSH);  //背景画刷

    wc.lpszClassName:=ClassName;         //前面定义的常量

 

    Result:=Boolean(RegisterClass(wc));//注册这个窗口类

end;

 

//InitInstance 生成窗口

Function InitInstance(hInstance:THANDLE;nCmdShow:Integer):Boolean;

begin

    hWnd:=CreateWindowEx(0,

                         ClassName, //刚才注册的类的名字

                         '示例',    //窗体的标题

                         WS_OVERLAPPEDWINDOW,   //窗体的类型,有标题栏、系统菜单、最大化最小化菜单,以及拉伸边框

                         Integer(CW_USEDEFAULT),

                         Integer(CW_USEDEFAULT),

                         Integer(CW_USEDEFAULT),

                         Integer(CW_USEDEFAULT),

                         0,

                         0,

                         hInstance,

                         nil

                         );

    if hWnd=0 then

    begin

        Result:=false;

        Exit;

    end;

    ShowWindow(hWnd,CmdShow);

    UpdateWindow(hWnd);

    Result:=true;

end;

 

//主程序开始

begin

    if Not InitApplication(hInstance) then Halt(0); //初始化注册窗口类

    if Not InitInstance(hInstance,CmdShow) then Halt(0);    //产生窗口

 

    while GetMessage(Msg,0,0,0) do

    begin

        TranslateMessage(Msg);

        DispatchMessage(Msg);    //API将消息分派到相应的窗体消息处理函数

    end;

    ExitCode:=Msg.wParam;

end.

 

       上面给出了详细的代码,其中借鉴了有关文章,这就是最基本的框架,如果使用C进行过Windows程序开发的话,会对上面的代码非常熟悉,不错确实是大同小异,只是很多变量的定义和写法有点差别,还有就是函数调用时候有一些注意点。

       我比较喜欢和大家一起讨论,喜欢追究个所以然,希望各位能够和我一起讨论,一起进步。

Delphi使用SDK写最小的程序

用Delphi产生一个最小的可执行程序 曾经在网上看到有人说Delphi能够产生大小只有16k的Win32应用程序,而我自己曾经编写过的这种可执行文件大小则是在17k左右,因而我一度猜想Delphi恐...
  • suiyunonghen
  • suiyunonghen
  • 2008年06月02日 00:04
  • 4537

Delphi XE10 使用百度定位SDK Jar包进行定位

elphi XE10 在推出了一份代码, 编译后到Android, iOS, windows等环境下后, 从来没接触过Delphi的我, 被赶鸭子上架来做Delphi的开发. 尝试在Delphi X...
  • ssxbxk
  • ssxbxk
  • 2017年04月01日 02:36
  • 2291

使用Delphi,SDK编写Windows简单程序

  • zgqtxwd
  • zgqtxwd
  • 2008年04月30日 16:12
  • 87

用Delphi编写Windows服务程序

一、Windows服务简介   服务程序(Service Application)是一种运行于WinNT的后台程序,每个服务程序(Service Application)中可能包含若干个服务(Ser...
  • xiexuan2007
  • xiexuan2007
  • 2014年01月06日 11:51
  • 2023

delphi7第一个程序helloword

delphi使用pascal语言,因此要学习delphi需要首先了解pascal语言。对于pascal语言还不熟悉的人,可以去免费下载pascal精要:http://download.csdn.net...
  • sushengmiyan
  • sushengmiyan
  • 2012年03月13日 11:23
  • 3077

使用Python 完成凯撒密码的实现

实现一个凯撒密码的变种算法,对输入字符串进行加解密处理 把字母a-z分别循环对应为相距13个位置的字母n-m,即 原文字母:a b c d e f g h i j k l m n o p q r ...
  • qianyedoufulao
  • qianyedoufulao
  • 2017年09月27日 09:52
  • 262

Delphi XE8 手动配置Android开发环境JDK,Android SDK,NDK

如果安装Delphi XE8 时选择安装了支持Android开发的组件但是没有安装JDK,Android SDK,NDK或者之前已经安装,可以在IDE的SDK Manager中手动配置: 在S...
  • MaxWoods
  • MaxWoods
  • 2015年08月21日 21:02
  • 8046

dumpmemory window

utility.h //////////////////////////////////////////////////////////////////////////////// // // V...
  • earbao
  • earbao
  • 2016年09月14日 11:12
  • 465

delphi xe7安卓sdk安装

1.挂上VPN。。。得和谐 2.开始菜单。 点击它。 3.不出意外出现窗体: 选中需要更新的,Install 17 packages,进入许可页面 4.许可页面 点击Install 开始漫长等...
  • oYaoWang123
  • oYaoWang123
  • 2015年05月26日 12:51
  • 1374

RO05 - 如何编写RemObjects SDK服务端 (Delphi Version)

RO05 – 如何创建RemObjects SDK 服务(Delphi Version)本文档向你展示如何使用RemObjects(Delphi版)创建第一个服务.读了本文档后你可以继续读相关文档: ...
  • henreash
  • henreash
  • 2008年04月08日 17:29
  • 9391
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Delphi,SDK编写Windows简单程序
举报原因:
原因补充:

(最多只允许输入30个字)