Главная страница
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.019 c
1-1177355137
kull
2007-04-23 23:05
2007.06.24
Как преобразовать строку в дату?


2-1180700653
ANB
2007-06-01 16:24
2007.06.24
Изменение CommandText у ClientDataSet


11-1162502592
SKA1997
2006-11-03 00:23
2007.06.24
function WndProc override


2-1180815045
sentinel112
2007-06-03 00:10
2007.06.24
Delphi+Mathcad


2-1179403094
kubatura
2007-05-17 15:58
2007.06.24
игнорирование регистра в запросе