home *** CD-ROM | disk | FTP | other *** search
- (*$A+,B-,D+,F-,G+,I+,L+,N-,R+,S+,V+,W-,X+*)
- (*$M 8192,8192}
- (*--------------------------------------------------*)
- (* TBAPP.PAS *)
- (* Copyright 1992 Mario M. Westphal & DMV-Verlag *)
- (* Demoprogramm fⁿr TBWIN.PAS *)
- (*--------------------------------------------------*)
-
- PROGRAM TbTest;
- (*$R TBAPP.RES*)
-
- USES
- WinTypes, WinProcs, WObjects, Strings, TBWin;
-
- CONST
- AppName : PChar = 'DOS toolbox-TestApp';
- (* ToolBox-IDs *)
- tbid_1 = 10001;
- tbid_4 = 15001;
-
- idm_Insert = 1001;
- idm_Delete = 1002;
-
- TYPE
- (* Symbolleiste *)
- pSymBar = ^tSymBar;
- tSymBar = OBJECT(tToolBar)
- TB1 : pToolBox;
- PROCEDURE SetupWindow; VIRTUAL;
- PROCEDURE HandleP1(VAR Msg: tMessage);
- VIRTUAL wm_First + wm_User + tbid_4 + 1;
- END;
-
- TYPE
- pPanel = ^tPanel;
- tPanel = OBJECT(tToolBox)
- PROCEDURE DrawEmptyPanel(VAR DC: HDC;
- x, y, w, h: INTEGER); VIRTUAL;
- END;
-
- TYPE (* Hauptfenster *)
- pmWindow = ^tmWindow;
- tmWindow = OBJECT(tWindow)
- sBar : pSymBar;
- TB1 : pToolBox;
- CONSTRUCTOR Init(aParent: pWindowsObject;
- aTitle: PChar);
- PROCEDURE SetupWindow; VIRTUAL;
- PROCEDURE wmSize (VAR Msg: tMessage);
- VIRTUAL wm_First + wm_Size;
- PROCEDURE idmInsert (VAR Msg: tMessage);
- VIRTUAL cm_First + idm_Insert;
- PROCEDURE idmDelete (VAR Msg: tMessage);
- VIRTUAL cm_First + idm_Delete;
- PROCEDURE Display (s: PChar);
- PROCEDURE HandleTB1 (VAR Msg: tMessage);
- VIRTUAL wm_First + wm_User + tbid_1;
- END;
-
- TYPE
- TMyApplication = OBJECT(tApplication)
- PROCEDURE InitMainWindow; VIRTUAL;
- END;
-
- (**********************************************************)
- (* tSymBar *)
- (**********************************************************)
-
- PROCEDURE tSymBar.SetupWindow;
- VAR
- y,i : INTEGER;
- r : tRect;
- BEGIN
- tToolBar.SetupWindow;
- GetClientRect(hWindow,r);
- (* Dieses TB-Window sendet eine eigene Nachricht *)
- (* fⁿr jedes Panel in der Symbolleiste: MultiMsg *)
- TB1:= pPanel(Application^.MakeWindow(
- New(pPanel, Init(@Self,'',tbid_4,1,2,10,1,
- 48,30,48,24,tbs_MultiMsg))));
-
- FOR i := 0 TO 7 DO TB1^.InsertPanel(i,tbid_4);
- (* H÷he der Symbolleiste an die *)
- (* verwendeten Bitmaps anpassen *)
- IF TB1^.UseLowRes THEN
- SetWindowPos(hWindow,0,0,0,r.Right-r.Left,28,swp_NoMove)
- ELSE
- SetWindowPos(hWindow,0,0,0,r.Right-r.Left,34,swp_NoMove);
- END;
-
- PROCEDURE tSymBar.HandleP1 (VAR Msg: tMessage);
- (* Reagiert auf Nachrichten des 2. Panels von links *)
- BEGIN
- IF Msg.wParam = tbm_Select THEN MessageBeep(0)
- ELSE BEGIN
- MessageBeep(0);
- MessageBeep(0);
- END;
- END;
-
- (* Behandlung der anderen Panels analog ... *)
-
- (**********************************************************)
- (* tPanel *)
- (**********************************************************)
-
- PROCEDURE tPanel.DrawEmptyPanel (VAR DC: HDC; x,y,w,h: INTEGER);
- VAR
- OPen : HPen;
- Pen : HPen;
- OBrush: HBrush;
- Brush : HBrush;
- BEGIN
- Brush := CreateSolidBrush(GetNearestColor(DC,RGB(193,193,193)));
- OBrush := SelectObject(DC,Brush);
- Pen := CreatePen(ps_Solid,1,GetNearestColor(DC,RGB(0,0,0)));
- OPen := SelectObject(DC,Pen);
- Rectangle(DC, x, y, x+w, y+h);
- SelectObject(DC,OPen);
- DeleteObject(Pen);
- SelectObject(DC,OBrush);
- DeleteObject(Brush);
- END;
-
- (************************************************************)
- (* tmWindow *)
- (************************************************************)
-
- CONSTRUCTOR tmWindow.Init (aParent : pWindowsObject; aTitle: PChar);
- BEGIN
- tWindow.Init(aParent,aTitle);
- Attr.w := GetSystemMetrics(sm_CXScreen);
- Attr.h := GetSystemMetrics(sm_CYScreen)-2*GetSystemMetrics(sm_CYIcon);
- Attr.x := 0;
- Attr.y := 0;
- Attr.Style := ws_OverlappedWindow OR ws_ClipChildren;
- Attr.Menu := LoadMenu(hInstance,'MAIN_MENU');
- END;
-
- PROCEDURE tmWindow.SetupWindow;
- VAR i : INTEGER;
- BEGIN
- tWindow.SetupWindow;
- (* Symbolleiste *)
- sBar :=pSymBar(Application^.MakeWindow(
- New(pSymBar, Init(@Self,29))));
- TB1:= pToolBox(Application^.MakeWindow(
- New(pToolBox, Init(@Self,'Werkzeuge',tbid_1,40,80,3,2,
- 28,28,28,22,tbs_Caption OR tbs_MultiSel))));
- FOR i := 0 TO 5 DO TB1^.InsertPanel(i,tbid_1+i);
- END;
-
- PROCEDURE tmWindow.wmSize (VAR Msg: tMessage);
- (* Anpassen der Symbolleiste *)
- BEGIN
- tWindow.wmSize(Msg);
- (* Symbolleiste anpassen *)
- sBar^.SetSize;
- END;
-
- PROCEDURE tmWindow.idmInsert (VAR Msg: tMessage);
- (* Neue Panels in die Symbolleiste einfⁿgen *)
- BEGIN
- sBar^.TB1^.InsertPanel(8,tbid_4);
- sBar^.TB1^.InsertPanel(9,tbid_4);
- END;
-
- PROCEDURE tmWindow.idmDelete (VAR Msg: tMessage);
- (* Panels aus Symbolleiste l÷schen *)
- BEGIN
- sBar^.TB1^.SetPanel(8,0);
- sBar^.TB1^.SetPanel(9,0);
- END;
-
- PROCEDURE tmWindow.Display (s: PChar);
- (* Zentrierten String ausgeben. Einfachst! *)
- VAR
- r : tRect;
- DC: HDC;
- BEGIN
- InvalidateRect(hWindow,NIL,TRUE);
- UpdateWindow(hWindow);
- GetClientRect(hWindow,r);
- OffsetRect(r,-r.Left,-r.Top);
- DC := GetDC(hWindow);
- SetTextAlign(DC,ta_Center);
- TextOut(DC,r.Right DIV 2, r.Bottom DIV 2,s,StrLen(s));
- ReleaseDC(hWindow,DC);
- END;
-
- PROCEDURE tmWindow.HandleTB1 (VAR Msg: tMessage);
- (* Reagiert auf die Nachrichten des TB-Windows *)
- BEGIN
- IF Msg.wParam = tbm_Select THEN BEGIN
- CASE Msg.lParamHi OF
- 0 : Display('Kreis selektiert');
- 1 : Display('Rechteck selektiert');
- 2 : Display('Linie selektiert');
- 3 : Display('Winkel selektiert');
- 4 : Display('Farbrolle selektiert');
- 5 : Display('Zoom selektiert');
- END;
- END ELSE BEGIN
- CASE Msg.lParamHi OF
- 0: Display('Kreis deselektiert');
- 1: Display('Rechteck deselektiert');
- 2: Display('Linie deselektiert');
- 3: Display('Winkel deselektiert');
- 4: Display('Farbrolle deselektiert');
- 5: Display('Zoom deselektiert');
- END;
- END;
- END;
-
-
- (************************************************************)
- (* tMyApplication *)
- (************************************************************)
- PROCEDURE TMyApplication.InitMainWindow;
- BEGIN
- MainWindow := New(pmWindow, Init(NIL, AppName));
- END;
-
- VAR
- MyApp: TMyApplication;
-
- BEGIN
- MyApp.Init(AppName);
- MyApp.Run;
- MyApp.Done;
- END.
-
- (*------------------------------------------------------------*)
- (* Ende von TBAPP.PAS *)
-