123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- {
- $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
- }
|