SRL Archive - Help and Support

Multiple forms


mixster

2008-04-08 08:38:45

I've been trying to get multiple forms working alongside each other, however I've been having problems with it - mainly that only the latest form to open can be selected. I'm hoping someone may have a way around this, but anyway, I've got my test form underneath that works at the moment, with the Toggle button displaying the second form.

program MultipleFormTest;

var
frmFirst, frmSecond: TForm;
btnToggle: TButton;
displayed: Boolean;

procedure ShowFormTwo; forward;
procedure SafeShowFormTwoModal; forward;

procedure Toggle(Sender: TObject);
begin
if displayed then
frmSecond.ModalResult := mrOk
else
SafeShowFormTwoModal;
end;

procedure InitForm;
begin
frmFirst := CreateForm;
frmFirst.Left := 200;
frmFirst.Top := 200;
frmFirst.Width := 200;
frmFirst.Height := 200;
frmFirst.Caption := 'Multiple Form Test';
frmFirst.Color := clBtnFace;
frmFirst.Font.Color := clWindowText;
frmFirst.Font.Height := -11;
frmFirst.Font.Name := 'MS Sans Serif';
frmFirst.Font.Style := [];
frmFirst.Visible := False;
frmFirst.PixelsPerInch := 96;

frmSecond := CreateForm;
frmSecond.Left := 450;
frmSecond.Top := 250;
frmSecond.Width := 100;
frmSecond.Height := 100;
frmSecond.Caption := 'Second ''Pop-up'' Form';
frmSecond.Color := clBtnFace;
frmSecond.Font.Color := clWindowText;
frmSecond.Font.Height := -11;
frmSecond.Font.Name := 'MS Sans Serif';
frmSecond.Font.Style := [];
frmSecond.Visible := False;
frmSecond.PixelsPerInch := 96;

btnToggle := TButton.Create(frmFirst);
btnToggle.Parent := frmFirst;
btnToggle.Caption := 'Toggle';
btnToggle.Left := 75;
btnToggle.Top := 75;
btnToggle.Width := 50;
btnToggle.Height := 50;
btnToggle.TabOrder := 0;
btnToggle.OnClick := @Toggle;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('InitForm', v);
end;

procedure ShowFormOne;
begin
frmFirst.ShowModal;
end;

procedure ShowFormTwo;
begin
frmSecond.ShowModal;
end;

procedure SafeShowFormOneModal;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('ShowFormOne', v);
end;

procedure SafeShowFormTwoModal;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('ShowFormTwo', v);
end;

begin
SafeInitForm;
SafeShowFormOneModal;
end.

EvilChicken!

2008-04-08 09:53:06

var
Displayed: Boolean;
frmFirst, frmSecond: TForm;
btnToggle: TButton;

procedure SafeInitForm;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('InitForm', v);
end;

procedure ShowFormOne;
begin
frmFirst.ShowModal;
end;

procedure ShowFormTwo;
begin
frmSecond.ShowModal;
end;

procedure SafeShowFormOneModal;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('ShowFormOne', v);
end;

procedure SafeShowFormTwoModal;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('ShowFormTwo', v);
end;

procedure Toggle(Sender: TObject);
begin
if displayed then
frmSecond.ModalResult := mrOk
else
SafeShowFormTwoModal;
end;

procedure InitForm;
begin
frmFirst := CreateForm;
frmFirst.Left := 200;
frmFirst.Top := 200;
frmFirst.Width := 200;
frmFirst.Height := 200;
frmFirst.Caption := 'Multiple Form Test';
frmFirst.Color := clBtnFace;
frmFirst.Font.Color := clWindowText;
frmFirst.Font.Height := -11;
frmFirst.Font.Name := 'MS Sans Serif';
frmFirst.Font.Style := [];
frmFirst.Visible := False;
frmFirst.PixelsPerInch := 96;

frmSecond := CreateForm;
frmSecond.Left := 450;
frmSecond.Top := 250;
frmSecond.Width := 100;
frmSecond.Height := 100;
frmSecond.Caption := 'Second ''Pop-up'' Form';
frmSecond.Color := clBtnFace;
frmSecond.Font.Color := clWindowText;
frmSecond.Font.Height := -11;
frmSecond.Font.Name := 'MS Sans Serif';
frmSecond.Font.Style := [];
frmSecond.Visible := False;
frmSecond.PixelsPerInch := 96;

btnToggle := TButton.Create(frmFirst);
btnToggle.Parent := frmFirst;
btnToggle.Caption := 'Toggle';
btnToggle.Left := 75;
btnToggle.Top := 75;
btnToggle.Width := 50;
btnToggle.Height := 50;
btnToggle.TabOrder := 0;
btnToggle.OnClick := @Toggle;
end;

begin
SafeInitForm;
SafeShowFormOneModal;
end.

