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

Вниз

Диалоги   Найти похожие ветки 

 
Галинка ©   (2004-10-06 11:56) [0]

Доброго всем времени суток...
Мне надо выкинуть один диалог из автокреата. Как его потом использовать?

Заранее спасибо всем, кто ответит.


 
begin...end ©   (2004-10-06 11:56) [1]

TForm.Create(...), предварительно проверив, не создан ли он.


 
Amoeba ©   (2004-10-06 12:00) [2]


> Галинка ©   (06.10.04 11:56)

Советую выкинуть все. А создавать и использовать примерно так:

MyDialog := TMyDialog.Create;
try
 MyDialog.ShowModal;
finally
 MyDialog.Free;
end;

или

MyDialog := TMyDialog.Create;
try
 if MyDialog.ShowModal = mrOk then
 begin
   ...
 end;
finally
 MyDialog.Free;
end;


 
Галинка ©   (2004-10-06 12:04) [3]

Пояснения....

Диалог называется IntervalsDlg:TIntervalsDlg, он задает интервалы, в которых расчитываются значения.


 
begin...end ©   (2004-10-06 12:05) [4]


> [3] Галинка ©   (06.10.04 12:04)

От этих пояснений что-то сильно меняется?


 
TUser ©   (2004-10-06 12:06) [5]

Не важно, как его зовут. Эту форму выкинь, а создавай так
if not assigned(...) then
  ...:=... .Create();

Уничтожай через FreeAndNil


 
Галинка ©   (2004-10-06 12:10) [6]

А ShowModal уже потом делать?

для TUser:  Может в защищеном блоке?


 
Amoeba ©   (2004-10-06 12:12) [7]


> TUser ©   (06.10.04 12:06) [5]

А зачем так сложно? На фига нужны эти проверки и обниление? Ведь это же диалог - модальная форма! При модальном показе 2-й экземпляр (если программер не полный идиот и сам не будет себе подкладывать грабли) создать не должно приходить в голову.


 
begin...end ©   (2004-10-06 12:13) [8]


>  [6] Галинка ©   (06.10.04 12:10)

ShowModal - потом, в защищённом блоке - лучше не надо.


 
Галинка ©   (2004-10-06 12:16) [9]

Может кто-нибудь напишет все таки весь синтаксис конструкции...


 
Amoeba ©   (2004-10-06 12:17) [10]

Уже написан. Смотри

> Amoeba ©   (06.10.04 12:00) [2]


 
Галинка ©   (2004-10-06 12:19) [11]

Может кто-нибудь напишет все таки весь синтаксис конструкции...


 
Галинка ©   (2004-10-06 12:20) [12]

Удалено модератором


 
Amoeba ©   (2004-10-06 12:21) [13]

Можно еще и так:

with TMyDialog.Create(Application) do
try
ShowModal;
finally
Free;
end;

или

with TMyDialog.Create(Application) do
try
if ShowModal = mrOk then
begin
  ...
end;
finally
Free;
end;

Sorry, в [2] в спежке забыл дописать параметр конструктора.


 
Amoeba ©   (2004-10-06 12:22) [14]


> Галинка ©   (06.10.04 12:20) [12]

Что еще непонятно? Чего нехватает до "всего синтаксиса конструкции"?


 
begin...end ©   (2004-10-06 12:23) [15]

Не хватает заменить TMyDialog на TIntervalsDlg


 
Amoeba ©   (2004-10-06 12:25) [16]

Похоже, что авторша вопроса далеко не продвинется в программировании.


 
Галинка ©   (2004-10-06 12:25) [17]

Еще один вопрос на засыпку. А что делать, когда из одного диалога надо вызвать другой? В какой последовательности их надо будет создавать/уничтожать? По принципу вложенных циклов?


 
Мастер ©   (2004-10-06 12:26) [18]

>Галинка ©   (06.10.04 12:25) [17]
А ты попробуй и узнаешь.


 
Галинка ©   (2004-10-06 12:28) [19]

Еще один вопрос на засыпку. А что делать, когда из одного диалога надо вызвать другой? В какой последовательности их надо будет создавать/уничтожать? По принципу вложенных циклов?


 
Amoeba ©   (2004-10-06 12:28) [20]


> Галинка ©   (06.10.04 12:25) [17]

Я так и предчувствовал, что вопросы теперь посыплются как из худого мешка...

Вызов другого диалога из диалога (во время его модального показа) делается в обработчике нажатия какой-либо кнопки на нем. Схема прежняя. Естественно, никаких вложенных циклов.


 
TUser ©   (2004-10-06 12:28) [21]


> А что делать, когда из одного диалога надо вызвать другой?

Так же и делай, какая разница гду ты создаешь?


 
Галинка ©   (2004-10-06 12:38) [22]

Для Амёбы: (извините если что не так)

