Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
Галинка ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.036 c
4-1095880392
BKGG
2004-09-22 23:13
2004.10.24
Как узнать имя класса окна.


6-1092421868
Junior
2004-08-13 22:31
2004.10.24
TServerSocket в консольном приложении


4-1095648700
mikl2002
2004-09-20 06:51
2004.10.24
Как программно выбрать звуковуху для вывода звука


4-1094820495
AllDer
2004-09-10 16:48
2004.10.24
TextOut в win2000


1-1097473180
Dr. Genius
2004-10-11 09:39
2004.10.24
Какой сегодня день недели?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский