Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2013, 12:38   #1
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию Как узнать, создалась форма или нет?

Есть некая форма, которая создаётся, но показывается не сразу. Естественно, тот факт, что её не показали, не означает, что не надо ничего делать, т.е., работа должна начаться сразу после создания. Столкнулся с такой вот нехорошей проблемой, что событие OnCreate вызывается совсем не в тот момент, когда форма уже создана. Можно, конечно, влепить одноразовый таймер, но это как-то горбато...
Есть идеи?
FataLL вне форума Ответить с цитированием
Старый 24.09.2013, 14:39   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Идеи есть. Событие OnCreate, начинается ДО создантия формы. Т.е., формы ещё не существует, а Вы пытаетесь её найти. Это как, трахнул девку и в этот-же момент, пытаться отыскать ребёнка.
Грубовато, но по-сути.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 24.09.2013 в 14:42.
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.09.2013, 15:21   #3
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

В хэлпе написано
Цитата:
Use OnCreate to perform special processing when the form is created and is invoked by TCustomForm’s constructor.
...когда форма создаётся. По крайней мере, это переводится именно так. Пример с девкой совершенно некорректен, ибо там явно выраженное прошедшее время. И идей по сути я что-то не заметил...
FataLL вне форума Ответить с цитированием
Старый 24.09.2013, 15:36   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Корректен. Вы, просто не понимаете, как это происхотит.
Формы ещё нет (на экране, она ещё не нарисована), но событие OnCreate, уже есть.
Когда она будет нарисована, возникнет событие onShow.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.09.2013, 16:18   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
событие OnCreate вызывается совсем не в тот момент, когда форма уже создана.
А как определил? Я с таким не сталкивался. Если нужно тупо до создания формы что-то выполнять то обычно в dpr прописываю нужное перед созданием самой формы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2013, 16:56   #6
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Smitt&Wesson
В этом-то и фикус! У меня форма только создаётся. Когда она покажется - неизвестно. А работать она должна сразу, как только создалась. Поэтому OnShow не подходит. Надо что-то такое, чтобы было после Create.

Stilet
Попробую пояснить так
Код:
void OnCreate(...)
{
  ...
  Add( "Some Message" );
  ...
  ...
  Add( "Another Message" );
}

void AddMessage(...)
{
  Memo->Lines->Add( sMsg ); // exception AccessViolation только при первом вызове
}
FataLL вне форума Ответить с цитированием
Старый 24.09.2013, 17:03   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
void AddMessage(...)
{
Memo->Lines->Add( sMsg ); // exception AccessViolation только при первом вызове
}
вы уверены, что не
formX->memoY->Lines->Add(s);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.09.2013, 17:24   #8
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

evg_m
Уверен. Функции одного класса формы.
FataLL вне форума Ответить с цитированием
Старый 24.09.2013, 18:53   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

OnCreate после создания, о чем и говорится в цитате.
Не понятно, что автору надо... пример в #6 кривой.
eval вне форума Ответить с цитированием
Старый 24.09.2013, 19:24   #10
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от FataLL Посмотреть сообщение
событие OnCreate вызывается совсем не в тот момент, когда форма уже создана.
В Delphi 6/7 у формы было свойство OldCreateOrder, включавшее режим совместимости с Delphi 3, что влияло на последовательность вызова событий при создании формы.

Кроме того, если у формы выставить Visible в True, она выводится на экран сразу после создания, что тоже может быть внезапно для кода.
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать, захвечен 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