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.