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

Вниз

проблемы с модальной формой   Найти похожие ветки 

 
Эли   (2005-03-05 09:10) [0]

try Form5:=TForm5.Create(Self); except end;
Form5.ShowModal;
try Form5.Destroy; except end;

.......

После открытия модальной формы, юзер выбирает опции, что запоминаются в глобальных переменных.

Что-то тут не так? Почему второй раз не удается создать форму? Почему после закрытия приложения после этой процедуры Виндоуз докладывает об ошибках? Третий день с багом разобраться не могу!


 
evvcom ©   (2005-03-05 09:17) [1]

Сам то понял, что написал?
Зачем Form5:=TForm5.Create(Self); в try заключил? Т.е. пытаться работать непонятно с чем, если вдруг конструктор отработал с исключением? Отсюда и баги.
И вообще-то принято вызывать не деструктор напрямую, а Free.


 
Эли   (2005-03-05 09:30) [2]

а Free ничего не меняет - я и это пробовал
и try except ничего не меняет - просто еще более странным оказывается поведение программы при закрытии приложения


 
evvcom ©   (2005-03-05 09:39) [3]

Ошибка локализована? Если закомментарить от Create до Destroy ошибка исчезает?
Create в try здесь помещать не надо затем, чтобы, если возникнет там исключение, то не работать с несуществующим объектом Form5. Если уж какие-то исключения могут возникнуть при работе с классом, то пишут примерно так:

MyObject := TMyObject.Create(AOwner);
try
 MyObject.MyMethod; // Здесь может быть exception
finally
 MyObject.Free;
end;


 
XP   (2005-03-05 09:43) [4]

Попробуйте:
var
 ModForm: TForm5;
begin
 ModForm := TForm5.Create(Self);
 try
   ModForm.ShowModal;
 finally
   ModForm.Free;
 end;
end;


Хотя, это телепатия какая-то.


 
HSolo ©   (2005-03-05 10:24) [5]

with TForm5.Create(self) do
try
  ShowModal;
finally
  Free;
end;


 
evvcom ©   (2005-03-05 10:36) [6]


> HSolo ©   (05.03.05 10:24) [5]
> with TForm5.Create(self) do

Если код настолько прост, то можно и так сделать. Но если внутри with приличный кусок кода с множеством пропертей и т.п., то я не использую with по нескольким причинам:
1. Код сложнее читать, начинаешь путаться а к какому объекту относится эта проперть (особенно, если эти with каскадно наставлены)
2. В редакторе под отладчиком уже не посмотришь значение этой проперти простым наведением мыши.
3. Собственно от этого with мы ничего не экономим. Компилятор все равно в стеке выделяет 4 байта для созданного объекта и кладет туда результат работы конструктора.

Возможно, это не полный список недостатков, а вот достоинств этого вообще придумать не могу.


 
HSolo ©   (2005-03-05 11:10) [7]

>evvcom ©   (05.03.05 10:36) [6]

>если внутри with приличный кусок кода с множеством пропертей и т.п., то я не использую with

Я тоже. Но в вопросе значится код, который именно "настолько прост", что "можно и так сделать"



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

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

Наверх




Память: 0.48 MB
Время: 0.056 c
1-1109935612
santa
2005-03-04 14:26
2005.03.20
шифрование текстовых файлов


1-1109779277
Интересующийся
2005-03-02 19:01
2005.03.20
Интерфейс Opera по управлению окнами в Delphi...как?


4-1102351819
maxistent
2004-12-06 19:50
2005.03.20
ПРО МОДЕМ


1-1109753381
Anchar2004
2005-03-02 11:49
2005.03.20
фаилы дириктории.


4-1107326988
greenbloody
2005-02-02 09:49
2005.03.20
Иконка в SysTray