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

Вниз

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

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

Наверх





Память: 0.46 MB
Время: 0.046 c
10-1086094163
Tormoz
2004-06-01 16:49
2005.03.20
Диапазон ячеек в Excel


3-1108368552
Rule
2005-02-14 11:09
2005.03.20
кто может чего посоветовать для автобекапа фаербердовской базы


8-1101800804
Михаил5
2004-11-30 10:46
2005.03.20
Как соединить две фотографии .jpg в одну?


3-1108641512
kivadim
2005-02-17 14:58
2005.03.20
как организовать историю добавления(изменения) записей


1-1110145286
ХхХ
2005-03-07 00:41
2005.03.20
Minimize, Maxsimize...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский