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

Вниз

Обработка ошибок в открывающейся форме   Найти похожие ветки 

 
Игорь Шевченко ©   (2011-10-05 20:16) [40]


> Ответивший на этот вопрос будет хранить данные в TreeView
> и всю бизнес-логику писать внутри Button1Click


До сих пор указанного соответствия не наблюдалось


 
DiamondShark ©   (2011-10-05 20:19) [41]


> До сих пор указанного соответствия не наблюдалось

А формы, отменяющие показ в OnCreate, стало быть, наблюдались?


 
Игорь Шевченко ©   (2011-10-05 20:20) [42]


> А формы, отменяющие показ в OnCreate, стало быть, наблюдались?


формы, выдающие исключение в OnCreate и не появляющиеся после этого на экране наблюдались. Заметьте разницу - не отменяющие показ, а выдающие исключение


 
_Юрий   (2011-10-05 20:21) [43]


> Игорь Шевченко ©   (05.10.11 19:57) [35]


> Между прочим, это один из моих вопросов кандидатам на собеседовании
> :)


Ну дык как по твоему правильно не допустить этого самого открытия?


 
Германн ©   (2011-10-06 01:08) [44]

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


 
MsGuns ©   (2011-10-06 12:36) [45]

>Игорь Шевченко ©   (05.10.11 20:20) [42]
>формы, выдающие исключение в OnCreate и не появляющиеся после этого >на экране наблюдались. Заметьте разницу - не отменяющие показ, а >выдающие исключение

А теперь пожалуйста в деталях чем отличается первое от второго с т.зр. пользователя ?
Или маэстро пишут ПО исключительно для маэстро ?


 
MsGuns ©   (2011-10-06 12:43) [46]

Я не знаю почему топикстартер озадачился испечь блины в атомном реакторе, но чисто на практике знаю какую реакцию вызывает у простого юзверя программа, которая после запуска молча (или с белым прямоугольником, иногда с вкраплениями текста и цвета) зависает на несколько минут, а бывает и часов если говнокодер выставил пузатый таймаут. Ответ простой - резкое желание переместить ярлычок в отхожее место.
Не знаю что там спрашивается на собеседованиях по поводу открытия форм стартующих приложений и честно говоря не интересно. Ибо это в конце концов стандарт софт-конторы, который приходящий усваивает в секунду и в дальнейшем тупо кописпастит (ибо стандарт).


 
MsGuns ©   (2011-10-06 12:47) [47]

Представил что бы было если бы PL/SQL Developer или Toad работал бы по принципу ИШ-ТС с учетом того, что у нас периодицки перебои с Киевом по сетке (базы там). Бррррр....


 
Ega23 ©   (2011-10-06 12:55) [48]


> MsGuns ©   (06.10.11 12:47) [47]
>
> Представил что бы было если бы PL/SQL Developer или Toad
> работал бы по принципу ИШ-ТС с учетом того


А что тут такого?
Не, если в твоём понимании все программы, которые перед показом главной формы подключаются к БД и выкачивают оттуда некую служебную информацию, необходимую для начала работы, относятся к поделкам говнокодеров, то мне тогда искренне жаль твоих клиентов.


 
Игорь Шевченко ©   (2011-10-06 13:14) [49]


> А теперь пожалуйста в деталях чем отличается первое от второго
> с т.зр. пользователя ?


прошу озвучить точку зрения пользователя


> Представил что бы было если бы PL/SQL Developer или Toad
> работал бы по принципу ИШ-ТС


Не представляй, у тебя плохо получается, не твое это


 
MsGuns ©   (2011-10-06 14:37) [50]

>Ega23 ©   (06.10.11 12:55) [48]
>Не, если в твоём понимании все программы, которые перед показом главной формы подключаются к БД и выкачивают оттуда некую служебную информацию, необходимую для начала работы, относятся к поделкам говнокодеров, то мне тогда искренне жаль твоих клиентов.

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

>Игорь Шевченко ©   (06.10.11 13:14) [49]
>прошу озвучить точку зрения пользователя

Отсутствие тормозов (в т.ч. и особенно при запуске приложения),
Удобный интерфейс (без излишеств, но со всем необходимым)
Отсутстствие непредвиденных (не описанных в руководстве) глюков и граблей
Понятное интуитивно поведение программы, включая сообщения об ошибках.

Достаточно ?

>Не представляй, у тебя плохо получается, не твое это

Ну куда уж нам уж выйти замуж :)


 
Ega23 ©   (2011-10-06 14:45) [51]


> В моем понимании программа предварительно предлагает залогиниться


И чем это противоречит созданию компонента TLoginDialog, размещению его в DataModule и вызов перед созданием главной формы?


 
Ega23 ©   (2011-10-06 14:45) [52]

