mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-09 04:12:42 +02:00
121 lines
2.6 KiB
ObjectPascal
121 lines
2.6 KiB
ObjectPascal
{
|
|
$Id$
|
|
Copyright (c) 1996 by Charlie Calvert
|
|
Modifications by Florian Klaempfl
|
|
|
|
Standard Windows API application written in Object Pascal.
|
|
No VCL code included. This is all done on the Windows API
|
|
level.
|
|
}
|
|
|
|
{$APPTYPE GUI}
|
|
{$MODE DELPHI}
|
|
program WinHello;
|
|
|
|
uses
|
|
Strings, Windows;
|
|
|
|
const
|
|
AppName = 'WinHello';
|
|
|
|
function WindowProc(Window: HWnd; AMessage: UINT; WParam : WPARAM;
|
|
LParam: LPARAM): LRESULT; stdcall; export;
|
|
|
|
var
|
|
dc : hdc;
|
|
ps : paintstruct;
|
|
r : rect;
|
|
|
|
begin
|
|
WindowProc := 0;
|
|
|
|
case AMessage of
|
|
wm_paint:
|
|
begin
|
|
dc:=BeginPaint(Window,@ps);
|
|
GetClientRect(Window,@r);
|
|
DrawText(dc,'Hello world by Free Pascal',-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;
|
|
|
|
{ Register the Window Class }
|
|
function WinRegister: Boolean;
|
|
var
|
|
WindowClass: WndClass;
|
|
begin
|
|
WindowClass.Style := cs_hRedraw or cs_vRedraw;
|
|
WindowClass.lpfnWndProc := WndProc(@WindowProc);
|
|
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 := AppName;
|
|
|
|
Result := RegisterClass(WindowClass) <> 0;
|
|
end;
|
|
|
|
{ Create the Window Class }
|
|
function WinCreate: HWnd;
|
|
var
|
|
hWindow: HWnd;
|
|
begin
|
|
hWindow := CreateWindow(AppName, 'Hello world program',
|
|
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;
|
|
|
|
Result := hWindow;
|
|
end;
|
|
|
|
|
|
var
|
|
AMessage: Msg;
|
|
hWindow: HWnd;
|
|
|
|
begin
|
|
if not WinRegister then begin
|
|
MessageBox(0, 'Register failed', nil, mb_Ok);
|
|
Exit;
|
|
end;
|
|
hWindow := WinCreate;
|
|
if longint(hWindow) = 0 then begin
|
|
MessageBox(0, 'WinCreate failed', nil, mb_Ok);
|
|
Exit;
|
|
end;
|
|
|
|
while GetMessage(@AMessage, 0, 0, 0) do begin
|
|
TranslateMessage(AMessage);
|
|
DispatchMessage(AMessage);
|
|
end;
|
|
Halt(AMessage.wParam);
|
|
end.
|
|
|
|
{
|
|
$Log$
|
|
Revision 1.4 2002-09-07 15:06:35 peter
|
|
* old logs removed and tabs fixed
|
|
|
|
Revision 1.3 2002/02/22 13:37:49 pierre
|
|
* fix problem if started through cygwin bash
|
|
|
|
}
|