Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.24;
Скачать: CL | DM;

Вниз

О запуске копии формы   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1180100113
oldman
2007-05-25 17:35
2007.06.24
Кстати, сегодня День Освобождения Африки....


11-1163684495
D[u]fa
2006-11-16 16:41
2007.06.24
CheckBox FontColor


15-1180025838
Витян
2007-05-24 20:57
2007.06.24
Зачем мне нужна электронная почта??


8-1160000268
Владимир
2006-10-05 02:17
2007.06.24
Слайдшоу на DVD


15-1180070267
Knight
2007-05-25 09:17
2007.06.24
Почтовый сервис в организации...