|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.09.2013, 19:50 | #11 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Я тоже не совсем понял. Что он понимает под фразой "до создания формы". Будь я идиотом, я бы понял так: Определить, создалась ли форма до того, как произошло обращение к команде вызова формы
Это тоже возможно, нужно обратьться к списку форм, но зачем?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
25.09.2013, 11:04 | #12 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
eval
OnCreate вызывается не после и не до создания формы, а в момент создания. Пример не кривой, я опустил полное описание. Если будет легче, то вот Код:
Под фразой "до создания формы" я понимаю, что фактически конструктор формы не отработал. Или отработал, но компоненты продолжают создаваться или инициализироваться. Иначе я не могу понять, почему в момент первого вызова обращение к Memo ведёт к AccessViolation. Т.е., мне нужно быть абсолютно уверенным, что всё создалось [форма и все компоненты на ней], чтобы начать основную работу, которая предполагает доступ к компонентам формы. И работа эта должна начаться даже если эту форму никто не собирается показывать |
25.09.2013, 12:18 | #13 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
OnCreate вызывается после того как все контролы и компоненты кинутые в дизайнере уже инициализированы и с ними можно работать. Потому то и говорят что форма уже создана. Да и это синхронная обработка, и по другому быть не может.
Слелайте проще, чтобы убедится создайте новый проект, кинте на форму мемо, и в онкрейт пропишите строку кода где просто добавите "строку" в это мемо, и увидите, что все ок. Что касается вашего примера то и тут криво. Зачем вы приводите код метода AddMessage и не показываете код метода Add? У вас просто ошибка в 17 строке. |
25.09.2013, 14:27 | #14 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
eval
Ещё раз исправляю. Код:
Последний раз редактировалось FataLL; 25.09.2013 в 14:33. |
25.09.2013, 14:52 | #15 |
Форумчанин
Регистрация: 14.10.2011
Сообщений: 267
|
Вообще-то, как я усвоил из разных источников, последовательность появления формы такая: сперва в конструкторе создается "виртуальная" форма... - то-есть выделяются области в памяти, распределяется пространство, инициализируются переменные, массивы, но нигде ничего еще не отрисовывается; затем приходит черед onCreate - onShow - onPaint (здесь все появляется на мониторе) - onResize - onPaint (снова). OnCreate в "плюсах" не рекомендуют по причине возможного конфликта с конструктором, но я думаю - если использовать только что-то одно, то коллизий быть не должно. Вот хотелось бы ясности... - действительно ли это так? и что на каком этапе делается?
|
25.09.2013, 15:16 | #16 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
nick42
Реально, в конструкторе инициализируются три свойства формы и всё. Основная музыка - в методе OnCreate. Там идёт считывание настроек, заполнение компонентов формы данными, создаются потоки [которые и выполняют основную работу] и т.д. В процессе выполнения действий, вызывается AddMessage с обычным текстом, информирующим о ходе работы, который заносится в ListBox и лог-файл. Заметил, что в листбоксе и логе не хватает самых первых сообщений, начал разбираться и выяснил такую вот странную вещь, что самое первое сообщение не выводится из-за непонятного эксепшена. Ума не приложу, почему он возникает. Более того, я всё-таки сделал одноразовый односекундный таймер, и всё заработало, как и ожидалось, но это обход проблемы, а не решение Код:
Последний раз редактировалось FataLL; 25.09.2013 в 15:19. |
25.09.2013, 15:39 | #17 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Вы новый проект для теста делали как я предлагал?
А про дебагер слышали что нибудь? Вы даже пока не выяснили что вызывает исключение, а таймер сваять успели, нет слов.. и конечно важно что вы пишите в вопросах. гадать это на другом форуме. адд у вас там или еще чего.. |
25.09.2013, 15:48 | #18 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Цитата:
|
|
25.09.2013, 16:00 | #19 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
eval
И проект новый, и винду переустановил, и новый комп прикупил. Какие ещё есть пляски с бубном на примете? Я создал тему не из праздного любопытства от нечего делать, и уж поверьте, перед этим предпринял не мало. Исключение вызывает обращение к компоненту формы, который при проверке на NULL, таковым не является. Таймер мне тоже не нравится, как я уже сказал. Тем не менее, с ним почему-то работает. Если есть дельная мысль по этому поводу, буду только рад послушать. |
25.09.2013, 17:51 | #20 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,786
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как узнать, захвечен mutex или нет (linux, C++) | Egyptorium | Общие вопросы C/C++ | 1 | 16.01.2013 14:55 |
как узнать пересекаются 2 окружности или нет | fate | Общие вопросы Delphi | 2 | 17.06.2011 15:27 |
как узнать занят порт или нет | DeDoK | Работа с сетью в Delphi | 3 | 12.09.2010 21:51 |
Как узнать программа запущена или нет? | ilSMoKEli | Общие вопросы Delphi | 5 | 02.05.2010 23:01 |
Как узнать открыл пользователь окно или нет? | KaimNotark | Общие вопросы Delphi | 5 | 09.02.2010 09:38 |