home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / windows / help / gen_mdih.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1993-06-04  |  3.9 KB  |  162 lines

  1. PROGRAM MyMDIProgram;
  2.  
  3. USES WinTypes, WinProcs, OWindows;
  4.  
  5. {$R Gen_Help.Res}
  6.  
  7. CONST
  8.   cm_DoIt = 101;
  9.   cm_DoItToo = 102;
  10.   cm_HelpIndex = 901;
  11.   cm_HelpOnHelp = 902;
  12.   cm_About = 903;
  13.  
  14.   HelpFileName = 'GEN_HELP.HLP';
  15.  
  16. TYPE
  17.   tMyApplication = OBJECT(tApplication)
  18.     PROCEDURE InitMainWindow; VIRTUAL;
  19.     PROCEDURE InitInstance; VIRTUAL;
  20.   END;
  21.  
  22.   pMyClientWnd = ^tMyClientWnd;
  23.   tMyClientWnd = OBJECT(tMDIClient)
  24.     PROCEDURE wmKeyDown(VAR Msg: tMessage); VIRTUAL wm_First + wm_KeyDown;
  25.   END;
  26.  
  27.   pMyWindow = ^tMyWindow;
  28.   tMyWindow = OBJECT(tMDIWindow)
  29.     Help : BOOLEAN;
  30.     HelpCursor, OldCursor : hCursor;
  31.     CONSTRUCTOR Init(aTitle: pChar; aMenu: hMenu);
  32.     PROCEDURE InitClientWindow; VIRTUAL;
  33.     PROCEDURE HelpIndex(VAR Msg: tMessage); VIRTUAL cm_First + cm_HelpIndex;
  34.     PROCEDURE HelpOnHelp(VAR Msg: tMessage); VIRTUAL cm_First + cm_HelpOnHelp;
  35.     PROCEDURE WMEnterIdle(VAR Msg: tMessage); VIRTUAL wm_First + wm_EnterIdle;
  36.     PROCEDURE WMCommand(VAR Msg: tMessage); VIRTUAL wm_First + wm_Command;
  37.     PROCEDURE WMSetCursor(VAR Msg: tMessage); VIRTUAL wm_First + wm_SetCursor;
  38.     PROCEDURE WMInitMenu(VAR Msg: tMessage); VIRTUAL wm_First + wm_InitMenu;
  39.     PROCEDURE Destroy; VIRTUAL;
  40.   END;
  41.  
  42. PROCEDURE tMyClientWnd.wmKeyDown(VAR Msg: tMessage);
  43. BEGIN
  44.   IF Msg.wParam = vk_F1 THEN
  45.   BEGIN
  46.     IF GetKeyState(vk_Shift) < 0 THEN
  47.     BEGIN
  48.       pMyWindow(Parent)^.Help := TRUE;
  49.       pMyWindow(Parent)^.WMSetCursor(Msg);
  50.       DefWndProc(Msg);
  51.     END;
  52.   END
  53.   ELSE IF (Msg.wParam = vk_Escape) AND pMyWindow(Parent)^.Help THEN
  54.        BEGIN
  55.          pMyWindow(Parent)^.Help := FALSE;
  56.          pMyWindow(Parent)^.WMSetCursor(Msg);
  57.        END;
  58. END;
  59.  
  60. CONSTRUCTOR tMyWindow.Init(aTitle: pChar; aMenu: hMenu);
  61. BEGIN
  62.   tMDIWindow.Init(aTitle, aMenu);
  63.   Help := FALSE;
  64.   HelpCursor := LoadCursor(hInstance, 'Cursor_1');
  65.   OldCursor := LoadCursor(0, idc_Arrow);
  66. END;
  67.  
  68. PROCEDURE tMyWindow.InitClientWindow;
  69. BEGIN
  70.   ClientWnd := New(pMyClientWnd, Init(@Self));
  71. END;
  72.  
  73. PROCEDURE tMyWindow.HelpIndex(VAR Msg: tMessage);
  74. BEGIN
  75.   WinHelp(hWindow,HelpFileName,Help_Index,0);
  76. END;
  77.  
  78. PROCEDURE tMyWindow.HelpOnHelp(VAR Msg: tMessage);
  79. BEGIN
  80.   WinHelp(hWindow,'WinHelp.Hlp',HELP_HELPONHELP,0);
  81. END;
  82.  
  83. PROCEDURE tMyWindow.WMEnterIdle(VAR Msg: tMessage);
  84. BEGIN
  85.   IF ((Msg.wParam = msgf_Menu) AND ((GetKeyState(vk_F1) AND $8000) <> 0)) THEN
  86.   BEGIN
  87.     Help := TRUE;
  88.     PostMessage(hWindow,wm_KeyDown,vk_Return,0);
  89.   END;
  90. END;
  91.  
  92. PROCEDURE tMyWindow.WMCommand(VAR Msg: tMessage);
  93. VAR
  94.   HelpContextID : INTEGER;
  95. BEGIN
  96.   IF Help THEN
  97.   BEGIN
  98.     CASE Msg.wParam OF
  99.       cm_DoIt, cm_DoItToo, cm_Exit,
  100.       cm_HelpIndex, cm_HelpOnHelp, cm_About : HelpContextID := Msg.wParam;
  101.       ELSE HelpContextID := 0;
  102.     END;
  103.     IF HelpContextID = 0 THEN
  104.     BEGIN
  105.       MessageBox(hWindow,'Keine Hilfe zu diesem Menⁿpunkt vorhanden',
  106.                  'Meldung',mb_OK);
  107.       DefWndProc(Msg);
  108.     END
  109.     ELSE BEGIN
  110.       Help := FALSE;
  111.       WinHelp(hWindow,HelpFileName,Help_Context,HelpContextID);
  112.     END;
  113.   END
  114.   ELSE tMDIWindow.WMCommand(Msg);
  115. END;
  116.  
  117. PROCEDURE tMyWindow.WMSetCursor(VAR Msg: tMessage);
  118. VAR
  119.   P: tPoint;
  120. BEGIN
  121.   IF Help
  122.     THEN SetCursor(HelpCursor)
  123.     ELSE BEGIN
  124.       GetCursorPos(P);
  125.       SetCursorPos(P.X, P.Y);
  126.       DefWndProc(Msg);
  127.     END;
  128. END;
  129.  
  130. PROCEDURE tMyWindow.WMInitMenu(VAR Msg: tMessage);
  131. BEGIN
  132.   IF Help
  133.     THEN SetCursor(HelpCursor)
  134.     ELSE DefWndProc(Msg);
  135. END;
  136.  
  137. PROCEDURE tMyWindow.Destroy;
  138. BEGIN
  139.   WinHelp(hWindow,HelpFileName,HELP_QUIT,0);
  140.   tMDIWindow.Destroy;
  141. END;
  142.  
  143. PROCEDURE tMyApplication.InitInstance;
  144. BEGIN
  145.   tApplication.InitInstance;
  146.   HAccTable := LoadAccelerators(hInstance,'Accelerators_1');
  147. END;
  148.  
  149. PROCEDURE tMyApplication.InitMainWindow;
  150. BEGIN
  151.   MainWindow := New(pMyWindow, Init('MDI Test Program',LoadMenu(hInstance, 'Menu_1')));
  152. END;
  153.  
  154. VAR
  155.   MyApp : tMyApplication;
  156.  
  157. BEGIN
  158.   MyApp.Init('MyProgram');
  159.   MyApp.Run;
  160.   MyApp.Done;
  161. END.
  162.