Fixed, enjoy.

By the waym would reccomend you to use Ron's DFM parser, look in your scar folder somewhere.

mastaraymond

2008-04-08 10:55:18

From: EvilChicken!
var
Displayed: Boolean;
frmFirst, frmSecond: TForm;
btnToggle: TButton;

procedure SafeInitForm;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('InitForm', v);
end;

procedure ShowFormOne;
begin
frmFirst.ShowModal;
end;

procedure ShowFormTwo;
begin
frmSecond.ShowModal;
end;

procedure SafeShowFormOneModal;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('ShowFormOne', v);
end;

procedure SafeShowFormTwoModal;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('ShowFormTwo', v);
end;

procedure Toggle(Sender: TObject);
begin
if displayed then
frmSecond.ModalResult := mrOk
else
SafeShowFormTwoModal;
end;

procedure InitForm;
begin
frmFirst := CreateForm;
frmFirst.Left := 200;
frmFirst.Top := 200;
frmFirst.Width := 200;
frmFirst.Height := 200;
frmFirst.Caption := 'Multiple Form Test';
frmFirst.Color := clBtnFace;
frmFirst.Font.Color := clWindowText;
frmFirst.Font.Height := -11;
frmFirst.Font.Name := 'MS Sans Serif';
frmFirst.Font.Style := [];
frmFirst.Visible := False;
frmFirst.PixelsPerInch := 96;

frmSecond := CreateForm;
frmSecond.Left := 450;
frmSecond.Top := 250;
frmSecond.Width := 100;
frmSecond.Height := 100;
frmSecond.Caption := 'Second ''Pop-up'' Form';
frmSecond.Color := clBtnFace;
frmSecond.Font.Color := clWindowText;
frmSecond.Font.Height := -11;
frmSecond.Font.Name := 'MS Sans Serif';
frmSecond.Font.Style := [];
frmSecond.Visible := False;
frmSecond.PixelsPerInch := 96;

btnToggle := TButton.Create(frmFirst);
btnToggle.Parent := frmFirst;
btnToggle.Caption := 'Toggle';
btnToggle.Left := 75;
btnToggle.Top := 75;
btnToggle.Width := 50;
btnToggle.Height := 50;
btnToggle.TabOrder := 0;
btnToggle.OnClick := @Toggle;
end;

begin
SafeInitForm;
SafeShowFormOneModal;
end.

Fixed, enjoy.

By the waym would reccomend you to use Ron's DFM parser, look in your scar folder somewhere.

I guess you mean this?..

var
Displayed: Boolean;
frmFirst, frmSecond: TForm;
btnToggle: TButton;

procedure SafeInitForm;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('InitForm', v);
end;

procedure ShowFormOne;
begin
frmFirst.ShowModal;
end;

procedure ShowFormTwo;
begin
frmSecond.Show;
end;

procedure SafeShowFormOneModal;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('ShowFormOne', v);
end;

procedure SafeShowFormTwoModal;
var
v: TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('ShowFormTwo', v);
end;

procedure Toggle(Sender: TObject);
begin
if displayed then
frmSecond.ModalResult := mrOk
else
SafeShowFormTwoModal;
end;

procedure InitForm;
begin
frmFirst := CreateForm;
frmFirst.Left := 200;
frmFirst.Top := 200;
frmFirst.Width := 200;
frmFirst.Height := 200;
frmFirst.Caption := 'Multiple Form Test';
frmFirst.Color := clBtnFace;
frmFirst.Font.Color := clWindowText;
frmFirst.Font.Height := -11;
frmFirst.Font.Name := 'MS Sans Serif';
frmFirst.Font.Style := [];
frmFirst.Visible := False;
frmFirst.PixelsPerInch := 96;

frmSecond := CreateForm;
frmSecond.Left := 450;
frmSecond.Top := 250;
frmSecond.Width := 100;
frmSecond.Height := 100;
frmSecond.Caption := 'Second ''Pop-up'' Form';
frmSecond.Color := clBtnFace;
frmSecond.Font.Color := clWindowText;
frmSecond.Font.Height := -11;
frmSecond.Font.Name := 'MS Sans Serif';
frmSecond.Font.Style := [];
frmSecond.Visible := False;
frmSecond.PixelsPerInch := 96;

btnToggle := TButton.Create(frmFirst);
btnToggle.Parent := frmFirst;
btnToggle.Caption := 'Toggle';
btnToggle.Left := 75;
btnToggle.Top := 75;
btnToggle.Width := 50;
btnToggle.Height := 50;
btnToggle.TabOrder := 0;
btnToggle.OnClick := @Toggle;
end;

begin
SafeInitForm;
SafeShowFormOneModal;
end.

mixster

2008-04-08 11:05:37

Thanks it works and I'll look into Ron's DFM parser, though I'm sure it will take a while to find :)