imho.ws |
![]() |
![]() |
![]() |
# 1 |
Advanced Member
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490
![]() ![]() ![]() ![]() ![]() ![]() |
Событие полсе запуска приложения.
Какое событие мне бы обрабатывать, чтобы начинать работу срразу после того, как приложение запущено, форма создано.
OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint я последовательность то знаю, но ни одно не подходит же, как мне кажется. Так как OnCreate елис буду обрабатывать, то измение лейблов, скажем на форме будет не видно. А все остальные могут по несколько раз происходить во время работы с приложением. =( Что подскажете? |
![]() |
![]() |
# 3 |
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
Уточни, что ты собрался делать... если тебе важно, чтобы отображалось (прорисовывалось) в окне что-то, те же лейблы на пример, то естественно - onPaint, тока не забывай репейнт делать принудительный...
|
![]() |
![]() |
# 4 |
Advanced Member
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490
![]() ![]() ![]() ![]() ![]() ![]() |
Я делаю вебапдейт. На форме лейбл, в котром будет написан ход обновления.
Типа подключаюсь, скачиваю файл такой-то, и т.п. Вмысле репейнт принудительный? Я если делаю он пейнт то лейбл еще не появляется, только форма. |
![]() |
![]() |
# 5 |
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
а зачем так рачно то? что нельзя отдельным тредом пустить обновление этой лейблы через синхронизацию? как это она не появляется в онпейнте? у тя в родителе если он пейнт происходит, то у всех чайлдов он тоже срабатывает... или я опять тебя не понял... популярнее можно?
ПыСы принудительно - это дергать метод репейнт |
![]() |
![]() |
# 7 |
Advanced Member
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490
![]() ![]() ![]() ![]() ![]() ![]() |
решил сделать через сообщения послать форме сообщения. Когда приложение запустится приедт время обработки сообщений. Тогда мое сообщение и обработается. Обработчик сообщения написал, но вот досада, у меня не посылается ообщение.
Application->CreateForm(__classid(TForm1), &Form1); PostMessage(Form1->Handle,WM_RUNUPDATE,0,0); Application->Run(); Я вставил послыку сообщения после create и перед раном. форма уже поидее создана, а он мне ошибку: [C++ Error] webupd.cpp(15): E2315 'Handle' is not a member of 'TForm1', because the type is not yet defined Как н создана? перед этим же create стоит =( |
![]() |
![]() |
# 9 | |
Junior Member
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
Цитата:
![]()
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию ![]() |
|
![]() |
![]() |
# 14 | |
Junior Member
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
Цитата:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender) { int i; for(i=0;i<=1000;i++) { /* здесь происходит какой-то процесс (вычисление очередного значения, описывается ход обновления...) ..... */ Label1->Caption = IntToStr(i); Application->ProcessMessages(); } } ![]() Или это не то, что ты описывал в #4 и #6 постах?
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию ![]() |
|
![]() |
![]() |
# 15 | |
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
Цитата:
![]() ты дебажить попробуй и проверь ![]() треды это очень просто, но объяснять долго... вот произошло у тя событие обновления (не важно какое, на пример нажали кнопку "обновить") мы открываем тред, в котором делаем все вычисления и пр.пр.пр.... на формочке у тя есть метод синхронизированный чтото типа setLabelCaption - который ты сам пишешь ессесно, но фишка в том, что он синхронизированный, а делает метод простую весчь - ставит лейбле кепшн по входному парамеру... в ходе вычислений в своем тредике просто выдергиваем в нужных местах этот метод и все будет чики пуки... ![]() |
|
![]() |
![]() |
# 18 |
Advanced Member
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490
![]() ![]() ![]() ![]() ![]() ![]() |
Сделал класс поток. В нем есть функция синхронизации, котрая должна обновлять кепшн на форме. Функция потока вызывает функцию, которая как параметр - указатель на функцию харнится вв ее свойствах.
typedef void (*MyFunc)(AnsiString); class TUpdThread : public TThread { private: protected: void __fastcall Execute(); void __fastcall UpdateCaption(); void __fastcall GetRegistryVals(); public: __fastcall TUpdThread(bool CreateSuspended); void __fastcall SetUpdProc(MyFunc NewUpdProc); }; void __fastcall TUpdThread::SetUpdProc(MyFunc NewUpdProc){ UpdateFunc = NewUpdProc; } void __fastcall TUpdThread::UpdateCaption(){ UpdateFunc(Message); Sleep(1); } У формы сделал функцию: __fastcall TMainForm::SetCaption(AnsiString Value){ Report->Caption = Value; } Но опять встает та же проблема: Application->Initialize(); Application->CreateForm(__classid(TMainForm), &MainForm); TUpdThread *UpdateThread = new TUpdThread(true); UpdateThread->SetUpdProc(MainForm->SetCaption); // UpdateThread->Resume; Application->Run(); не могу я этот метод там указывать как параметр эту функцию передать, говорит, что еще класса нет =( ТАК! Вписал #include <formunit.h>, ошибку не выдает, но! Теперь ему не нравится вот что: Cannot convert 'void (* (_closure )(AnsiString))(AnsiString)' to 'void (*)(AnsiString)' |
![]() |