У меня пока так
procedure ... . FileNewExecute (...);
begin
 MyDlg1.ShowModal;
  if MyDlg1.ModalResult=mrOK then
   begin
    MyDlg2.ShowModal;
    if MyDlg2.ModalResult=mrOK then
     begin
      ....
      CreateMDIChildWin....
     end;
   end;
end;

Значат ли Ваши высказывания то, что это превратиться в
procedure ... . FileNewExecute (...);
begin
MyDlg1:=TMyDlg1.Create(Application);
try
 MyDlg1.ShowModal;
  if MyDlg1.ModalResult=mrOK then
   begin
    MyDlg2:=MyDlg2.Create(Application);
    try
     MyDlg2.ShowModal;
     if MyDlg2.ModalResult=mrOK then
      begin
       ....
       CreateMDIChildWin....
      end;
    finally
     MyDlg2.Free;
    end;
   end;
finally
 MyDlg1.Free;
end;

??????????


 
begin...end ©   (2004-10-06 12:45) [23]


> [22] Галинка ©   (06.10.04 12:38)

Вместо

> MyDlg2.ShowModal;
>   if MyDlg2.ModalResult=mrOK then      

можно писАть:
if MyDlg2.ShowModal = mrOk then


 
Галинка ©   (2004-10-06 12:47) [24]

to begin...end а все остальное правильно?


 
Amoeba ©   (2004-10-06 12:48) [25]

С учетом begin...end ©   (06.10.04 12:45) [23] да.


 
Мастер ©   (2004-10-06 13:35) [26]


begin
 with TMyDlg1.Create(Application) do
 try
   if ShowModal=mrOK then
   with TMyDlg2.Create(Application) do
   try
     if ShowModal=mrOK then
     begin
      ....
      CreateMDIChildWin....
     end;
   finally
     Free;
   end;
 finally
   Free;
 end;
end;


 
Галинка ©   (2004-10-07 13:51) [27]

Для Амёбы. А зачем так сложно? На фига нужны эти проверки и обниление? Ведь это же диалог - модальная форма! При модальном показе 2-й экземпляр (если программер не полный идиот и сам не будет себе подкладывать грабли) создать не должно приходить в голову. А придется. Вот придется создать второй экземпляр формы, в которой просматриваются таблицы. Сначала для просмотра и редактирования исходных таблиц, а потом для тех же действий, только с результирующими...


 
wisekaa ©   (2004-10-07 15:06) [28]

Во первых все модальные диалоги, после их использования необходимо освобождать.

Во вторых вот ответ на твой вопрос

Вариант с использованием логальных переменных формы

procedure ShowDialogDBInput()
var
Dialog: TFormDialog;
begin
Dialog := TFormDialog.Create(Application);
try
 if Dialog.ShowModal = mrOk then begin
 end;
finally
 Dialog.Free;
end;
end;

procedure ShowDialogDBOutPnput()
var
Dialog: TFormDialog;
begin
Dialog := TFormDialog.Create(Application);
try
 if Dialog.ShowModal = mrOk then begin
 end;
finally
 Dialog.Free;
end;
end;


Вариант с использованием переменной Юнита Формы
procedure ShowDialogDBInput()
begin
if Assigned(FormDialog) then FormDialog.Free;
FormDialog := TFormDialog.Create(Application);
try
 if FormDialog .ShowModal = mrOk then begin
 end;
finally
 FormDialog .Free;
end;
end;

procedure ShowDialogDBOutPnput()
begin
if Assigned(FormDialog) then FormDialog.Free;
FormDialog := TFormDialog.Create(Application);
try
 if FormDialog .ShowModal = mrOk then begin
 end;
finally
 FormDialog .Free;
end;
end;


 
Плохиш ©   (2004-10-07 15:14) [29]


> wisekaa ©   (07.10.04 15:06) [28]

А FormDialog во втором варианте обнилять дядя Вася будет?


 
Anatoly Podgoretsky ©   (2004-10-07 15:23) [30]

Галинка ©   (06.10.04 12:38) [22]

Лучше так


procedure ... . FileNewExecute (...);
begin
  with TMyDlg1.Create(Application) do
  try
    if ShowModal = mrOK then
    begin
      with MyDlg2.Create(Application) do
      try
        if ShowModal = mrOK then
        begin
          ....
          CreateMDIChildWin....
        end;
      finally
        Free;
      end;
    end;
  finally
    Free;
  end;
end;



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

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

Наверх




Память: 0.54 MB
Время: 0.026 c
1-1097213730
Alex_L
2004-10-08 09:35
2004.10.24
Проблемы с отображением форм


14-1096715369
roma
2004-10-02 15:09
2004.10.24
webbrowser1 & skrolling


6-1092814132
Sergey Vorobyev
2004-08-18 11:28
2004.10.24
Как настроить шлюз?


14-1096489928
Cheater
2004-09-30 00:32
2004.10.24
Вопрос к тем, кто служил...


1-1097126943
П7
2004-10-07 09:29
2004.10.24
Эмуляция "незапуска" программы