[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]