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

  1. PROGRAM MyFirstProgram;
  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.   pMyWindow = ^tMyWindow;
  23.   tMyWindow = OBJECT(tWindow)
  24.     Help : BOOLEAN;
  25.     HelpCursor, OldCursor : hCursor;
  26.     CONSTRUCTOR Init(aParent: pWindowsObject; aTitle: pChar);
  27.     PROCEDURE HelpIndex(VAR Msg: tMessage); VIRTUAL cm_First + cm_HelpIndex;
  28.     PROCEDURE HelpOnHelp(VAR Msg: tMessage); VIRTUAL cm_First + cm_HelpOnHelp;
  29.     PROCEDURE WMEnterIdle(VAR Msg: tMessage); VIRTUAL wm_First + wm_EnterIdle;
  30.     PROCEDURE WMCommand(VAR Msg: tMessage); VIRTUAL wm_First + wm_Command;
  31.     PROCEDURE wmKeyDown(VAR Msg: tMessage); VIRTUAL wm_First + wm_KeyDown;
  32.     PROCEDURE WMSetCursor(VAR Msg: tMessage); VIRTUAL wm_First + wm_SetCursor;
  33.     PROCEDURE WMInitMenu(VAR Msg: tMessage); VIRTUAL wm_First + wm_InitMenu;
  34.     PROCEDURE Destroy; VIRTUAL;
  35.   END;
  36.  
  37. CONSTRUCTOR tMyWindow.Init(aParent: pWindowsObject; aTitle: pChar);
  38. BEGIN
  39.   tWindow.Init(aParent, aTitle);
  40.   Attr.Menu := LoadMenu(hInstance,'Menu_1');
  41.   Help := FALSE;
  42.   HelpCursor := LoadCursor(hInstance, 'Cursor_1');
  43.   OldCursor := LoadCursor(0, idc_Arrow);
  44. END;
  45.  
  46. PROCEDURE tMyWindow.HelpIndex(VAR Msg: tMessage);
  47. BEGIN
  48.   WinHelp(hWindow,HelpFileName,Help_Index,0);
  49. END;
  50.  
  51. PROCEDURE tMyWindow.HelpOnHelp(VAR Msg: tMessage);
  52. BEGIN
  53.   WinHelp(hWindow,'WinHelp.Hlp',HELP_HELPONHELP,0);
  54. END;
  55.  
  56. PROCEDURE tMyWindow.WMEnterIdle(VAR Msg: tMessage);
  57. BEGIN
  58.   IF ((Msg.wParam = msgf_Menu) AND ((GetKeyState(vk_F1) AND $8000) <> 0)) THEN
  59.   BEGIN
  60.     Help := TRUE;
  61.     PostMessage(hWindow,wm_KeyDown,vk_Return,0);
  62.   END;
  63. END;
  64.  
  65. PROCEDURE tMyWindow.WMCommand(VAR Msg: tMessage);
  66. VAR
  67.   HelpContextID : INTEGER;
  68. BEGIN
  69.   IF Help THEN
  70.   BEGIN
  71.     CASE Msg.wParam OF
  72.       cm_DoIt, cm_DoItToo, cm_Exit,
  73.       cm_HelpIndex, cm_HelpOnHelp, cm_About : HelpContextID := Msg.wParam;
  74.       ELSE HelpContextID := 0;
  75.     END;
  76.     IF HelpContextID = 0 THEN
  77.     BEGIN
  78.       MessageBox(hWindow,'Keine Hilfe zu diesem Menⁿpunkt vorhanden',
  79.                  'Meldung',mb_OK);
  80.       DefWndProc(Msg);
  81.     END
  82.     ELSE BEGIN
  83.       Help := FALSE;
  84.       WinHelp(hWindow,HelpFileName,Help_Context,HelpContextID);
  85.     END;
  86.   END
  87.   ELSE tWindow.WMCommand(Msg);
  88. END;
  89.  
  90. PROCEDURE tMyWindow.wmKeyDown(VAR Msg: tMessage);
  91. BEGIN
  92.   IF Msg.wParam = vk_F1 THEN
  93.   BEGIN
  94.     IF GetKeyState(vk_Shift) < 0 THEN
  95.     BEGIN
  96.       Help := TRUE;
  97.       SetCursor(HelpCursor);
  98.       DefWndProc(Msg);
  99.     END;
  100.   END
  101.   ELSE IF (Msg.wParam = vk_Escape) AND Help THEN
  102.        BEGIN
  103.          Help := FALSE;
  104.          SetCursor(OldCursor);
  105.        END;
  106. END;
  107.  
  108. PROCEDURE tMyWindow.WMSetCursor(VAR Msg: tMessage);
  109. BEGIN
  110.   IF Help
  111.     THEN SetCursor(HelpCursor)
  112.     ELSE DefWndProc(Msg);
  113. END;
  114.  
  115. PROCEDURE tMyWindow.WMInitMenu(VAR Msg: tMessage);
  116. BEGIN
  117.   IF Help
  118.     THEN SetCursor(HelpCursor)
  119.     ELSE DefWndProc(Msg);
  120. END;
  121.  
  122. PROCEDURE tMyWindow.Destroy;
  123. BEGIN
  124.   WinHelp(hWindow,HelpFileName,HELP_QUIT,0);
  125.   tWindow.Destroy;
  126. END;
  127.  
  128. PROCEDURE tMyApplication.InitMainWindow;
  129. BEGIN
  130.   MainWindow := New(pMyWindow, Init(NIL, 'First Sample Program'));
  131. END;
  132.  
  133. PROCEDURE tMyApplication.InitInstance;
  134. BEGIN
  135.   tApplication.InitInstance;
  136.   HAccTable := LoadAccelerators(hInstance,'Accelerators_1');
  137. END;
  138.  
  139. VAR
  140.   MyApp : tMyApplication;
  141.  
  142. BEGIN
  143.   MyApp.Init('MyProgram');
  144.   MyApp.Run;
  145.   MyApp.Done;
  146. END.
  147.