Форум: "Начинающим";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
ВнизО запуске копии формы Найти похожие ветки
← →
Serg1968 © (2007-05-31 14:36) [0]На главной форме кнопка--при нажатии на нее должно открываться еще одно окно(не модальное).Сейчас при каждом нажатии открывается опять окно и так бесконечно.Как сделать чтобы после открывания окна принажатии другие окна не копировались.Спасибо
← →
Palladin © (2007-05-31 14:39) [1]Надо дать программе знать что форма уже открыта
← →
Savek (2007-05-31 14:50) [2]Создавай таким образом
if not Assigned(SecondForm) then SecondForm:=TSecondForm.Create(Self);
SecondForm.Show;
← →
Джо © (2007-05-31 14:58) [3]> [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;
В общем, вариантов масса, выбирай, исходя из задачи.
← →
Palladin © (2007-05-31 15:03) [4]проще единожды его создать и проверять на Visible
← →
default © (2007-05-31 15:08) [5]проще вообще не создавать:)
от задачи зависит, вводить ли флаг(например, он ещё где-то использоваться будет), создавать-ли форму один раз или каждый раз при нажатии и тд и тп
← →
Serg1968 © (2007-05-31 15:40) [6]Спасибо большое.Все работает отлично.То что надо.
← →
Serg1968 © (2007-05-31 15:45) [7]Огромное спасибо.Все работает отлично.
← →
Сергей М. © (2007-05-31 15:45) [8]
> Serg1968 © (31.05.07 15:40) [6]
Ждет тебя "большая засада"
← →
Serg1968 © (2007-05-31 16:43) [9]
> Ждет тебя "большая засада"
</IПочему?>
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c