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

  1. (*$A+,B-,D+,F-,G+,I+,L+,N-,R+,S+,V+,W-,X+*)
  2. (*$M 8192,8192}
  3. (*--------------------------------------------------*)
  4. (*                  TBAPP.PAS                       *)
  5. (* Copyright 1992 Mario M. Westphal & DMV-Verlag    *)
  6. (*        Demoprogramm fⁿr TBWIN.PAS                *)
  7. (*--------------------------------------------------*)
  8.  
  9. PROGRAM TbTest;
  10. (*$R TBAPP.RES*)
  11.  
  12. USES
  13.   WinTypes, WinProcs, WObjects, Strings, TBWin;
  14.  
  15. CONST
  16.   AppName     : PChar = 'DOS toolbox-TestApp';
  17.   (* ToolBox-IDs *)
  18.   tbid_1      = 10001;
  19.   tbid_4      = 15001;
  20.  
  21.   idm_Insert  = 1001;
  22.   idm_Delete  = 1002;
  23.  
  24. TYPE
  25.   (* Symbolleiste *)
  26.   pSymBar = ^tSymBar;
  27.   tSymBar = OBJECT(tToolBar)
  28.       TB1 : pToolBox;
  29.     PROCEDURE SetupWindow; VIRTUAL;
  30.     PROCEDURE HandleP1(VAR Msg: tMessage);
  31.       VIRTUAL wm_First + wm_User + tbid_4 + 1;
  32.   END;
  33.  
  34. TYPE
  35.   pPanel  = ^tPanel;
  36.   tPanel  = OBJECT(tToolBox)
  37.     PROCEDURE DrawEmptyPanel(VAR DC: HDC;
  38.               x, y, w, h: INTEGER); VIRTUAL;
  39.   END;
  40.  
  41. TYPE                                     (* Hauptfenster *)
  42.   pmWindow = ^tmWindow;
  43.   tmWindow = OBJECT(tWindow)
  44.       sBar : pSymBar;
  45.       TB1  : pToolBox;
  46.     CONSTRUCTOR Init(aParent: pWindowsObject;
  47.                      aTitle: PChar);
  48.     PROCEDURE SetupWindow; VIRTUAL;
  49.     PROCEDURE wmSize (VAR Msg: tMessage);
  50.       VIRTUAL wm_First + wm_Size;
  51.     PROCEDURE idmInsert (VAR Msg: tMessage);
  52.       VIRTUAL cm_First + idm_Insert;
  53.     PROCEDURE idmDelete (VAR Msg: tMessage);
  54.       VIRTUAL cm_First + idm_Delete;
  55.     PROCEDURE Display (s: PChar);
  56.     PROCEDURE HandleTB1 (VAR Msg: tMessage);
  57.       VIRTUAL wm_First + wm_User + tbid_1;
  58.   END;
  59.  
  60. TYPE
  61.   TMyApplication = OBJECT(tApplication)
  62.     PROCEDURE InitMainWindow; VIRTUAL;
  63.   END;
  64.  
  65. (**********************************************************)
  66. (*                        tSymBar                         *)
  67. (**********************************************************)
  68.  
  69. PROCEDURE tSymBar.SetupWindow;
  70. VAR
  71.   y,i : INTEGER;
  72.   r : tRect;
  73. BEGIN
  74.   tToolBar.SetupWindow;
  75.   GetClientRect(hWindow,r);
  76.     (* Dieses TB-Window sendet eine eigene Nachricht *)
  77.     (* fⁿr jedes Panel in der Symbolleiste: MultiMsg *)
  78.   TB1:= pPanel(Application^.MakeWindow(
  79.         New(pPanel, Init(@Self,'',tbid_4,1,2,10,1,
  80.             48,30,48,24,tbs_MultiMsg))));
  81.  
  82.   FOR i := 0 TO 7 DO TB1^.InsertPanel(i,tbid_4);
  83.   (* H÷he der Symbolleiste an die *)
  84.   (* verwendeten Bitmaps anpassen *)
  85.   IF TB1^.UseLowRes THEN
  86.     SetWindowPos(hWindow,0,0,0,r.Right-r.Left,28,swp_NoMove)
  87.   ELSE
  88.     SetWindowPos(hWindow,0,0,0,r.Right-r.Left,34,swp_NoMove);
  89. END;
  90.  
  91. PROCEDURE tSymBar.HandleP1 (VAR Msg: tMessage);
  92. (* Reagiert auf Nachrichten des 2. Panels von links *)
  93. BEGIN
  94.   IF Msg.wParam = tbm_Select THEN MessageBeep(0)
  95.   ELSE BEGIN
  96.     MessageBeep(0);
  97.     MessageBeep(0);
  98.   END;
  99. END;
  100.  
  101. (* Behandlung der anderen Panels analog ... *)
  102.  
  103. (**********************************************************)
  104. (*                         tPanel                         *)
  105. (**********************************************************)
  106.  
  107. PROCEDURE tPanel.DrawEmptyPanel (VAR DC: HDC; x,y,w,h: INTEGER);
  108. VAR
  109.   OPen  : HPen;
  110.   Pen   : HPen;
  111.   OBrush: HBrush;
  112.   Brush : HBrush;
  113. BEGIN
  114.   Brush := CreateSolidBrush(GetNearestColor(DC,RGB(193,193,193)));
  115.   OBrush := SelectObject(DC,Brush);
  116.   Pen := CreatePen(ps_Solid,1,GetNearestColor(DC,RGB(0,0,0)));
  117.   OPen := SelectObject(DC,Pen);
  118.   Rectangle(DC, x, y, x+w, y+h);
  119.   SelectObject(DC,OPen);
  120.   DeleteObject(Pen);
  121.   SelectObject(DC,OBrush);
  122.   DeleteObject(Brush);
  123. END;
  124.  
  125. (************************************************************)
  126. (*                        tmWindow                          *)
  127. (************************************************************)
  128.  
  129. CONSTRUCTOR tmWindow.Init (aParent : pWindowsObject; aTitle: PChar);
  130. BEGIN
  131.   tWindow.Init(aParent,aTitle);
  132.   Attr.w := GetSystemMetrics(sm_CXScreen);
  133.   Attr.h := GetSystemMetrics(sm_CYScreen)-2*GetSystemMetrics(sm_CYIcon);
  134.   Attr.x := 0;
  135.   Attr.y := 0;
  136.   Attr.Style := ws_OverlappedWindow OR ws_ClipChildren;
  137.   Attr.Menu := LoadMenu(hInstance,'MAIN_MENU');
  138. END;
  139.  
  140. PROCEDURE tmWindow.SetupWindow;
  141. VAR i : INTEGER;
  142. BEGIN
  143.   tWindow.SetupWindow;
  144.   (* Symbolleiste *)
  145.   sBar :=pSymBar(Application^.MakeWindow(
  146.         New(pSymBar, Init(@Self,29))));
  147.   TB1:= pToolBox(Application^.MakeWindow(
  148.         New(pToolBox, Init(@Self,'Werkzeuge',tbid_1,40,80,3,2,
  149.             28,28,28,22,tbs_Caption OR tbs_MultiSel))));
  150.   FOR i := 0 TO 5 DO TB1^.InsertPanel(i,tbid_1+i);
  151. END;
  152.  
  153. PROCEDURE tmWindow.wmSize (VAR Msg: tMessage);
  154. (* Anpassen der Symbolleiste *)
  155. BEGIN
  156.   tWindow.wmSize(Msg);
  157.   (* Symbolleiste anpassen *)
  158.   sBar^.SetSize;
  159. END;
  160.  
  161. PROCEDURE tmWindow.idmInsert (VAR Msg: tMessage);
  162. (* Neue Panels in die Symbolleiste einfⁿgen *)
  163. BEGIN
  164.   sBar^.TB1^.InsertPanel(8,tbid_4);
  165.   sBar^.TB1^.InsertPanel(9,tbid_4);
  166. END;
  167.  
  168. PROCEDURE tmWindow.idmDelete (VAR Msg: tMessage);
  169. (* Panels aus Symbolleiste l÷schen *)
  170. BEGIN
  171.   sBar^.TB1^.SetPanel(8,0);
  172.   sBar^.TB1^.SetPanel(9,0);
  173. END;
  174.  
  175. PROCEDURE tmWindow.Display (s: PChar);
  176. (* Zentrierten String ausgeben. Einfachst! *)
  177. VAR
  178.   r : tRect;
  179.   DC: HDC;
  180. BEGIN
  181.   InvalidateRect(hWindow,NIL,TRUE);
  182.   UpdateWindow(hWindow);
  183.   GetClientRect(hWindow,r);
  184.   OffsetRect(r,-r.Left,-r.Top);
  185.   DC := GetDC(hWindow);
  186.   SetTextAlign(DC,ta_Center);
  187.   TextOut(DC,r.Right DIV 2, r.Bottom DIV 2,s,StrLen(s));
  188.   ReleaseDC(hWindow,DC);
  189. END;
  190.  
  191. PROCEDURE tmWindow.HandleTB1 (VAR Msg: tMessage);
  192. (* Reagiert auf die Nachrichten des TB-Windows *)
  193. BEGIN
  194.   IF Msg.wParam = tbm_Select THEN BEGIN
  195.     CASE Msg.lParamHi OF
  196.       0 : Display('Kreis selektiert');
  197.       1 : Display('Rechteck selektiert');
  198.       2 : Display('Linie selektiert');
  199.       3 : Display('Winkel selektiert');
  200.       4 : Display('Farbrolle selektiert');
  201.       5 : Display('Zoom selektiert');
  202.     END;
  203.   END ELSE BEGIN
  204.     CASE Msg.lParamHi OF
  205.       0: Display('Kreis deselektiert');
  206.       1: Display('Rechteck deselektiert');
  207.       2: Display('Linie deselektiert');
  208.       3: Display('Winkel deselektiert');
  209.       4: Display('Farbrolle deselektiert');
  210.       5: Display('Zoom deselektiert');
  211.     END;
  212.   END;
  213. END;
  214.  
  215.  
  216. (************************************************************)
  217. (* tMyApplication                                           *)
  218. (************************************************************)
  219. PROCEDURE TMyApplication.InitMainWindow;
  220. BEGIN
  221.   MainWindow := New(pmWindow, Init(NIL, AppName));
  222. END;
  223.  
  224. VAR
  225.   MyApp: TMyApplication;
  226.  
  227. BEGIN
  228.   MyApp.Init(AppName);
  229.   MyApp.Run;
  230.   MyApp.Done;
  231. END.
  232.  
  233. (*------------------------------------------------------------*)
  234. (*                     Ende von TBAPP.PAS                     *)
  235.