
14.03.2011, 08:41
|
 |
Let Me Show You
|
|
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
|
|
вообще-то 1 и 2 способы идентичны - они используют всю мощь VCL. из-за этого теряют в размере. на самом деле вот следующий способ, наиболее "многотекстный", но наиболее "малоразмерный" (exe = 15Кб):
Код:
program CreateWindow;
uses
Windows, Messages;
var
AWndClass: WNDCLASS;
AWnd: HWND;
AMsg: TMsg;
function WindowProc(AWnd: HWND; Msg: Integer; wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
begin
case Msg of
WM_CREATE: begin
Windows.CreateWindow('STATIC', 'Hello, world', WS_CHILD+WS_VISIBLE, 10, 10, 100, 40, AWnd, 0, HInstance, nil);
Result:=0;
end;
WM_DESTROY: begin
Result:=0;
end;
WM_CLOSE: begin
PostQuitMessage(0);
Result:=0;
end;
else Result:=DefWindowProc(AWnd, Msg, wParam, lParam);
end
end;
begin
AWndClass.Style:=CS_HREDRAW or CS_VREDRAW;
AWndClass.lpfnWndProc:=@WindowProc;
AWndClass.cbClsExtra:=0;
AWndClass.cbWndExtra:=0;
AWndClass.hInstance:=HInstance;
AWndClass.hIcon:=0;
AWndClass.hCursor:=LoadCursor(0, IDC_ARROW);
AWndClass.hbrBackground:=HBRUSH(COLOR_WINDOW);
AWndClass.lpszMenuName:=nil;
AWndClass.lpszClassName:='TWINAPIFORM';
RegisterClass(AWndClass);
AWnd:=CreateWindowEx(
0,
AWndClass.lpszClassName,
AWndClass.lpszClassName,
WS_OVERLAPPEDWINDOW,
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
320,
120,
0, 0,
HInstance,
nil);
SetWindowText(AWnd, 'MyWinAPIForm');
ShowWindow(AWnd, SW_SHOWNORMAL);
UpdateWindow(AWnd);
while GetMessage(AMsg, 0, 0, 0) do begin
TranslateMessage(AMsg);
DispatchMessage(AMsg);
end;
DestroyWindow(AWnd);
UnregisterClass(AWndClass.lpszClassName, HInstance);
ExitProcess(0);
end.
__________________
Пишу программы за еду.
__________________
|