pmdemo1.pp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. {****************************************************************************
  2. Copyright (c) 1999-2000 by Florian Klaempfl
  3. ****************************************************************************}
  4. { Sample program for FPC under OS/2 }
  5. { Classic Hello world in PM version }
  6. {$R pmdemo1.res}
  7. (* PMDEMO1.RES has to be compiled from PMDEMO1.RC using "rc -r PMDEMO1.RC". *)
  8. program pmdemo1;
  9. uses
  10. os2def,pmwin;
  11. var
  12. frame,client : cardinal;
  13. ab : cardinal;
  14. mq : cardinal;
  15. msg : QMSG;
  16. const
  17. frameflags : longint = FCF_TITLEBAR+FCF_SYSMENU+FCF_SIZEBORDER+
  18. FCF_MINBUTTON+FCF_MAXBUTTON+FCF_SHELLPOSITION+
  19. FCF_TASKLIST+FCF_MENU;
  20. function clientwndproc(window : cardinal;msg : longint;mp1,mp2 : pointer) :
  21. pointer; cdecl; export;
  22. const
  23. text = 'Hello world by OS/2 and FPC';
  24. var
  25. ps : cardinal;
  26. rcl : RECTL;
  27. begin
  28. {clientwndproc:=nil; }
  29. case msg of
  30. { WM_CREATE : DosBeep(200,500);}
  31. WM_PAINT : begin
  32. ps:=WinBeginPaint(window,0,nil);
  33. WinQueryWindowRect(window,@rcl);
  34. WinDrawText(ps,-1,text,@rcl,0,7,$8500);
  35. WinEndPaint(ps);
  36. end;
  37. WM_COMMAND : case lo(longint(mp1)) of
  38. {101 : DosBeep(4500,1000);}
  39. 109 : WinPostMsg(0,WM_QUIT,nil,nil);
  40. 201 : WinMessageBox(cardinal(1),cardinal(1),
  41. 'HelloPM from FPC',
  42. 'About',0,MB_ICONEXCLAMATION+MB_MOVEABLE);
  43. end;
  44. else
  45. clientwndproc:=WinDefWindowProc(window,msg,mp1,mp2);
  46. end;
  47. end;
  48. begin
  49. ab:=WinInitialize(0);
  50. mq:=WinCreateMsgQueue(ab,0);
  51. WinRegisterClass(ab,'HELLOPM',proc(@clientwndproc),4,0);
  52. frame:=WinCreateStdWindow(cardinal(1),WS_VISIBLE,@frameflags,'HELLOPM',
  53. 'PMDemo 1',WS_VISIBLE,0,1,@client);
  54. while WinGetMsg(ab,@msg,0,0,0) do
  55. WinDispatchMsg(ab,@msg);
  56. WinDestroyWindow(frame);
  57. WinDestroyMsgQueue(mq);
  58. WinTerminate(ab);
  59. end.