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

Вниз

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

 
Игорь Шевченко ©   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.62 MB
Время: 0.007 c
4-1253534102
__Алексей__
2009-09-21 15:55
2012.01.15
Доступ из службы к сетевому компбютеру


15-1316982602
Юрий
2011-09-26 00:30
2012.01.15
С днем рождения ! 26 сентября 2011 понедельник


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


2-1317911115
vegarulez
2011-10-06 18:25
2012.01.15
Звук при нажатии Enter


15-1317413710
TUser
2011-10-01 00:15
2012.01.15
Задача





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