jabita
asked on
trouble forms mdi child
i got an aplication, and it got MDI parent and children, my question is, how can i call into the MDI parent a child form
i've us Tform.create(self) but it doesn't work.
later, how can i close them(children forms).
i've us Tform.create(self) but it doesn't work.
later, how can i close them(children forms).
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Hello again!
Here is a whole project I got together for you....It contains two units ./// a Child.pas and Frame.pas .... The Child.pas is the unit that actually containts the Child Form.... Take a look at them...
//------------------- Frame.pas -------------------//
unit Frame;
interface
uses Windows, Classes, Graphics, Forms, Controls, Child,
Menus, SysUtils;
type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
Window1: TMenuItem;
New1: TMenuItem;
File1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
Cascade1: TMenuItem;
Tile1: TMenuItem;
ArrangeIcons1: TMenuItem;
procedure New1Click(Sender: TObject);
procedure Cascade1Click(Sender: TObject);
procedure Tile1Click(Sender: TObject);
procedure ArrangeIcons1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
Counter: Integer;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.New1Click(Sender : TObject);
var
ChildForm: TChildForm;
begin
Inc (Counter);
ChildForm := TChildForm.Create (self);
ChildForm.Caption := ChildForm.Caption + ' ' +
IntToStr (Counter);
ChildForm.Show;
end;
procedure TMainForm.Cascade1Click(Se nder: TObject);
begin
Cascade;
end;
procedure TMainForm.Tile1Click(Sende r: TObject);
begin
Tile;
end;
procedure TMainForm.ArrangeIcons1Cli ck(Sender: TObject);
begin
ArrangeIcons;
end;
procedure TMainForm.Exit1Click(Sende r: TObject);
begin
Close;
end;
end.
//------------------- Child.pas -------------------//
unit Child;
interface
uses
Windows, Classes, Graphics, Forms,
Controls, Menus, Dialogs, SysUtils;
type
TChildForm = class(TForm)
MainMenu1: TMainMenu;
Circle1: TMenuItem;
FillColor1: TMenuItem;
BorderColor1: TMenuItem;
BorderSize1: TMenuItem;
N1: TMenuItem;
GetPosition1: TMenuItem;
ColorDialog1: TColorDialog;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FillColor1Click(Sender: TObject);
procedure BorderColor1Click(Sender: TObject);
procedure BorderSize1Click(Sender: TObject);
procedure GetPosition1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
XCenter, YCenter: Integer;
BorderSize: Integer;
BorderColor, FillCOlor: TColor;
public
{ Public declarations }
end;
var
ChildForm: TChildForm;
implementation
{$R *.DFM}
procedure TChildForm.FormCreate(Send er: TObject);
begin
XCenter := - 200;
YCenter := - 200;
BorderSize := 1;
BorderColor := clBlack;
FillColor := clYellow;
end;
procedure TChildForm.FormPaint(Sende r: TObject);
begin
Canvas.Pen.Width := BorderSize;
Canvas.Pen.Color := BorderColor;
Canvas.Brush.Color := FillColor;
Canvas.Ellipse (XCenter-30, YCenter-30, XCenter+30, YCenter+30);
end;
procedure TChildForm.FormMouseDown(S ender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
XCenter := X;
YCenter := Y;
Repaint;
end;
procedure TChildForm.FillColor1Click (Sender: TObject);
begin
ColorDialog1.Color := FillColor;
if ColorDialog1.Execute then
begin
FillColor := ColorDialog1.Color;
Repaint;
end;
end;
procedure TChildForm.BorderColor1Cli ck(Sender: TObject);
begin
ColorDialog1.Color := BorderColor;
if ColorDialog1.Execute then
begin
BorderColor := ColorDialog1.Color;
Repaint;
end;
end;
procedure TChildForm.BorderSize1Clic k(Sender: TObject);
var
InputString: string;
begin
InputString := IntToStr (BorderSize);
if InputQuery ('Border', 'Insert width', InputString) then
begin
BorderSize := StrToIntDef (InputString, BorderSize);
Repaint;
end;
end;
procedure TChildForm.GetPosition1Cli ck(Sender: TObject);
begin
MessageDlg ('The center of the circle is in the position (' +
IntToStr (XCenter) + ', ' + IntToStr (YCenter) + ').',
mtInformation, [mbOk], 0);
end;
procedure TChildForm.FormClose(Sende r: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
end.
Hope this helps you!
If you still need some help just say so :)
Cheers,
Viktor
Here is a whole project I got together for you....It contains two units ./// a Child.pas and Frame.pas .... The Child.pas is the unit that actually containts the Child Form.... Take a look at them...
//------------------- Frame.pas -------------------//
unit Frame;
interface
uses Windows, Classes, Graphics, Forms, Controls, Child,
Menus, SysUtils;
type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
Window1: TMenuItem;
New1: TMenuItem;
File1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
Cascade1: TMenuItem;
Tile1: TMenuItem;
ArrangeIcons1: TMenuItem;
procedure New1Click(Sender: TObject);
procedure Cascade1Click(Sender: TObject);
procedure Tile1Click(Sender: TObject);
procedure ArrangeIcons1Click(Sender:
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
Counter: Integer;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.New1Click(Sender
var
ChildForm: TChildForm;
begin
Inc (Counter);
ChildForm := TChildForm.Create (self);
ChildForm.Caption := ChildForm.Caption + ' ' +
IntToStr (Counter);
ChildForm.Show;
end;
procedure TMainForm.Cascade1Click(Se
begin
Cascade;
end;
procedure TMainForm.Tile1Click(Sende
begin
Tile;
end;
procedure TMainForm.ArrangeIcons1Cli
begin
ArrangeIcons;
end;
procedure TMainForm.Exit1Click(Sende
begin
Close;
end;
end.
//------------------- Child.pas -------------------//
unit Child;
interface
uses
Windows, Classes, Graphics, Forms,
Controls, Menus, Dialogs, SysUtils;
type
TChildForm = class(TForm)
MainMenu1: TMainMenu;
Circle1: TMenuItem;
FillColor1: TMenuItem;
BorderColor1: TMenuItem;
BorderSize1: TMenuItem;
N1: TMenuItem;
GetPosition1: TMenuItem;
ColorDialog1: TColorDialog;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FillColor1Click(Sender: TObject);
procedure BorderColor1Click(Sender: TObject);
procedure BorderSize1Click(Sender: TObject);
procedure GetPosition1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
XCenter, YCenter: Integer;
BorderSize: Integer;
BorderColor, FillCOlor: TColor;
public
{ Public declarations }
end;
var
ChildForm: TChildForm;
implementation
{$R *.DFM}
procedure TChildForm.FormCreate(Send
begin
XCenter := - 200;
YCenter := - 200;
BorderSize := 1;
BorderColor := clBlack;
FillColor := clYellow;
end;
procedure TChildForm.FormPaint(Sende
begin
Canvas.Pen.Width := BorderSize;
Canvas.Pen.Color := BorderColor;
Canvas.Brush.Color := FillColor;
Canvas.Ellipse (XCenter-30, YCenter-30, XCenter+30, YCenter+30);
end;
procedure TChildForm.FormMouseDown(S
Shift: TShiftState; X, Y: Integer);
begin
XCenter := X;
YCenter := Y;
Repaint;
end;
procedure TChildForm.FillColor1Click
begin
ColorDialog1.Color := FillColor;
if ColorDialog1.Execute then
begin
FillColor := ColorDialog1.Color;
Repaint;
end;
end;
procedure TChildForm.BorderColor1Cli
begin
ColorDialog1.Color := BorderColor;
if ColorDialog1.Execute then
begin
BorderColor := ColorDialog1.Color;
Repaint;
end;
end;
procedure TChildForm.BorderSize1Clic
var
InputString: string;
begin
InputString := IntToStr (BorderSize);
if InputQuery ('Border', 'Insert width', InputString) then
begin
BorderSize := StrToIntDef (InputString, BorderSize);
Repaint;
end;
end;
procedure TChildForm.GetPosition1Cli
begin
MessageDlg ('The center of the circle is in the position (' +
IntToStr (XCenter) + ', ' + IntToStr (YCenter) + ').',
mtInformation, [mbOk], 0);
end;
procedure TChildForm.FormClose(Sende
begin
Action := caFree;
end;
end.
Hope this helps you!
If you still need some help just say so :)
Cheers,
Viktor
ASKER
when i use run by step it collapse in the instruction TForm1.Create(self), and i dont know why, the compiler just give the direcctions.