И, кстати, я так и не услышал лекции, для чего предназначены ДатаМодули. Очень интересно послушать.


 
И. Павел ©   (2011-10-06 14:49) [53]

> Под "говнокодерами" я подразумевал тех, кто выставляет часовые
> таймауты без веских на то оснований.

Чувствую, не доводилось вам сталкиваться с истинным говнокодом :)


 
Юрий Зотов ©   (2011-10-06 15:19) [54]

Вместо OnCreate  - перекрыть конструктор. И все дела.

>Ega23 ©   (05.10.11 14:14) [19]
> преимущество вызова исключения в конструкторе...

...в том, что форма будет уничтожена автоматически.


 
Игорь Шевченко ©   (2011-10-06 15:20) [55]

MsGuns ©   (06.10.11 14:37) [50]


> Достаточно ?


не вижу противоречий с описанными мной деталями реализации.


> Ну куда уж нам уж выйти замуж :)


Вот и не выходи


 
Ega23 ©   (2011-10-06 15:22) [56]


> ...в том, что форма будет уничтожена автоматически.


Это философский спор.


 
Юрий Зотов ©   (2011-10-06 15:24) [57]


> Ega23 ©   (06.10.11 15:22) [56]

Тогда без меня...


 
Ega23 ©   (2011-10-06 15:36) [58]


> Тогда без меня...


Не, то что она будет автоматически уничтожена, спору нет. Вопрос в преимуществе. :)


 
MsGuns ©   (2011-10-06 15:46) [59]

>Ega23 ©   (06.10.11 14:45) [52]
>И, кстати, я так и не услышал лекции, для чего предназначены >ДатаМодули. Очень интересно послушать.

Если действительно интересно (в чем очень сомневаюсь), то поищи на этом же форуме - валом, в т.ч. и с моими скромными репликами
Если просто пофлудить для удовлетворения своего эго, то без меня.

>Игорь Шевченко ©   (06.10.11 15:20) [55]
>Вот и не выходи

Да уж, не часто в последнее время высовываюсь в Мастаках, - просто не интересно. А тут решил "выйти" :)
Ну извини уж, что заставил тебя трудится да тратить твой сарказм


 
Ega23 ©   (2011-10-06 16:14) [60]


> Если действительно интересно (в чем очень сомневаюсь), то
> поищи на этом же форуме - валом, в т.ч. и с моими скромными
> репликами


Судя по твоей ремарке у меня складывается впечатление, что у тебя действительно отсутствует понимание в предназначении DataModule. Это не шутка и не ёрничание.


 
Юрий Зотов ©   (2011-10-06 16:31) [61]

> Ega23 ©   (06.10.11 15:36) [58]
> Вопрос в преимуществе

Оно заключается в слове "автоматически". Нам ничего не надо делать.


 
Ega23 ©   (2011-10-06 16:41) [62]


> Нам ничего не надо делать.


в одном случае нам надо перекрыть AfterContruction и производить инициализацию там, в другом - добавить метод InitSomething и производить инициализацию в нём.
Разница в последующей эксплуатации - в одной строке.
Спор ниочём.


 
MsGuns ©   (2011-10-06 16:41) [63]

>Ega23 ©   (06.10.11 16:14) [60]
>Судя по твоей ремарке у меня складывается впечатление

Извини, но мне как то все равно что у тебя и где складывается.
Но загромождать датамодули созданием формочек и вообще чего-то визуального принципиально не желаю ибо для этого имеются вполне удобные компоненты, в т.ч. и формы. Либо библиотеки.
Хотя это дело вкуса, конечно.


 
Ega23 ©   (2011-10-06 17:09) [64]


> Но загромождать датамодули созданием формочек


Знаешь, TOpenDialog тоже в каком-то смысле "формочка". Против него у тебя ничего нет?


 
Игорь Шевченко ©   (2011-10-06 17:09) [65]


> Да уж, не часто в последнее время высовываюсь в Мастаках


Мудро, Штирлиц. Руководствуйтесь этим и впредь.


 
Jeer ©   (2011-10-06 17:43) [66]


> Ega23 ©   (06.10.11 17:09) [64]
> > Но загромождать датамодули созданием формочек
> Знаешь, TOpenDialog тоже в каком-то смысле "формочка". Против
> него у тебя ничего нет?


Так и обходись одним датамодулем, зачем тебе все остальное ?


 
Jeer ©   (2011-10-06 17:47) [67]


> MsGuns ©   (06.10.11 16:41) [63]
> Хотя это дело вкуса, конечно.


Для такого варианта - вкуса нет, в моем понимании.


 
Ega23 ©   (2011-10-06 19:28) [68]


> Так и обходись одним датамодулем, зачем тебе все остальное?


