home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9101 / tpw / owner.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-10-11  |  6.4 KB  |  215 lines

  1. PROGRAM Owner;
  2.  
  3. {$R Owner}
  4.  
  5. USES WObjects, WinTypes, WinProcs, BWCC;
  6.  
  7. (* Beispielprogramm fⁿr Borland Windows Custom Controls und Menⁿspielereien *)
  8. (* mit Turbo Pascal fⁿr Windows.                                            *)
  9.  
  10. CONST
  11.   cm_About    = 100;
  12.   cm_WinMsgBox= 101;
  13.   cm_BorMsgBox= 102;
  14.   cm_Haegar   = 103;
  15.   cm_Hilfe    = 901;
  16.  
  17.   id_Munch     = 200;
  18.   id_Boticelli = 201;
  19.   id_EGAVGA    = 202;
  20.  
  21.   id_Punkt1    = 401;
  22.   id_Punkt2    = 402;
  23.   id_Punkt3    = 403;
  24.   cm_Gray      = 404;
  25.   cm_Check     = 405;
  26.   cm_Disable   = 406;
  27.  
  28. TYPE
  29.   PMyWindow = ^TMyWindow;
  30.   TMyWindow = OBJECT (TWindow)
  31.     Punkt1Grayed: BOOLEAN;
  32.     Punkt2Checked: BOOLEAN;
  33.     Punkt3Disabled: BOOLEAN;
  34.  
  35.     CONSTRUCTOR Init (AParent: PWindowsObject; ATitle: PChar);
  36.     PROCEDURE SetupWindow; VIRTUAL;
  37.     PROCEDURE GetWindowClass (VAR AWndClass: TWndClass); VIRTUAL;
  38.  
  39.     PROCEDURE About (VAR Msg: TMessage); VIRTUAL cm_First + cm_About;
  40.     PROCEDURE WinMsgBox (VAR Msg: TMessage); VIRTUAL cm_First + cm_WinMsgBox;
  41.     PROCEDURE BorMsgBox (VAR Msg: TMessage); VIRTUAL cm_First + cm_BorMsgBox;
  42.     PROCEDURE Punkt3 (VAR Msg: TMessage); VIRTUAL cm_First + id_Punkt3;
  43.     PROCEDURE ManipPunkt1 (VAR Msg: TMessage); VIRTUAL cm_First + cm_Gray;
  44.     PROCEDURE ManipPunkt2 (VAR Msg: TMessage); VIRTUAL cm_First + cm_Check;
  45.     PROCEDURE ManipPunkt3 (VAR Msg: TMessage); VIRTUAL cm_First + cm_Disable;
  46.  
  47.     PROCEDURE WMSysCommand (VAR Msg: TMessage); VIRTUAL wm_First + wm_SysCommand;
  48.   END;
  49.  
  50.   PMyDialog = ^TMyDialog;
  51.   TMyDialog = OBJECT (TDialog)
  52.     PROCEDURE Munch (VAR Msg: TMessage); VIRTUAL id_First + id_Munch;
  53.     PROCEDURE Boticelli (VAR Msg: TMessage); VIRTUAL id_First + id_Boticelli;
  54.     PROCEDURE EGAVGA (VAR Msg: TMessage); VIRTUAL id_First + id_EGAVGA;
  55.   END;
  56.  
  57.   TMyApplication = OBJECT (TApplication)
  58.     PROCEDURE InitMainWindow; VIRTUAL;
  59.   END;
  60.  
  61. VAR
  62.   NewBitmap: HBitmap;
  63.   GenericApp: TMyApplication;
  64.  
  65. (************************************ TMyWindow *******************************)
  66.  
  67. (* Methoden zum Aufbau des Applikationsfensters *)
  68.  
  69. CONSTRUCTOR TMyWindow.Init (AParent: PWindowsObject; ATitle: PChar);
  70. BEGIN
  71.   TWindow.Init (AParent, ATitle);
  72.   Attr.Menu := LoadMenu(HInstance, 'OwnerMenu');
  73.   Punkt1Grayed := FALSE;
  74.   Punkt2Checked := FALSE;
  75.   Punkt3Disabled := FALSE;
  76. END;
  77.  
  78. PROCEDURE TMyWindow.SetupWindow;
  79. VAR
  80.   MyMenu: HMenu;
  81. BEGIN
  82.   TWindow.SetupWindow;
  83.   AppendMenu (GetSystemMenu (HWindow, FALSE), mf_Separator, 0, NIL);
  84.   AppendMenu (GetSystemMenu (HWindow, FALSE), mf_String, cm_About, '▄ber dieses Programm...');
  85.   NewBitmap := LoadBitmap (HInstance, 'Haegar4');
  86.   MyMenu := GetMenu (HWindow);
  87.   ModifyMenu (MyMenu, cm_Haegar, mf_ByCommand OR mf_Bitmap, cm_Haegar, PChar(NewBitmap));
  88. END;
  89.  
  90. PROCEDURE TMyWindow.GetWindowClass (VAR AWndClass: TWndClass);
  91. BEGIN
  92.   TWindow.GetWindowClass (AWndClass);
  93.   AWndClass.hIcon := LoadIcon (HInstance, 'MYICON');
  94. END;
  95.  
  96. (* Antwortmethode fⁿr Menⁿoption im Menⁿ "Dialogfenster und mehr..." *)
  97.  
  98. PROCEDURE TMyWindow.About (VAR Msg: TMessage);
  99. VAR Dialog: TMyDialog;
  100. BEGIN
  101.   Dialog.Init(@Self, 'OwnerDraw');
  102.   Dialog.Execute;
  103.   Dialog.Done;
  104. END;
  105.  
  106. (* Antwortmethoden fⁿr Menⁿoptionen im Menⁿ "Mitteilungsfenster" *)
  107.  
  108. PROCEDURE TMyWindow.WinMsgBox (VAR Msg: TMessage);
  109. BEGIN
  110.   MessageBeep(0);
  111.   MessageBox (HWindow,
  112.     'Die MessageBox im Windows Stil',
  113.     'MessageBox',
  114.     mb_YesNoCancel);
  115. END;
  116.  
  117. PROCEDURE TMyWindow.BorMsgBox (VAR Msg: TMessage);
  118. BEGIN
  119.   BWCCMessageBox (HWindow,
  120.     'Die MessageBox im Borland-Stil mit der Unit BWCC.PAS',
  121.     'MessageBox',
  122.     mb_YesNoCancel);
  123. END;
  124.  
  125. (* Antwortmethoden fⁿr Menⁿoptionen im Menⁿ "Menⁿmanipulationen" *)
  126.  
  127. PROCEDURE TMyWindow.Punkt3 (VAR Msg: TMessage);
  128. BEGIN
  129.   MessageBeep(0);
  130. END;
  131.  
  132. PROCEDURE TMyWindow.WMSysCommand (VAR Msg: TMessage);
  133. BEGIN
  134.   CASE Msg.wParam OF
  135.     cm_About: About(Msg);
  136.     ELSE DefWndProc(Msg);
  137.   END;
  138. END;
  139.  
  140. PROCEDURE TMyWindow.ManipPunkt1 (VAR Msg: TMessage);
  141. BEGIN
  142.   IF Punkt1Grayed
  143.     THEN BEGIN
  144.       EnableMenuItem(GetMenu(HWindow), id_Punkt1, mf_ByCommand OR mf_Enabled);
  145.       ModifyMenu(GetMenu(HWindow), cm_Gray, mf_ByCommand OR mf_String, cm_Gray, 'Punkt 1 grau darstellen');
  146.     END
  147.     ELSE BEGIN
  148.       EnableMenuItem(GetMenu(HWindow), id_Punkt1, mf_ByCommand OR mf_Enabled OR mf_Grayed);
  149.       ModifyMenu(GetMenu(HWindow), cm_Gray, mf_ByCommand OR mf_String, cm_Gray, 'Punkt 1 normal darstellen');
  150.     END;
  151.   Punkt1Grayed := NOT Punkt1Grayed;
  152. END;
  153.  
  154. PROCEDURE TMyWindow.ManipPunkt2 (VAR Msg: TMessage);
  155. BEGIN
  156.   IF Punkt2Checked
  157.     THEN BEGIN
  158.       CheckMenuItem(GetMenu(HWindow), id_Punkt2, mf_UnChecked);
  159.       ModifyMenu (GetMenu(HWindow), cm_Check, mf_ByCommand OR mf_String, cm_Check, 'Punkt 2 mit HΣkchen');
  160.     END
  161.     ELSE BEGIN
  162.       CheckMenuItem(GetMenu(HWindow), id_Punkt2, mf_Checked);
  163.       ModifyMenu (GetMenu(HWindow), cm_Check, mf_ByCommand OR mf_String, cm_Check, 'Punkt 2 ohne HΣkchen');
  164.     END;
  165.   Punkt2Checked := NOT Punkt2Checked;
  166. END;
  167.  
  168. PROCEDURE TMyWindow.ManipPunkt3 (VAR Msg: TMessage);
  169. BEGIN
  170.   IF Punkt3Disabled
  171.     THEN BEGIN
  172.       EnableMenuItem(GetMenu(HWindow), id_Punkt3, mf_ByCommand OR mf_Enabled);
  173.       ModifyMenu(GetMenu(HWindow), cm_Disable, mf_ByCommand OR mf_String, cm_Disable, 'Punkt 3 abschalten');
  174.     END
  175.     ELSE BEGIN
  176.       EnableMenuItem(GetMenu(HWindow), id_Punkt3, mf_ByCommand OR mf_Disabled);
  177.       ModifyMenu(GetMenu(HWindow), cm_Disable, mf_ByCommand OR mf_String, cm_Disable, 'Punkt 3 anschalten');
  178.     END;
  179.   Punkt3Disabled := NOT Punkt3Disabled;
  180. END;
  181.  
  182. (************************************ TMyDialog *******************************)
  183. (* Diese Methoden werden im Dialogfenster ben÷tigt, das durch die Option      *)
  184. (* "Borland Dialogfenster" im Untermenⁿ "Dialogfenster und mehr..."           *)
  185. (* aufgerufen wird.                                                           *)
  186.  
  187. PROCEDURE TMyDialog.Munch (VAR Msg: TMessage);
  188. BEGIN
  189.   Cancel(Msg);
  190. END;
  191.  
  192. PROCEDURE TMyDialog.Boticelli (VAR Msg: TMessage);
  193. BEGIN
  194.   MessageBeep(0);
  195. END;
  196.  
  197. PROCEDURE TMyDialog.EGAVGA (VAR Msg: TMessage);
  198. BEGIN
  199.   MessageBeep(0);
  200. END;
  201.  
  202. (************************************ TMyApplication **************************)
  203.  
  204. PROCEDURE TMyApplication.InitMainWindow;
  205. BEGIn
  206.   MainWindow := New (PMyWindow, Init(NIL, 'Beispielprogramm Borland-Style Custom Controls'));
  207. END;
  208.  
  209. (************************************ Hauptprogramm ***************************)
  210.  
  211. BEGIN
  212.   GenericApp.Init ('GenericApp');
  213.   GenericApp.Run;
  214.   GenericApp.Done;
  215. END.