Текущий архив: 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.52 MB
Время: 0.04 c