[Back to OOP SWAG index] [Back to Main SWAG index] [Original]

    {
         I'm still rather new (hence unexperienced) to this development
    environment. Since the number of users of the Pascal For Windows product
    is very limited in Belgium, I have little opportUnity to exchange ideas
    and talk about problems. ThereFore, I dare to ask the following question
    directly on the US-BBS.

         I contacted Borland Belgium With the following question:
    Is it possible to create an MDI-Interface, which consists of TDlgWindow's
    (Even of different Types of DialogWindows).
    The Program printed below was their answer. However, possibly because of
    my limited experience in the field, this Program does not seem to work on
    my Computer running the Borland Pascal 7.0 .

         Could someone explain why the Program below does not create dialog-
    Windows as MDI client Windows of the main MDI Window (when I select the
    "create"-menu element), but instead only normal client Windows.
    }

    {********************************************************}
    {   MDI - Programm of TDlgWindow - ChildWindows          }
    {                                                        }
    {   This is an adapted version of the Borland demo       }
    {   Programm  MDIAPP.PAS of Borland Pascal 7.0           }
    {********************************************************}
    Program MDI;
    {$R MDIAPP.RES}
    Uses
      WinTypes, WinProcs, Strings, OWindows, ODialogs;

    Type
      { Define a TApplication descendant }
      TMDIApp = Object(TApplication)
        Procedure InitMainWindow; Virtual;
      end;

      PMyMDIChild = ^TMyMDIChild;
      TMyMDIChild = Object(TDlgWindow)
        Num : Integer;
        CanCloseCheckBox : PCheckBox;
        Constructor Init(AParent: PWindowsObject; AName: PChar);
        Procedure SetupWindow; Virtual;
        Function CanClose: Boolean; Virtual;
      end;

      PMyMDIWindow = ^TMyMDIWindow;
      TMyMDIWindow = Object(TMDIWindow)
        Procedure SetupWindow; Virtual;
        Function CreateChild: PWindowsObject; Virtual;
      end;

      {**********************  MDI Child  ************************}
      Constructor TMyMDIChild.Init(AParent: PWindowsObject; AName: PChar);
      begin
        inherited Init(AParent, AName);
        New(CanCloseCheckBox, Init(@Self, 102, 'Can Close',
                                   10, 10, 200, 20, nil));
      end;

      Procedure TMyMDIChild.SetupWindow;
      begin
        inherited SetupWindow;
        CanCloseCheckBox^.Check;
        ShowWindow(HWindow, CmdShow);
      end;

      Function TMyMDIChild.CanClose;
      begin
        CanClose := CanCloseCheckBox^.GetCheck = bf_Checked;
      end;

      {*****************  MDI Window  ******************}
      Procedure TMyMDIWindow.SetupWindow;
      Var
        NewChild : PMyMDIChild;
      begin
        inherited SetupWindow;
        CreateChild;
      end;

      Function TMyMDIWindow.CreateChild: PWindowsObject;
      begin
        CreateChild := Application^.MakeWindow(New(PMyMDIChild,
                                               Init(@Self, PChar(1))));
      end;

    Procedure TMDIApp.InitMainWindow;
    begin
      MainWindow := New(PMDIWindow, Init('MDI ConFormist',
                                    LoadMenu(HInstance, 'MDIMenu')));
    end;

    Var
      MDIApp: TMDIApp;

    { Run the MDIApp }
    begin
      MDIApp.Init('MDIApp');
      MDIApp.Run;
      MDIApp.Done;
    end.

    {
    ***************************************************************************
                     Content of the MDIAPP.RES File
    ***************************************************************************
    }
    MDIMENU MENU
    begin
            POPUP "&MDI Children"
            begin
                    MENUITEM "C&reate", 24339
                    MENUITEM "&Cascade", 24337
                    MENUITEM "&Tile", 24336
                    MENUITEM "Arrange &Icons", 24335
                    MENUITEM "C&lose All", 24338
            end
    end

    1 DIALOG 18, 18, 142, 92
    STYLE DS_SYSMODAL | WS_CHILD | WS_VISIBLE | WS_CAPTION |
                        WS_MinIMIZEBOX | WS_MAXIMIZEBOX
    CLASS "BorDlg"
    CAPTION "TEST"
    begin
            CHECKBOX "Text", 101, 26, 25, 28, 12
            LText "Text", -1, 34, 48, 16, 8
            CONTROL "Text", 102, "BorStatic", 0 | WS_CHILD |
                                                  WS_VISIBLE, 33, 70, 66, 8
    END

[Back to OOP SWAG index] [Back to Main SWAG index] [Original]