home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9203 / smartico / tbdemo.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-03-31  |  12.2 KB  |  395 lines

  1. (*$A+,B-,D+,F-,G+,I+,L+,N-,R+,S+,V+,W-,X+*)
  2. (*$M 8192,8192}
  3. (*--------------------------------------------------------*)
  4. (*                      TBDEMO.PAS                        *)
  5. (* Copyright 1992 Mario M. Westphal & DMV-Verlag          *)
  6. (*             Demoprogramm fⁿr TBWIN.PAS                 *)
  7. (*       Compiler: Turbo Pascal für Windows 1.0           *)
  8. (*--------------------------------------------------------*)
  9.  
  10. PROGRAM DOStxDemo;
  11. (*$R TBDEMO.RES*)
  12. USES
  13.   WinTypes, WinProcs, WObjects, Strings, TBWin;
  14.  
  15. CONST
  16.   AppName     : PChar = 'DOS toolBox-TestApp';
  17.  
  18.   (* Toolbox-IDs *)
  19.   tbid_1    = 10001;
  20.   tbid_2    = 4001;
  21.   tbid_3    = 10101;
  22.   tbid_4    = 15001;
  23.  
  24.   (* Menⁿ-ID's *)
  25.   idm_Deactivate  = 101;
  26.   idm_Activate    = 102;
  27.   idm_Delete      = 104;
  28.   idm_Insert      = 105;
  29.   idm_About       = 201;
  30.  
  31. TYPE
  32.   pSymBar = ^tSymBar;
  33.   tSymBar = OBJECT(tToolBar)
  34.       TB1 : pToolBox;
  35.       CB1 : pComboBox;
  36.       B1  : pButton;
  37.       S1  : pStatic;
  38.     PROCEDURE SetupWindow; VIRTUAL;
  39.     PROCEDURE HandleTB2(VAR Msg: tMessage);
  40.       VIRTUAL wm_First + wm_User + tbid_2;
  41.     PROCEDURE WMCtlColor(VAR Msg: tMessage);
  42.       VIRTUAL wm_First + wm_CtlColor;
  43.     PROCEDURE wmLButtonDblClk(VAR Msg: tMessage);
  44.       VIRTUAL wm_First + wm_LButtonDblClk;
  45.   END;
  46.  
  47. TYPE
  48.   (* Zentrierte Dialoge *)
  49.   pCtrDialog  = ^tCtrDialog;
  50.   tCtrDialog  = OBJECT(tDialog)
  51.     PROCEDURE SetupWindow; VIRTUAL;
  52.   END;
  53.  
  54. TYPE
  55.   pmWindow = ^tmWindow;
  56.   tmWindow = OBJECT(tWindow)
  57.       hTB       : ARRAY[0..2] OF pToolBox;
  58.       sBar      : pSymBar;
  59.     CONSTRUCTOR Init(aParent: pWindowsObject;
  60.                      aTitle : PChar);
  61.     PROCEDURE SetupWindow; VIRTUAL;
  62.     PROCEDURE Paint(PaintDC: HDC;
  63.                     VAR PaintInfo: tPaintStruct); VIRTUAL;
  64.     PROCEDURE WMSize(VAR Msg: tMessage);
  65.       VIRTUAL wm_First + wm_Size;
  66.     PROCEDURE HandleTB_1(VAR Msg: tMessage);
  67.       VIRTUAL wm_First + wm_User + tbid_1;
  68.     PROCEDURE HandleTB_3(VAR Msg: tMessage);
  69.       VIRTUAL wm_First + wm_User + tbid_3;
  70.     (* Menⁿ-Handler *)
  71.     PROCEDURE IDMDeactivate(VAR Msg: tMessage);
  72.       VIRTUAL cm_First + idm_Deactivate;
  73.     PROCEDURE idmActivate(VAR Msg: tMessage);
  74.       VIRTUAL cm_First + idm_Activate;
  75.     PROCEDURE idmDelete(VAR Msg: tMessage);
  76.       VIRTUAL cm_First + idm_Delete;
  77.     PROCEDURE idmInsert(VAR Msg: tMessage);
  78.       VIRTUAL cm_First + idm_Insert;
  79.     PROCEDURE idmAbout(VAR Msg: tMessage);
  80.       VIRTUAL cm_First + idm_About;
  81.   END;
  82.  
  83. TYPE
  84.   tMyApplication = OBJECT(tApplication)
  85.     PROCEDURE InitMainWindow; VIRTUAL;
  86.   END;
  87.  
  88.  
  89. (**********************************************************)
  90. (*                       tSymBar                          *)
  91. (**********************************************************)
  92.  
  93. PROCEDURE tSymBar.SetupWindow;
  94. VAR y : INTEGER;
  95.     r : tRect;
  96. BEGIN
  97.   tToolBar.SetupWindow;
  98.   GetClientRect(hWindow, r);
  99.   SetBarBreak( 5 * 24 + 17, TRUE);
  100.   SetBarBreak(14 * 24 +  8, TRUE);
  101.   (* Buttons fⁿr die Auswahl des Schriftattribute *)
  102.   TB1 := pToolBox(Application^.MakeWindow(
  103.           New(pToolBox, Init(@Self, '', tbid_2, 8, 3, 5, 1,
  104.               24, 22, 24, 22, tbs_MultiSel))));
  105.   FOR y := 0 TO 5 DO TB1^.InsertPanel(y, tbid_2 + y);
  106.   TB1^.SetPanelState(1, tb_Selected);
  107.  
  108.   (* Position der ComboBox ist abhΣngig von ihrer H÷he *)
  109.   y := (r.Bottom - (cyDBU * 12 DIV 8)) DIV 2;
  110.   CB1 := pComboBox(Application^.MakeWindow(
  111.          New(pComboBox, Init(@Self,  333,  148, y, 120, 120,
  112.                              cbs_DropDown,50))));
  113.   CB1^.AddString('Times');
  114.   CB1^.AddString('Helvetica');
  115.   CB1^.AddString('Roman');
  116.  
  117.   B1 := pButton(Application^.MakeWindow(
  118.          New(pButton, Init(@Self, 334, 'Push!', 275, y,
  119.              60, cyDBU * 12 DIV 8, FALSE))));
  120.   y := (r.Bottom - cyDBU) DIV 2;
  121.   S1 := pStatic(Application^.MakeWindow(New(pStatic,
  122.         Init(@Self, 335, '[1]Panel 0 selektiert', 360,
  123.              y, 260, cyDBU, 50))));
  124. END;
  125.  
  126. PROCEDURE tSymBar.WMCtlColor(VAR Msg: tMessage);
  127. (*--------------------------------------------------------*)
  128. (* Die Kontroll-Elemente in der Symbolleiste mⁿssen die   *)
  129. (* selbe Hintergrundfarbe wie die Symbolleiste haben.     *)
  130. (* Dazu wird der Hintergund-Pinsel der Symbolleiste auch  *)
  131. (* fⁿr diese Elemente verwendet.                          *)
  132. BEGIN
  133.   SetBkColor(Msg.wParam, color_TBFace);
  134.   UnrealizeObject(BkBrush);
  135.   SetBrushOrg(Msg.wParam, 0, 0);
  136.   Msg.Result := BkBrush;
  137. END;
  138.  
  139. PROCEDURE tSymBar.HandleTB2(VAR Msg: tMessage);
  140. (*--------------------------------------------------------*)
  141. (* Behandelt die Nachrichten des TB-Windows in der        *)
  142. (* Symbolleiste.                                          *)
  143.  
  144. VAR
  145.   i : INTEGER;
  146. BEGIN
  147.   IF Msg.wParam = tbm_Select THEN BEGIN (* Selektiert *)
  148.     CASE Msg.lParamHi OF
  149.       0: BEGIN
  150.            FOR i := 2 TO 4 DO
  151.              TB1^.SetPanelState (i, tb_Selected);
  152.            TB1^.SetPanelState (1, tb_Normal);
  153.          END;
  154.       1: FOR i := 2 TO 4 DO
  155.            TB1^.SetPanelState (i, tb_Normal);
  156.       2, 3,
  157.       4: TB1^.SetPanelState (1, tb_Normal);
  158.     END;
  159.   END ELSE BEGIN                          (* Deselektiert *)
  160.     CASE Msg.lParamHi OF
  161.       0: BEGIN
  162.            FOR i := 2 TO 4 DO
  163.              TB1^.SetPanelState (i, tb_Normal);
  164.            TB1^.SetPanelState (1, tb_Selected);
  165.          END;
  166.       1: TB1^.SetPanelState (1, tb_Selected);
  167.       2, 3,
  168.       4: BEGIN
  169.            IF (TB1^.GetPanelState(2) = tb_Normal) AND
  170.               (TB1^.GetPanelState(3) = tb_Normal) AND
  171.               (TB1^.GetPanelState(4) = tb_Normal)
  172.              THEN TB1^.SetPanelState (1, tb_Selected);
  173.            END;
  174.     END;
  175.   END;
  176. END;
  177.  
  178. PROCEDURE tSymBar.wmLButtonDblClk(VAR Msg: tMessage);
  179. (*--------------------------------------------------------*)
  180. (* An dieser Stelle kann auf einen Doppelklick auf die    *)
  181. (* Symbolleite reagiert werden.                           *)
  182.  
  183. BEGIN
  184.   MessageBox(hWindow, 'Doppelklick wurde registriert!',
  185.              'Symbolleiste', mb_Ok);
  186. END;
  187.  
  188.  
  189. (**********************************************************)
  190. (*            tCtrDialog - Zentrierter Dialog             *)
  191. (**********************************************************)
  192. PROCEDURE tCtrDialog.SetupWindow;
  193. VAR
  194.   r : tRect;
  195. BEGIN
  196.   tDialog.SetupWindow;
  197.   GetWindowRect(hWindow, r);
  198.   OffsetRect(r, -r.Left, -r.Top);
  199.   SetWindowPos(hWindow, 0, (GetSystemMetrics(sm_CXScreen) -
  200.            r.Right) DIV 2, (GetSystemMetrics(sm_CYScreen) -
  201.            r.Bottom) DIV 2, 0, 0, swp_NoSize);
  202. END;
  203.  
  204.  
  205. (**********************************************************)
  206. (*                      tmWindow                          *)
  207. (**********************************************************)
  208. CONSTRUCTOR tmWindow.Init(aParent: pWindowsObject;
  209.                           aTitle : PChar);
  210. BEGIN
  211.   tWindow.Init(aParent, aTitle);
  212.   Attr.W := GetSystemMetrics(sm_CXScreen);
  213.   Attr.H := GetSystemMetrics(sm_CYScreen) - 2 *
  214.             GetSystemMetrics(sm_CYIcon);
  215.   Attr.X := 0;
  216.   Attr.y := 0;
  217.   Attr.Style := ws_OverlappedWindow OR ws_ClipChildren;
  218.   Attr.Menu := LoadMenu(hInstance, 'MAINMENU');
  219. END;
  220.  
  221. PROCEDURE tmWindow.SetupWindow;
  222. (*--------------------------------------------------------*)
  223. (* Symbolleiste und TB-Menⁿ erzeugen                      *)
  224. VAR
  225.   Menu: hMenu;
  226.   i   : INTEGER;
  227. BEGIN
  228.   tWindow.SetupWindow;
  229.   (* Symbolleiste *)
  230.   sBar := pSymBar(Application^.MakeWindow(
  231.                   New(pSymBar, Init(@Self, 29))));
  232.  
  233.   (* Zwei Toolbox-Windows *)
  234.   hTB[0] := pToolBox(Application^.MakeWindow(New(pToolBox,
  235.             Init(@Self, 'Single', tbid_1, Attr.W - 100, 40,
  236.             2, 3, 28, 28, 28, 22, tbs_Caption))));
  237.   FOR i := 0 TO 5 DO hTB[0]^.InsertPanel(i, tbid_1 + i);
  238.  
  239.   hTB[1] := pToolBox(Application^.MakeWindow(New(pToolBox,
  240.             Init(@Self, 'Multiple', tbid_3, Attr.W - 100,
  241.             160, 3, 2, 28, 28, 28, 22,
  242.             tbs_Caption OR tbs_MultiSel))));
  243.   FOR i := 0 TO 5 DO hTB[1]^.InsertPanel(i, tbid_3 + i);
  244.   Menu := GetMenu(hWindow);
  245.   EnableMenuItem(Menu, idm_Insert, mf_Grayed);
  246.   EnableMenuItem(Menu, idm_Activate, mf_Grayed);
  247. END;
  248.  
  249. PROCEDURE tmWindow.WMSize(VAR Msg: tMessage);
  250. (*--------------------------------------------------------*)
  251. (* In dieser Methode mu▀ auch die Gr÷▀e der Symbolleiste  *)
  252. (* angepa▀t werden.                                       *)
  253. BEGIN
  254.   tWindow.WMSize(Msg);
  255.   (* Symbolleiste anpassen *)
  256.   sBar^.SetSize;
  257.   (* Die beweglichen Toolbox-Fenster justieren *)
  258.   hTB[0]^.TBAdjust;
  259.   hTB[1]^.TBAdjust;
  260. END;
  261.  
  262. PROCEDURE tmWindow.Paint(PaintDC: HDC;
  263.                      VAR PaintInfo: tPaintStruct);
  264. VAR
  265.   s   : ARRAY[0..100] OF CHAR;
  266.   tm  : tTextMetric;
  267.   x, y: INTEGER;
  268. BEGIN
  269.   tWindow.Paint(PaintDC, PaintInfo);
  270.   (* Unterhalb der Menⁿzeile *)
  271.   SetWindowOrg(PaintDC, 0, -29);
  272.   GetTextMetrics(PaintDC, tm);
  273.   X := tm.tmAveCharWidth;
  274.   y := tm.tmHeight;
  275.   StrCopy(s,
  276.        'Zwei neue Objekte fⁿr Turbo Pascal fⁿr Windows...');
  277.   TextOut(PaintDC, x, 0, s, StrLen(s));
  278.   StrCopy(s, 'tToolBar: Symbolleiste');
  279.   TextOut(PaintDC, x, y, s, StrLen(s));
  280.   StrCopy(s,
  281.     'tToolbox: Frei bewegliche Bitmap-Menⁿs (Smart-Icons)');
  282.   TextOut(PaintDC, X, 2 * y, s, StrLen(s));
  283. END;
  284.  
  285. PROCEDURE tmWindow.HandleTB_1(VAR Msg: tMessage);
  286. (*--------------------------------------------------------*)
  287. (* Behandelt Nachrichten des 1. TB-Windows.               *)
  288. VAR
  289.   s : ARRAY[0..50] OF CHAR;
  290. BEGIN
  291.   CASE Msg.lParamHi OF
  292.     0  : StrCopy(s, '[1] Panel 0');
  293.     1  : StrCopy(s, '[1] Panel 1');
  294.     2  : StrCopy(s, '[1] Panel 2');
  295.     3  : StrCopy(s, '[1] Panel 3');
  296.     4  : StrCopy(s, '[1] Panel 4');
  297.     5  : StrCopy(s, '[1] Panel 5');
  298.   END;
  299.   IF Msg.wParam = tbm_Select THEN
  300.     StrCat(s, ' selektiert')
  301.   ELSE
  302.     StrCat(s, ' deselektiert');
  303.   sBar^.S1^.SetText(s);
  304. END;
  305.  
  306. PROCEDURE tmWindow.HandleTB_3(VAR Msg: tMessage);
  307. (*--------------------------------------------------------*)
  308. (* Behandelt Nachrichten des 2. TB-Windows.               *)
  309. VAR
  310.   s : ARRAY[0..50] OF CHAR;
  311. BEGIN
  312.   CASE Msg.lParamHi OF
  313.     0  : StrCopy(s, '[2] Panel 0');
  314.     1  : StrCopy(s, '[2] Panel 1');
  315.     2  : StrCopy(s, '[2] Panel 2');
  316.     3  : StrCopy(s, '[2] Panel 3');
  317.     4  : StrCopy(s, '[2] Panel 4');
  318.     5  : StrCopy(s, '[2] Panel 5');
  319.   END;
  320.   IF Msg.wParam = tbm_Select THEN
  321.     StrCat(s, ' selektiert')
  322.   ELSE
  323.     StrCat(s, ' deselektiert');
  324.   sBar^.S1^.SetText(s);
  325. END;
  326.  
  327. PROCEDURE tmWindow.IDMDeactivate(VAR Msg: tMessage);
  328. VAR
  329.   Menu: hMenu;
  330. BEGIN
  331.   hTB[0]^.SetPanelState(5, tb_Disabled);
  332.   hTB[1]^.SetPanelState(4, tb_Disabled);
  333.   Menu := GetMenu(hWindow);
  334.   EnableMenuItem(Menu, idm_Deactivate, mf_Grayed);
  335.   EnableMenuItem(Menu, idm_Activate, mf_Enabled);
  336. END;
  337.  
  338. PROCEDURE tmWindow.idmActivate(VAR Msg: tMessage);
  339. VAR
  340.   Menu: hMenu;
  341. BEGIN
  342.   hTB[0]^.SetPanelState(5, tb_Normal);
  343.   hTB[1]^.SetPanelState(4, tb_Normal);
  344.   Menu := GetMenu(hWindow);
  345.   EnableMenuItem(Menu, idm_Deactivate, mf_Enabled);
  346.   EnableMenuItem(Menu, idm_Activate, mf_Grayed);
  347. END;
  348.  
  349. PROCEDURE tmWindow.idmDelete(VAR Msg: tMessage);
  350. VAR Menu : hMenu;
  351. BEGIN
  352.   hTB[0]^.SetPanel(1, 1);
  353.   hTB[0]^.SetPanel(2, 1);
  354.   hTB[0]^.SetPanel(4, 1);
  355.   Menu := GetMenu(hWindow);
  356.   EnableMenuItem(Menu, idm_Delete, mf_Grayed);
  357.   EnableMenuItem(Menu, idm_Insert, mf_Enabled);
  358. END;
  359.  
  360. PROCEDURE tmWindow.idmInsert(VAR Msg: tMessage);
  361. VAR Menu : hMenu;
  362. BEGIN
  363.   hTB[0]^.SetPanel(1, tbid_3);
  364.   hTB[0]^.SetPanel(2, tbid_3 + 1);
  365.   hTB[0]^.SetPanel(4, tbid_3 + 2);
  366.   Menu := GetMenu(hWindow);
  367.   EnableMenuItem(Menu, idm_Insert, mf_Grayed);
  368.   EnableMenuItem(Menu, idm_Delete, mf_Enabled);
  369. END;
  370.  
  371. PROCEDURE tmWindow.idmAbout(VAR Msg: tMessage);
  372. BEGIN
  373.   Application^.ExecDialog(New(pCtrDialog,
  374.                           Init(@Self, 'DLG_ABOUT')));
  375. END;
  376.  
  377. (**********************************************************)
  378. (*                 tMyApplication                         *)
  379. (**********************************************************)
  380. PROCEDURE tMyApplication.InitMainWindow;
  381. BEGIN
  382.   MainWindow := New(pmWindow, Init(NIL, AppName));
  383. END;
  384.  
  385. VAR
  386.   MyApp: tMyApplication;
  387. BEGIN
  388.   MyApp.Init(AppName);
  389.   MyApp.Run;
  390.   MyApp.Done;
  391. END.
  392.  
  393. (**********************************************************)
  394. (*                   Ende von TBDEMO.PAS                  *)
  395.