Есть датамодуль. В нём всякие ImageList-ы, глобальный коннект к БД, несколько датасорс-датасет-ов и TDBConnectDialog. Отдельный компонент, невизуальный (в дизайн-тайм). Который, собственно, отрабатывает при старте либо при реконнекте.
Датамодуль создаётся первым. Если коннект не прошёл, то убивается и выход, до создания главной формы дело даже не дошло.
Вот, собственно, и всё.


 
_Юрий   (2011-10-06 20:13) [69]


> И. Павел ©   (06.10.11 14:49) [53]
>



> Чувствую, не доводилось вам сталкиваться с истинным говнокодом
> :)


Ему доводилось, я гарантирую это. Не верите - смотрите [27], это ни что иное, как он самый  и есть.


 
Cobalt ©   (2011-10-07 10:49) [70]

Ega23 ©   (06.10.11 19:28) [68]
> Если коннект не прошёл, то убивается и выход, до создания
> главной формы дело даже не дошло.
> Вот, собственно, и всё.


А как же уведомление пользователя о том, что "Необходимо обратиться к администратору с целью проверки связи с сервером приложения"?


 
Ega23 ©   (2011-10-07 10:54) [71]


> А как же уведомление пользователя о том, что "Необходимо
> обратиться к администратору с целью проверки связи с сервером
> приложения"?


В рамках компонента.


 
Jeer ©   (2011-10-07 11:14) [72]


> В рамках компонента.
>

Даже как очень частный случай, рассматривают такой метод для себя нежелательным.
В моих случаях, пользователи всегда получают главную форму с возможностью подключения к тому или иному северу, той или иной БД.
Разумеется, физические детали скрыты от юзера, но он понимает, к чему хочет подключиться. Ну и получает мессаги и статус контролов на форме по результатам подключения.


 
Ega23 ©   (2011-10-09 22:03) [73]


> всегда получают главную форму с возможностью подключения


Какая разница?


 
Laguna ©   (2011-10-09 22:43) [74]


> Есть датамодуль. В нём всякие ImageList-ы, глобальный коннект
> к БД, несколько датасорс-датасет-ов и TDBConnectDialog.
> Отдельный компонент, невизуальный (в дизайн-тайм). Который,
>  собственно, отрабатывает при старте либо при реконнекте.
> Датамодуль создаётся первым. Если коннект не прошёл, то
> убивается и выход, до создания главной формы дело даже не
> дошло.Вот, собственно, и всё.


А чего вы все зациклились на показе главной формы? Вопрос был не в этом. В DM у меня лежат все компоненты, связанные с таблицами, имагесы  и т.д. Изначально все таблицы не открываю. Разные формы связаны с открытием разных таблиц по необходимости. Поэтому и проверяю перед открытием формы валидность доступа к данным. Смысл открывать форму с пустым гридом, если данные не открылись?


 
Laguna ©   (2011-10-09 22:45) [75]

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


 
Юрий Зотов ©   (2011-10-09 23:47) [76]

> Laguna
> Как правильно не допустить конечное открытие формы, если на этапе
> onCreate возникли ошибки.

1. Замещаете конструктор формы и в нем сначала пишете inherited, а потом - код инициализации формы (тот, что раньше был в OnCreate).

2. В этом коде при невозможности инициализации формы (нет доступа к БД, еще что угодно) возбуждаете исключение.

3. Теперь, когда Ваш код будет создавать эту форму, то она либо нормально создастся, либо возникнет исключение. В первом случае все ОК, показываем форму и работаем. Во втором же случае форма создана не будет (точнее, она будет создана, но тут же будет автоматически уничтожена кодом VCL, без всяких наших усилий) - а Вам остается только поймать это исключение и вывести юзеру внятное сообщение. Для этого достаточно вызов конструктора формы поместить в блок try-except:

procedure TAppMainForm.SomeButtonClick(Sender: TObject);
var
 MyForm: TMyForm;
begin
 try
   MyForm := TMyForm.Create(Application)
 except
   on e: Exception do
   begin
     MessageBox(...); // Здесь используем e.Message.
     Exit
   end
 end;
 // Здесь показываем форму и работаем с ней, а в конце, если она
 // уже не нужна, то убиваем ее (используя для этого try-finally).
end;



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

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

Наверх




Память: 0.64 MB
Время: 0.01 c
15-1317328203
Юрий
2011-09-30 00:30
2012.01.15
С днем рождения ! 30 сентября 2011 пятница


2-1317792498
petvv
2011-10-05 09:28
2012.01.15
Array of Char to String (ANSIString)=:


15-1317069002
Юрий
2011-09-27 00:30
2012.01.15
С днем рождения ! 27 сентября 2011 вторник


15-1317041117
LDV
2011-09-26 16:45
2012.01.15
сформулировать текст сообщения


6-1249385626
Polkin
2009-08-04 15:33
2012.01.15
проблема с ISA-прокси