home *** CD-ROM | disk | FTP | other *** search
- PROGRAM MyMDIProgram;
-
- USES WinTypes, WinProcs, OWindows;
-
- {$R Gen_Help.Res}
-
- CONST
- cm_DoIt = 101;
- cm_DoItToo = 102;
- cm_HelpIndex = 901;
- cm_HelpOnHelp = 902;
- cm_About = 903;
-
- HelpFileName = 'GEN_HELP.HLP';
-
- TYPE
- tMyApplication = OBJECT(tApplication)
- PROCEDURE InitMainWindow; VIRTUAL;
- PROCEDURE InitInstance; VIRTUAL;
- END;
-
- pMyClientWnd = ^tMyClientWnd;
- tMyClientWnd = OBJECT(tMDIClient)
- PROCEDURE wmKeyDown(VAR Msg: tMessage); VIRTUAL wm_First + wm_KeyDown;
- END;
-
- pMyWindow = ^tMyWindow;
- tMyWindow = OBJECT(tMDIWindow)
- Help : BOOLEAN;
- HelpCursor, OldCursor : hCursor;
- CONSTRUCTOR Init(aTitle: pChar; aMenu: hMenu);
- PROCEDURE InitClientWindow; VIRTUAL;
- PROCEDURE HelpIndex(VAR Msg: tMessage); VIRTUAL cm_First + cm_HelpIndex;
- PROCEDURE HelpOnHelp(VAR Msg: tMessage); VIRTUAL cm_First + cm_HelpOnHelp;
- PROCEDURE WMEnterIdle(VAR Msg: tMessage); VIRTUAL wm_First + wm_EnterIdle;
- PROCEDURE WMCommand(VAR Msg: tMessage); VIRTUAL wm_First + wm_Command;
- PROCEDURE WMSetCursor(VAR Msg: tMessage); VIRTUAL wm_First + wm_SetCursor;
- PROCEDURE WMInitMenu(VAR Msg: tMessage); VIRTUAL wm_First + wm_InitMenu;
- PROCEDURE Destroy; VIRTUAL;
- END;
-
- PROCEDURE tMyClientWnd.wmKeyDown(VAR Msg: tMessage);
- BEGIN
- IF Msg.wParam = vk_F1 THEN
- BEGIN
- IF GetKeyState(vk_Shift) < 0 THEN
- BEGIN
- pMyWindow(Parent)^.Help := TRUE;
- pMyWindow(Parent)^.WMSetCursor(Msg);
- DefWndProc(Msg);
- END;
- END
- ELSE IF (Msg.wParam = vk_Escape) AND pMyWindow(Parent)^.Help THEN
- BEGIN
- pMyWindow(Parent)^.Help := FALSE;
- pMyWindow(Parent)^.WMSetCursor(Msg);
- END;
- END;
-
- CONSTRUCTOR tMyWindow.Init(aTitle: pChar; aMenu: hMenu);
- BEGIN
- tMDIWindow.Init(aTitle, aMenu);
- Help := FALSE;
- HelpCursor := LoadCursor(hInstance, 'Cursor_1');
- OldCursor := LoadCursor(0, idc_Arrow);
- END;
-
- PROCEDURE tMyWindow.InitClientWindow;
- BEGIN
- ClientWnd := New(pMyClientWnd, Init(@Self));
- END;
-
- PROCEDURE tMyWindow.HelpIndex(VAR Msg: tMessage);
- BEGIN
- WinHelp(hWindow,HelpFileName,Help_Index,0);
- END;
-
- PROCEDURE tMyWindow.HelpOnHelp(VAR Msg: tMessage);
- BEGIN
- WinHelp(hWindow,'WinHelp.Hlp',HELP_HELPONHELP,0);
- END;
-
- PROCEDURE tMyWindow.WMEnterIdle(VAR Msg: tMessage);
- BEGIN
- IF ((Msg.wParam = msgf_Menu) AND ((GetKeyState(vk_F1) AND $8000) <> 0)) THEN
- BEGIN
- Help := TRUE;
- PostMessage(hWindow,wm_KeyDown,vk_Return,0);
- END;
- END;
-
- PROCEDURE tMyWindow.WMCommand(VAR Msg: tMessage);
- VAR
- HelpContextID : INTEGER;
- BEGIN
- IF Help THEN
- BEGIN
- CASE Msg.wParam OF
- cm_DoIt, cm_DoItToo, cm_Exit,
- cm_HelpIndex, cm_HelpOnHelp, cm_About : HelpContextID := Msg.wParam;
- ELSE HelpContextID := 0;
- END;
- IF HelpContextID = 0 THEN
- BEGIN
- MessageBox(hWindow,'Keine Hilfe zu diesem Menāæpunkt vorhanden',
- 'Meldung',mb_OK);
- DefWndProc(Msg);
- END
- ELSE BEGIN
- Help := FALSE;
- WinHelp(hWindow,HelpFileName,Help_Context,HelpContextID);
- END;
- END
- ELSE tMDIWindow.WMCommand(Msg);
- END;
-
- PROCEDURE tMyWindow.WMSetCursor(VAR Msg: tMessage);
- VAR
- P: tPoint;
- BEGIN
- IF Help
- THEN SetCursor(HelpCursor)
- ELSE BEGIN
- GetCursorPos(P);
- SetCursorPos(P.X, P.Y);
- DefWndProc(Msg);
- END;
- END;
-
- PROCEDURE tMyWindow.WMInitMenu(VAR Msg: tMessage);
- BEGIN
- IF Help
- THEN SetCursor(HelpCursor)
- ELSE DefWndProc(Msg);
- END;
-
- PROCEDURE tMyWindow.Destroy;
- BEGIN
- WinHelp(hWindow,HelpFileName,HELP_QUIT,0);
- tMDIWindow.Destroy;
- END;
-
- PROCEDURE tMyApplication.InitInstance;
- BEGIN
- tApplication.InitInstance;
- HAccTable := LoadAccelerators(hInstance,'Accelerators_1');
- END;
-
- PROCEDURE tMyApplication.InitMainWindow;
- BEGIN
- MainWindow := New(pMyWindow, Init('MDI Test Program',LoadMenu(hInstance, 'Menu_1')));
- END;
-
- VAR
- MyApp : tMyApplication;
-
- BEGIN
- MyApp.Init('MyProgram');
- MyApp.Run;
- MyApp.Done;
- END.
-