mciapi1.pas 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. program mciapi1;
  2. uses
  3. Os2Def, PMWin, mciapi;
  4. function ClientWindowProc (Window, Msg: cardinal; MP1, MP2: pointer): pointer;
  5. cdecl; export;
  6. var
  7. Ps: cardinal;
  8. R: TRectL;
  9. begin
  10. ClientWindowProc := nil;
  11. case Msg of
  12. wm_Paint: begin
  13. PS := WinBeginPaint (Window, 0, @R);
  14. WinFillRect (PS, @R, SYSCLR_WINDOW);
  15. WinEndPaint (PS);
  16. end;
  17. else ClientWindowProc := WinDefWindowProc (Window, Msg, MP1, MP2);
  18. end;
  19. end;
  20. const
  21. idClientWindow = 11000;
  22. WinFlags: cardinal = fcf_TitleBar + fcf_SysMenu + fcf_SizeBorder +
  23. fcf_MinMax + fcf_TaskList + fcf_NoByteAlign;
  24. ClassName = 'MYVIEW';
  25. var
  26. Anchor, MsgQue: cardinal;
  27. Message: TQMsg;
  28. Frame, Client: cardinal;
  29. begin
  30. Anchor := WinInitialize(0);
  31. { It might be beneficial to set the second parameter of the following }
  32. { call to something large, such as 1000. The OS/2 documentation does }
  33. { not recommend this, however } MsgQue := WinCreateMsgQueue (Anchor, 0);
  34. if MsgQue = 0 then Halt (254);
  35. WinRegisterClass (Anchor, ClassName, proc (@ClientWindowProc), cs_SizeRedraw,
  36. SizeOf (pointer));
  37. Frame := WinCreateStdWindow (hwnd_Desktop, 0, WinFlags, ClassName,
  38. 'MMPM/2 TEST WAVE', 0, 0, idClientWindow, Client);
  39. if (Frame <> 0) then
  40. begin
  41. WinSetWindowPos (Frame, 0, 0, WinQuerySysValue (hwnd_Desktop,
  42. sv_CyScreen) - 200, 200, 200, swp_Move + swp_Size + swp_Activate +
  43. swp_Show);
  44. (* Play a wave file set to valid window handle *)
  45. mciPlayFile(Frame, 'test.wav', MCI_ASYNC, nil, 0);
  46. while WinGetMsg (Anchor, Message, 0, 0, 0) do
  47. WinDispatchMsg (Anchor, Message);
  48. WinDestroyWindow (Frame);
  49. end;
  50. WinDestroyMsgQueue (MsgQue);
  51. WinTerminate (Anchor);
  52. end.