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

Вниз

MDI   Найти похожие ветки 

 
BAYES   (2003-09-12 13:51) [0]

Добр. день! Такая проблема, в MDIForm, нажимаю кнопку появлятся MDIChild, еще раз нажимаю еще одно MDIChild,а мне просто необходимо что бы MDIChild появлялось один раз.


 
Jeer ©   (2003-09-12 13:54) [1]

Убивай или запрещай


 
clickmaker ©   (2003-09-12 13:54) [2]

Так это уже не MDIChild по смыслу. Вся фишка то в том, что это MultiDocumentInterface.
А в твоем случае - это обычное окно, с проверкой типа

if Assigned(Form1) and (not Form1.Visible) then
Form1.Show;


 
BAYES   (2003-09-12 14:11) [3]

<clickmaker>
Дело в том что Form1 у меня исключено из автоматически создаваемых, и я ее вызываю
O_Form1:=TForm1.Create(Application), а значит Show возникает после создания. А как запретить Create, после того как уже одна форма создана?


 
DmS   (2003-09-12 14:14) [4]

на кнопке измени .Enable:=False;


 
Плохиш_   (2003-09-12 14:20) [5]

BAYES (12.09.03 14:11) [3]

А проверить перед созданием религия не позволяет?


 
BAYES   (2003-09-12 14:24) [6]

<DmS>
Спасибо, но ента кнопка мне еще нужна, ход хитрый.


 
BAYES   (2003-09-12 14:34) [7]

<Плохиш_>
Думаешь я так не пробовал, не получается.


 
Vlad ©   (2003-09-12 14:49) [8]

>BAYES (12.09.03 14:34) [7]
Плохо пробовал.
На кнопку:
1) проверить, если форма не Nil, то выход.
2) создать форму
3) показать форму
4) .Free
5) =Nil
И еще скажи что так не заработает.


 
DmS   (2003-09-12 15:05) [9]


> проверить, если форма не Nil, то выход

почему она должна быть NIL ?


 
BAYES   (2003-09-12 15:05) [10]

<Vlad>
Вот мой код:
var
O_PRICE:TPRICE;
begin
if PRICE<>Nil then PRICE.Close;
O_PRICE:=TPRICE.Create(Application);
O_PRICE.Show;
O_PRICE.Free;
O_PRICE:=nil;
end;
end.

он не пошет, может не правильно?


 
DmS   (2003-09-12 15:08) [11]

мда ....


 
DmS   (2003-09-12 15:13) [12]


try
Form2.Show;
Form2.Caption:="Заголовок";
except
Application.CreateForm(TForm2, Form2);
Form2.Caption:="Заголовок";
end;


 
BAYES   (2003-09-12 15:24) [13]

<DmS>
Что, мда..
Я же говорю, форма не Auto-create forms, a Avaiblable forms. Значит ее нужно создать а потом творить с ней. А твой код годен для уже созданной форм.


 
DmS   (2003-09-12 15:26) [14]


> Application.CreateForm(TForm2, Form2);

а эта строчка тебе о чем говорит ?


 
BAYES   (2003-09-12 15:49) [15]

<DmS>
Каюсь. Забыл, что под делфя обработку исключений лучше не проводить. ЕХЕ работает, но кнопка показывает форму один раз т.е. после закрытия (Action := caFree), показываться отказывается.


 
clickmaker ©   (2003-09-12 15:50) [16]

> BAYES (12.09.03 15:05) [10]

O_PRICE.Show;
O_PRICE.Free;

Как это?

Я бы еще понял, если б ShowModal...


 
BAYES   (2003-09-12 15:56) [17]

<clickmaker>
O_PRICE.Show;
O_PRICE.Free;
Да я понял, работаю уже на автопилоте, что скажут, то и делаю. думать совершенно не могу. Это называется "Сам породил, сам и убил".


 
DmS   (2003-09-12 16:50) [18]


> но кнопка показывает форму один раз т.е. после закрытия
> (Action := caFree), показываться отказывается


у меня все нормально. убери в теле проекта (.dpr) создание формы (Application.CreateForm(TForm2, Form2);)


 
Плохиш_   (2003-09-12 17:03) [19]

>BAYES (12.09.03 15:49) [15]

Вот, молодец, половину пути уже прошёл :-)
А теперь подсказка: После закрытия формы, как ты описал, указатели на форму не равны nil, а указывают куда-то.


 
BAYES   (2003-09-12 18:26) [20]

<DmS>
У меня из (.dpr) было изначально убрано (Application.CreateForm(TForm2, Form2);
Но опять же показывать после закрытия отказывается.
Может другой метод есть?..


 
AlexSV ©   (2003-09-12 19:00) [21]

> BAYES (12.09.03 18:26) [20]
> Может другой метод есть?..


Не знаю, другой или как, но вот это работает: (Sorry, no comment"s)
---------------------------------------------
program Project1;
uses
Forms,
Unit1 in "Unit1.pas" {Form1},
Unit2 in "Unit2.pas" {Form2};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
---------------------------------------------
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
mmiTest: TMenuItem;
mmiChild: TMenuItem;
procedure mmiChildClick(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.mmiChildClick(Sender: TObject);
begin
if not Assigned(Form2) then begin
Form2 := TForm2.Create(Application);
end;
end;
end.
---------------------------------------------
unit Unit2;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm2 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
private
public
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2 := nil;
end;
end.
---------------------------------------------
А остальное добавишь по вкусу.



Страницы: 1 вся ветка

Текущий архив: 2003.09.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
6-82382
kjeka
2003-07-28 19:51
2003.09.25
WinPopup


1-82215
XopoSHiy
2003-09-11 19:41
2003.09.25
Формочки... Много формочек!!!


14-82445
jack128
2003-09-08 00:15
2003.09.25
Именинники 8 сентября


14-82457
Aspirin
2003-09-07 17:03
2003.09.25
Как сделать чтобы форма была в центре экрана?


3-82113
LeSS
2003-09-04 16:41
2003.09.25
Нужно создать таблицу dbf