![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
О запуске копии формы [D7, XP]
Serg1968 © (2007-05-31 14:36:00)На главной форме кнопка--при нажатии на нее должно открываться еще одно окно(не модальное).Сейчас при каждом нажатии открывается опять окно и так бесконечно.Как сделать чтобы после открывания окна принажатии другие окна не копировались.Спасибо
Serg1968 (2007-05-31 16:43:00) [1]
> Ждет тебя "большая засада"
</IПочему?>
Serg1968 (2007-05-31 15:45:00) [2]Огромное спасибо.Все работает отлично.
Сергей М. (2007-05-31 15:45:00) [3]
> Serg1968 © (31.05.07 15:40) [6]
Ждет тебя "большая засада"
Serg1968 (2007-05-31 15:40:00) [4]Спасибо большое.Все работает отлично.То что надо.
default (2007-05-31 15:08:00) [5]проще вообще не создавать:)
от задачи зависит, вводить ли флаг(например, он ещё где-то использоваться будет), создавать-ли форму один раз или каждый раз при нажатии и тд и тп
Palladin (2007-05-31 15:03:00) [6]проще единожды его создать и проверять на Visible
Джо (2007-05-31 14:58:00) [7]> [0] Serg1968 © (31.05.07 14:36)
> На главной форме кнопка--при нажатии на нее должно открываться
> еще одно окно(не модальное).Сейчас при каждом нажатии открывается
> опять окно и так бесконечно.Как сделать чтобы после открывания
> окна принажатии другие окна не копировались.Спасибо
Вар. 1.
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
FChildCreated: Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if not FChildCreated then
begin
TForm2.Create(Application).Show;
FChildCreated := True;
end;
end;
Вар. 2 (расширенный предыдущий).
procedure TForm1.Button1Click(Sender: TObject);
begin
if not ChildCreated then
begin
TForm2.Create(Application).Show;
ChildCreated := True
end;
end;
===
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
public
end;
var
ChildCreated: Boolean = False;
implementation
{$R *.dfm}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ChildCreated := False
end;
Вар. 3.
function FormExists (FormClass: TFormClass): Boolean;
var
I: Integer;
begin
Result := False;
for I := 0 to Screen.FormCount-1 do
if Screen.Forms[I] is FormClass then
begin
Result := True;
Break
end
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not FormExists(TForm2) then
TForm2.Create(Application).Show;
end;
===
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree
end;
В общем, вариантов масса, выбирай, исходя из задачи.
Savek (2007-05-31 14:50:00) [8]Создавай таким образом
if not Assigned(SecondForm) then SecondForm:=TSecondForm.Create(Self);
SecondForm.Show;
Palladin (2007-05-31 14:39:00) [9]Надо дать программе знать что форма уже открыта