home *** CD-ROM | disk | FTP | other *** search
- (*$A+,B-,D+,F-,G+,I+,L+,N-,R+,S+,V+,W-,X+*)
- (*$M 8192,8192}
- (*--------------------------------------------------------*)
- (* TBDEMO.PAS *)
- (* Copyright 1992 Mario M. Westphal & DMV-Verlag *)
- (* Demoprogramm fⁿr TBWIN.PAS *)
- (* Compiler: Turbo Pascal für Windows 1.0 *)
- (*--------------------------------------------------------*)
-
- PROGRAM DOStxDemo;
- (*$R TBDEMO.RES*)
- USES
- WinTypes, WinProcs, WObjects, Strings, TBWin;
-
- CONST
- AppName : PChar = 'DOS toolBox-TestApp';
-
- (* Toolbox-IDs *)
- tbid_1 = 10001;
- tbid_2 = 4001;
- tbid_3 = 10101;
- tbid_4 = 15001;
-
- (* Menⁿ-ID's *)
- idm_Deactivate = 101;
- idm_Activate = 102;
- idm_Delete = 104;
- idm_Insert = 105;
- idm_About = 201;
-
- TYPE
- pSymBar = ^tSymBar;
- tSymBar = OBJECT(tToolBar)
- TB1 : pToolBox;
- CB1 : pComboBox;
- B1 : pButton;
- S1 : pStatic;
- PROCEDURE SetupWindow; VIRTUAL;
- PROCEDURE HandleTB2(VAR Msg: tMessage);
- VIRTUAL wm_First + wm_User + tbid_2;
- PROCEDURE WMCtlColor(VAR Msg: tMessage);
- VIRTUAL wm_First + wm_CtlColor;
- PROCEDURE wmLButtonDblClk(VAR Msg: tMessage);
- VIRTUAL wm_First + wm_LButtonDblClk;
- END;
-
- TYPE
- (* Zentrierte Dialoge *)
- pCtrDialog = ^tCtrDialog;
- tCtrDialog = OBJECT(tDialog)
- PROCEDURE SetupWindow; VIRTUAL;
- END;
-
- TYPE
- pmWindow = ^tmWindow;
- tmWindow = OBJECT(tWindow)
- hTB : ARRAY[0..2] OF pToolBox;
- sBar : pSymBar;
- CONSTRUCTOR Init(aParent: pWindowsObject;
- aTitle : PChar);
- PROCEDURE SetupWindow; VIRTUAL;
- PROCEDURE Paint(PaintDC: HDC;
- VAR PaintInfo: tPaintStruct); VIRTUAL;
- PROCEDURE WMSize(VAR Msg: tMessage);
- VIRTUAL wm_First + wm_Size;
- PROCEDURE HandleTB_1(VAR Msg: tMessage);
- VIRTUAL wm_First + wm_User + tbid_1;
- PROCEDURE HandleTB_3(VAR Msg: tMessage);
- VIRTUAL wm_First + wm_User + tbid_3;
- (* Menⁿ-Handler *)
- PROCEDURE IDMDeactivate(VAR Msg: tMessage);
- VIRTUAL cm_First + idm_Deactivate;
- PROCEDURE idmActivate(VAR Msg: tMessage);
- VIRTUAL cm_First + idm_Activate;
- PROCEDURE idmDelete(VAR Msg: tMessage);
- VIRTUAL cm_First + idm_Delete;
- PROCEDURE idmInsert(VAR Msg: tMessage);
- VIRTUAL cm_First + idm_Insert;
- PROCEDURE idmAbout(VAR Msg: tMessage);
- VIRTUAL cm_First + idm_About;
- END;
-
- TYPE
- tMyApplication = OBJECT(tApplication)
- PROCEDURE InitMainWindow; VIRTUAL;
- END;
-
-
- (**********************************************************)
- (* tSymBar *)
- (**********************************************************)
-
- PROCEDURE tSymBar.SetupWindow;
- VAR y : INTEGER;
- r : tRect;
- BEGIN
- tToolBar.SetupWindow;
- GetClientRect(hWindow, r);
- SetBarBreak( 5 * 24 + 17, TRUE);
- SetBarBreak(14 * 24 + 8, TRUE);
- (* Buttons fⁿr die Auswahl des Schriftattribute *)
- TB1 := pToolBox(Application^.MakeWindow(
- New(pToolBox, Init(@Self, '', tbid_2, 8, 3, 5, 1,
- 24, 22, 24, 22, tbs_MultiSel))));
- FOR y := 0 TO 5 DO TB1^.InsertPanel(y, tbid_2 + y);
- TB1^.SetPanelState(1, tb_Selected);
-
- (* Position der ComboBox ist abhΣngig von ihrer H÷he *)
- y := (r.Bottom - (cyDBU * 12 DIV 8)) DIV 2;
- CB1 := pComboBox(Application^.MakeWindow(
- New(pComboBox, Init(@Self, 333, 148, y, 120, 120,
- cbs_DropDown,50))));
- CB1^.AddString('Times');
- CB1^.AddString('Helvetica');
- CB1^.AddString('Roman');
-
- B1 := pButton(Application^.MakeWindow(
- New(pButton, Init(@Self, 334, 'Push!', 275, y,
- 60, cyDBU * 12 DIV 8, FALSE))));
- y := (r.Bottom - cyDBU) DIV 2;
- S1 := pStatic(Application^.MakeWindow(New(pStatic,
- Init(@Self, 335, '[1]Panel 0 selektiert', 360,
- y, 260, cyDBU, 50))));
- END;
-
- PROCEDURE tSymBar.WMCtlColor(VAR Msg: tMessage);
- (*--------------------------------------------------------*)
- (* Die Kontroll-Elemente in der Symbolleiste mⁿssen die *)
- (* selbe Hintergrundfarbe wie die Symbolleiste haben. *)
- (* Dazu wird der Hintergund-Pinsel der Symbolleiste auch *)
- (* fⁿr diese Elemente verwendet. *)
- BEGIN
- SetBkColor(Msg.wParam, color_TBFace);
- UnrealizeObject(BkBrush);
- SetBrushOrg(Msg.wParam, 0, 0);
- Msg.Result := BkBrush;
- END;
-
- PROCEDURE tSymBar.HandleTB2(VAR Msg: tMessage);
- (*--------------------------------------------------------*)
- (* Behandelt die Nachrichten des TB-Windows in der *)
- (* Symbolleiste. *)
-
- VAR
- i : INTEGER;
- BEGIN
- IF Msg.wParam = tbm_Select THEN BEGIN (* Selektiert *)
- CASE Msg.lParamHi OF
- 0: BEGIN
- FOR i := 2 TO 4 DO
- TB1^.SetPanelState (i, tb_Selected);
- TB1^.SetPanelState (1, tb_Normal);
- END;
- 1: FOR i := 2 TO 4 DO
- TB1^.SetPanelState (i, tb_Normal);
- 2, 3,
- 4: TB1^.SetPanelState (1, tb_Normal);
- END;
- END ELSE BEGIN (* Deselektiert *)
- CASE Msg.lParamHi OF
- 0: BEGIN
- FOR i := 2 TO 4 DO
- TB1^.SetPanelState (i, tb_Normal);
- TB1^.SetPanelState (1, tb_Selected);
- END;
- 1: TB1^.SetPanelState (1, tb_Selected);
- 2, 3,
- 4: BEGIN
- IF (TB1^.GetPanelState(2) = tb_Normal) AND
- (TB1^.GetPanelState(3) = tb_Normal) AND
- (TB1^.GetPanelState(4) = tb_Normal)
- THEN TB1^.SetPanelState (1, tb_Selected);
- END;
- END;
- END;
- END;
-
- PROCEDURE tSymBar.wmLButtonDblClk(VAR Msg: tMessage);
- (*--------------------------------------------------------*)
- (* An dieser Stelle kann auf einen Doppelklick auf die *)
- (* Symbolleite reagiert werden. *)
-
- BEGIN
- MessageBox(hWindow, 'Doppelklick wurde registriert!',
- 'Symbolleiste', mb_Ok);
- END;
-
-
- (**********************************************************)
- (* tCtrDialog - Zentrierter Dialog *)
- (**********************************************************)
- PROCEDURE tCtrDialog.SetupWindow;
- VAR
- r : tRect;
- BEGIN
- tDialog.SetupWindow;
- GetWindowRect(hWindow, r);
- OffsetRect(r, -r.Left, -r.Top);
- SetWindowPos(hWindow, 0, (GetSystemMetrics(sm_CXScreen) -
- r.Right) DIV 2, (GetSystemMetrics(sm_CYScreen) -
- r.Bottom) DIV 2, 0, 0, swp_NoSize);
- 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, 'MAINMENU');
- END;
-
- PROCEDURE tmWindow.SetupWindow;
- (*--------------------------------------------------------*)
- (* Symbolleiste und TB-Menⁿ erzeugen *)
- VAR
- Menu: hMenu;
- i : INTEGER;
- BEGIN
- tWindow.SetupWindow;
- (* Symbolleiste *)
- sBar := pSymBar(Application^.MakeWindow(
- New(pSymBar, Init(@Self, 29))));
-
- (* Zwei Toolbox-Windows *)
- hTB[0] := pToolBox(Application^.MakeWindow(New(pToolBox,
- Init(@Self, 'Single', tbid_1, Attr.W - 100, 40,
- 2, 3, 28, 28, 28, 22, tbs_Caption))));
- FOR i := 0 TO 5 DO hTB[0]^.InsertPanel(i, tbid_1 + i);
-
- hTB[1] := pToolBox(Application^.MakeWindow(New(pToolBox,
- Init(@Self, 'Multiple', tbid_3, Attr.W - 100,
- 160, 3, 2, 28, 28, 28, 22,
- tbs_Caption OR tbs_MultiSel))));
- FOR i := 0 TO 5 DO hTB[1]^.InsertPanel(i, tbid_3 + i);
- Menu := GetMenu(hWindow);
- EnableMenuItem(Menu, idm_Insert, mf_Grayed);
- EnableMenuItem(Menu, idm_Activate, mf_Grayed);
- END;
-
- PROCEDURE tmWindow.WMSize(VAR Msg: tMessage);
- (*--------------------------------------------------------*)
- (* In dieser Methode mu▀ auch die Gr÷▀e der Symbolleiste *)
- (* angepa▀t werden. *)
- BEGIN
- tWindow.WMSize(Msg);
- (* Symbolleiste anpassen *)
- sBar^.SetSize;
- (* Die beweglichen Toolbox-Fenster justieren *)
- hTB[0]^.TBAdjust;
- hTB[1]^.TBAdjust;
- END;
-
- PROCEDURE tmWindow.Paint(PaintDC: HDC;
- VAR PaintInfo: tPaintStruct);
- VAR
- s : ARRAY[0..100] OF CHAR;
- tm : tTextMetric;
- x, y: INTEGER;
- BEGIN
- tWindow.Paint(PaintDC, PaintInfo);
- (* Unterhalb der Menⁿzeile *)
- SetWindowOrg(PaintDC, 0, -29);
- GetTextMetrics(PaintDC, tm);
- X := tm.tmAveCharWidth;
- y := tm.tmHeight;
- StrCopy(s,
- 'Zwei neue Objekte fⁿr Turbo Pascal fⁿr Windows...');
- TextOut(PaintDC, x, 0, s, StrLen(s));
- StrCopy(s, 'tToolBar: Symbolleiste');
- TextOut(PaintDC, x, y, s, StrLen(s));
- StrCopy(s,
- 'tToolbox: Frei bewegliche Bitmap-Menⁿs (Smart-Icons)');
- TextOut(PaintDC, X, 2 * y, s, StrLen(s));
- END;
-
- PROCEDURE tmWindow.HandleTB_1(VAR Msg: tMessage);
- (*--------------------------------------------------------*)
- (* Behandelt Nachrichten des 1. TB-Windows. *)
- VAR
- s : ARRAY[0..50] OF CHAR;
- BEGIN
- CASE Msg.lParamHi OF
- 0 : StrCopy(s, '[1] Panel 0');
- 1 : StrCopy(s, '[1] Panel 1');
- 2 : StrCopy(s, '[1] Panel 2');
- 3 : StrCopy(s, '[1] Panel 3');
- 4 : StrCopy(s, '[1] Panel 4');
- 5 : StrCopy(s, '[1] Panel 5');
- END;
- IF Msg.wParam = tbm_Select THEN
- StrCat(s, ' selektiert')
- ELSE
- StrCat(s, ' deselektiert');
- sBar^.S1^.SetText(s);
- END;
-
- PROCEDURE tmWindow.HandleTB_3(VAR Msg: tMessage);
- (*--------------------------------------------------------*)
- (* Behandelt Nachrichten des 2. TB-Windows. *)
- VAR
- s : ARRAY[0..50] OF CHAR;
- BEGIN
- CASE Msg.lParamHi OF
- 0 : StrCopy(s, '[2] Panel 0');
- 1 : StrCopy(s, '[2] Panel 1');
- 2 : StrCopy(s, '[2] Panel 2');
- 3 : StrCopy(s, '[2] Panel 3');
- 4 : StrCopy(s, '[2] Panel 4');
- 5 : StrCopy(s, '[2] Panel 5');
- END;
- IF Msg.wParam = tbm_Select THEN
- StrCat(s, ' selektiert')
- ELSE
- StrCat(s, ' deselektiert');
- sBar^.S1^.SetText(s);
- END;
-
- PROCEDURE tmWindow.IDMDeactivate(VAR Msg: tMessage);
- VAR
- Menu: hMenu;
- BEGIN
- hTB[0]^.SetPanelState(5, tb_Disabled);
- hTB[1]^.SetPanelState(4, tb_Disabled);
- Menu := GetMenu(hWindow);
- EnableMenuItem(Menu, idm_Deactivate, mf_Grayed);
- EnableMenuItem(Menu, idm_Activate, mf_Enabled);
- END;
-
- PROCEDURE tmWindow.idmActivate(VAR Msg: tMessage);
- VAR
- Menu: hMenu;
- BEGIN
- hTB[0]^.SetPanelState(5, tb_Normal);
- hTB[1]^.SetPanelState(4, tb_Normal);
- Menu := GetMenu(hWindow);
- EnableMenuItem(Menu, idm_Deactivate, mf_Enabled);
- EnableMenuItem(Menu, idm_Activate, mf_Grayed);
- END;
-
- PROCEDURE tmWindow.idmDelete(VAR Msg: tMessage);
- VAR Menu : hMenu;
- BEGIN
- hTB[0]^.SetPanel(1, 1);
- hTB[0]^.SetPanel(2, 1);
- hTB[0]^.SetPanel(4, 1);
- Menu := GetMenu(hWindow);
- EnableMenuItem(Menu, idm_Delete, mf_Grayed);
- EnableMenuItem(Menu, idm_Insert, mf_Enabled);
- END;
-
- PROCEDURE tmWindow.idmInsert(VAR Msg: tMessage);
- VAR Menu : hMenu;
- BEGIN
- hTB[0]^.SetPanel(1, tbid_3);
- hTB[0]^.SetPanel(2, tbid_3 + 1);
- hTB[0]^.SetPanel(4, tbid_3 + 2);
- Menu := GetMenu(hWindow);
- EnableMenuItem(Menu, idm_Insert, mf_Grayed);
- EnableMenuItem(Menu, idm_Delete, mf_Enabled);
- END;
-
- PROCEDURE tmWindow.idmAbout(VAR Msg: tMessage);
- BEGIN
- Application^.ExecDialog(New(pCtrDialog,
- Init(@Self, 'DLG_ABOUT')));
- 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 TBDEMO.PAS *)
-