Delphi下用API代码创建Form
program PMyWindowClass;
uses
Windows,
Messages,
SysUtils;
type
TMyWindow = class(TObject)
private
{ Private declarations }
WindowClass: WndClass;
hWindow: HWnd;
AMessage: TMsg;
FAppName : String;
FWndProc : TFNWndProc;
function WinRegister : Boolean; virtual;
procedure CreateMyWindow;
public
{ Public declarations }
constructor Create;
destructor Destroy; override;
procedure WinCreate; virtual;
procedure MyRun;
property ApplicationName : String read FAppName write FAppName;
property WindowProcedure : TFNWndProc read FWndProc write FWndProc;
end;
const
AppName = 'MyClassDemo';
var
myWindow : TMyWindow;
{ TMyWindow }
constructor TMyWindow.Create;
begin
end;
destructor TMyWindow.Destroy;
begin
inherited;
end;
procedure TMyWindow.CreateMyWindow;
begin
hWindow := CreateWindow(AppName, '面向对象方式设计窗口应用程序的范例',
ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,
cw_UseDefault, cw_UseDefault, 0, 0, system.MainInstance, nil);
if hWindow <> 0 then begin
ShowWindow(hWindow, CmdShow);
ShowWindow(hWindow, SW_SHOW);
UpdateWindow(hWindow);
end;
end;
procedure TMyWindow.WinCreate;
begin
if WinRegister then
begin
CreateMyWindow;
end;
end;
function TMyWindow.WinRegister : Boolean;
begin
WindowClass.Style := cs_hRedraw or cs_vRedraw;
WindowClass.lpfnWndProc := FWndProc;
WindowClass.cbClsExtra := 0;
WindowClass.cbWndExtra := 0;
WindowClass.hInstance := system.MainInstance;
WindowClass.hIcon := LoadIcon(0, idi_Application);
WindowClass.hCursor := LoadCursor(0, idc_Arrow);
WindowClass.hbrBackground := GetStockObject(WHITE_BRUSH);
WindowClass.lpszMenuName := nil;
WindowClass.lpszClassName := PChar(FAppName);
Result := RegisterClass(WindowClass) <> 0;
end;
//
//Window Message Handling Procedure
//
function WindowProc(Window: HWnd; AMessage: UINT; WParam : WPARAM;
LParam: LPARAM): LRESULT; stdcall; export;
var
dc : hdc;
ps : TPaintStruct;
r : TRect;
begin
WindowProc := 0;
case AMessage of
WM_PAINT :
begin
dc := BeginPaint(Window,ps);
GetClientRect(Window,r);
DrawText(dc,'使用TMyWindow类封装的Windows程序。这导致了使用面向对象方式设计窗口应用程序',-1,r,
DT_SINGLELINE or DT_CENTER or DT_VCENTER);
EndPaint(Window,ps);
Exit;
end;
wm_Destroy:
begin
PostQuitMessage(0);
Exit;
end;
end;
WindowProc := DefWindowProc(Window, AMessage, WParam, LParam);
end;
procedure TMyWindow.MyRun;
begin
while GetMessage(AMessage, 0, 0, 0) do begin
TranslateMessage(AMessage);
DispatchMessage(AMessage);
end;
Halt(AMessage.wParam);
end;
begin
myWindow := TMyWindow.Create;
myWindow.ApplicationName := AppName;
myWindow.WindowProcedure := TFNWndProc(@WindowProc);
myWindow.WinCreate;
try
myWindow.MyRun;
finally
FreeAndNil(myWindow);
end;
end.
http://blog.csdn.net/diligentcatrich/article/details/8072649
Delphi下用API代码创建Form的更多相关文章
- AX 用代码创建FORM动态加控件,重载动态添加的控件的方法。
eg. 范例:class\RFIDReadWriteForm/Build方法. formRun.controlMethodOverload(true); formRun.controlMethodOv ...
- DELPHI下API简述(1800个API)
DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属 ...
- HBase 学习之一 <<HBase使用客户端API动态创建Hbase数据表并在Hbase下导出执行>>
HBase使用客户端API动态创建Hbase数据表并在Hbase下导出执行 ----首先感谢网络能够给我提供一个开放的学习平台,如果没有网上的技术爱好者提供 ...
- Delphi代码创建形式规范 1.0
Delphi代码创建形式规范 1.0 本规范的目的:给自己的代码一个统一而标准的外观,增强 可读性,可理解性,可维护性 本规范的原则:名称反映含义,形式反映结构 1.单元风格 ...
- Linux下开发python django程序(Form表单对象创建和使用)
1.在setting.py文件中修改节点,注释掉其中一行 MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'dj ...
- 深入Delphi下的DLL编程
深入Delphi下的DLL编程 作者:岑心 引 言 相信有些计算机知识的朋友都应该听说过“DLL”.尤其是那些使用过windows操作系统的人,都应该有过多次重装系统的“悲惨”经历——无论再怎样小心, ...
- DELPHI下的SOCK编程(转)
DELPHI下的SOCK编程 本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认为 ...
- Delphi下的RTTI函数大全
http://ljz9425.blog.163.com/blog/static/369148572008111635253858/ Delphi下的RTTI(下) 2008-12-16 15:52:5 ...
- DELPHI下的SOCK编程
DELPHI下的SOCK编程(转自http://www.cnblogs.com/devcjq/articles/2325600.html) 本文是写给公司新来的程序员的,算是一点培训的教材.本文不会 ...
随机推荐
- ceph之crush map
编辑crush map: 1.获取crush map: 2.反编译crush map: 3.至少编辑一个设备,桶, 规则: 4.重新编译crush map: 5.重新注入crush map: 获取cr ...
- 倒计时IE10+
直接上代码,dome 里边有我做的列表倒计时(多个同时倒计时)下面是我做的例子,颜色可以自己设置的 <p name="daojishi" style="width: ...
- linq中的临时变量
有一个字符串数组: string[]arrStr={"123","234","345","456"}; 现在想得到该数组 ...
- C#_会员管理系统:开发六(数据搜索)
增加界面中的搜索功能 会员资料管理界面(VIPManager.cs): 详细代码如下: using System; using System.Collections.Generic; using Sy ...
- xzzx
创建包: CREATE OR REPLACE PACKAGE WYL_TEST_PKG_GGYW_XZZX IS -- Purpose : 公共业务-参保险种注销 --注销选择的险种,并将参保缴费信息 ...
- Week5(10月10日):国庆之后,让我们整装期待元旦吧
Part I:提问 =========================== 1.要将“Hello, Admin",从控制器传递到视图,该如何操作? (1)使用ViewData (2)使用V ...
- 【HTTP 2】HTTP/2 协议概述(HTTP/2 Protocol Overview)
前情提要 在上一篇文章<[HTTP 2.0] 简介(Introduction)>中,我们简单介绍了 HTTP 2. 在本篇文章中,我们将会了解到 HTTP 2 协议概述部分的内容. HTT ...
- ListView优化问题
可以参考:http://blog.csdn.net/bill_ming/article/details/8817172和http://blog.csdn.net/xiangjai/article/de ...
- BZOJ 2789: [Poi2012]Letters( BIT )
直接求逆序对就行了...时间复杂度O(nlogn) ------------------------------------------------------------------------- ...
- 【iOS】用Layer创建一个三维模型以及拖动
关于CALayer的介绍以及基本属性,在这篇博客中有交代:CoreAnimation —— CALayer 这篇博客讲述简单的通过对layer的transform属性的设置一个CATransform3 ...