imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 19.04.2005, 16:50     # 1
Dragon31337
Advanced Member
 
Аватар для Dragon31337
 
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490

Dragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царстве
Событие полсе запуска приложения.

Какое событие мне бы обрабатывать, чтобы начинать работу срразу после того, как приложение запущено, форма создано.
OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint
я последовательность то знаю, но ни одно не подходит же, как мне кажется.
Так как OnCreate елис буду обрабатывать, то измение лейблов, скажем на форме будет не видно. А все остальные могут по несколько раз происходить во время работы с приложением. =(
Что подскажете?
Dragon31337 вне форума  
Старый 19.04.2005, 18:46     # 2
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Ты сплэш-скрин (заставку) что-ли хочешь сделать?
Может тебе будет просто достаточно в нужном событии установить флаг что ты уже выполнил действие один раз?
Объясни подробнее цель, действия которые собираешься выполнять.
ЕЖ вне форума  
Старый 19.04.2005, 20:03     # 3
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Уточни, что ты собрался делать... если тебе важно, чтобы отображалось (прорисовывалось) в окне что-то, те же лейблы на пример, то естественно - onPaint, тока не забывай репейнт делать принудительный...
/7y3uK вне форума  
Старый 19.04.2005, 23:24     # 4
Dragon31337
Advanced Member
 
Аватар для Dragon31337
 
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490

Dragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царстве
Я делаю вебапдейт. На форме лейбл, в котром будет написан ход обновления.
Типа подключаюсь, скачиваю файл такой-то, и т.п. Вмысле репейнт принудительный?
Я если делаю он пейнт то лейбл еще не появляется, только форма.
Dragon31337 вне форума  
Старый 20.04.2005, 10:17     # 5
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
а зачем так рачно то? что нельзя отдельным тредом пустить обновление этой лейблы через синхронизацию? как это она не появляется в онпейнте? у тя в родителе если он пейнт происходит, то у всех чайлдов он тоже срабатывает... или я опять тебя не понял... популярнее можно?

ПыСы
принудительно - это дергать метод репейнт
/7y3uK вне форума  
Старый 20.04.2005, 13:13     # 6
Dragon31337
Advanced Member
 
Аватар для Dragon31337
 
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490

Dragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царстве
Я с threadami не работал, можно поподробнее.
Я если в онпейнт делаю
Form1->Label1->Cation = "Тут текущее сотояние обновления";
for (; тут эмуляция работы

то эта лабла так и не проявляется;
Dragon31337 вне форума  
Старый 20.04.2005, 15:43     # 7
Dragon31337
Advanced Member
 
Аватар для Dragon31337
 
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490

Dragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царстве
решил сделать через сообщения послать форме сообщения. Когда приложение запустится приедт время обработки сообщений. Тогда мое сообщение и обработается. Обработчик сообщения написал, но вот досада, у меня не посылается ообщение.
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 стоит =(
Dragon31337 вне форума  
Старый 20.04.2005, 16:24     # 8
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
добавь #include "Unit1.h" ( или где эта форма описана )
dyr_farot вне форума  
Старый 20.04.2005, 18:16     # 9
Al-x
Junior Member
 
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Цитата:
Dragon31337:
Form1->Label1->Cation = "Тут текущее сотояние обновления";
for (;:Wink: тут эмуляция работы
Если я правильно понял, то в цикле что-то делается с Caption лейбла. Можно по простому сделать Application->ProcessMessages(); (ну или как там в BC). Должно обновиться (в Delphi работает )+приложение не подвисает на время работы цикла.
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию
Al-x вне форума  
Старый 20.04.2005, 19:15     # 10
Dragon31337
Advanced Member
 
Аватар для Dragon31337
 
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490

Dragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царстве
dyr_farot, если я добавлю, мне скажет потом при компиляции, что повтороне деклалирование класса TForm1, так что ничего там боавлять не надо.
Al-x, я что-то не понял.
Dragon31337 вне форума  
Старый 20.04.2005, 19:17     # 11
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
ничего он не скажет ( на то #ifndef Unit1H ) написано.
dyr_farot вне форума  
Старый 20.04.2005, 19:56     # 12
Dragon31337
Advanced Member
 
Аватар для Dragon31337
 
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490

Dragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царстве
dyr_farot, я прежде чем написать, попробовал.
Dragon31337 вне форума  
Старый 20.04.2005, 20:00     # 13
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
э... я тоже проверил...
ты, случайно из файла заголовка строки
#ifndef Unit1H
#define Unit1H

не вытер?
dyr_farot вне форума  
Старый 21.04.2005, 09:34     # 14
Al-x
Junior Member
 
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Цитата:
Dragon31337:
я что-то не понял.
Я не отрицаю, что и я чего-то не понял, но вот что я имел ввиду:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 int i;
 for(i=0;i<=1000;i++)
 {      /*
        здесь происходит какой-то процесс (вычисление очередного  значения, описывается ход обновления...)
        .....
        */
        Label1->Caption = IntToStr(i);
        Application->ProcessMessages();
 }
}
Короче, каждый раз после того, как ты изменил Caption, ты вызываешь Application->ProcessMessages(); (цикл это так, для красоты )
Или это не то, что ты описывал в #4 и #6 постах?
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию
Al-x вне форума  
Старый 21.04.2005, 10:14     # 15
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Цитата:
Сообщение от Dragon31337
Я с threadami не работал, можно поподробнее.
Я если в онпейнт делаю
Form1->Label1->Cation = "Тут текущее сотояние обновления";
for (; тут эмуляция работы

то эта лабла так и не проявляется;
а она у тебя не появляется потому что у нее кэпшн = "" пустой строке
ты дебажить попробуй и проверь то что вы тут делаете - это изврат полнейший....
треды это очень просто, но объяснять долго... вот произошло у тя событие обновления (не важно какое, на пример нажали кнопку "обновить") мы открываем тред, в котором делаем все вычисления и пр.пр.пр.... на формочке у тя есть метод синхронизированный чтото типа setLabelCaption - который ты сам пишешь ессесно, но фишка в том, что он синхронизированный, а делает метод простую весчь - ставит лейбле кепшн по входному парамеру... в ходе вычислений в своем тредике просто выдергиваем в нужных местах этот метод и все будет чики пуки...
/7y3uK вне форума  
Старый 21.04.2005, 10:59     # 16
Dragon31337
Advanced Member
 
Аватар для Dragon31337
 
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490

Dragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царстве
/7y3uK, я так понимаю, это через TThread делать предлагаешь. Хм. Пойду поищу-почитаю. Ты бы ссылку дал =) Не читать же мне хелп на английском =)
Dragon31337 вне форума  
Старый 21.04.2005, 11:06     # 17
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Dragon31337
http://callipso.bestcode.org/delphi/artical/num2.html
ЕЖ вне форума  
Старый 25.04.2005, 13:37     # 18
Dragon31337
Advanced Member
 
Аватар для Dragon31337
 
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490

Dragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царстве
Сделал класс поток. В нем есть функция синхронизации, котрая должна обновлять кепшн на форме. Функция потока вызывает функцию, которая как параметр - указатель на функцию харнится вв ее свойствах.
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)'
Dragon31337 вне форума  
Старый 25.04.2005, 13:45     # 19
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Dragon31337
Запихни создание потока в конструктор главной формы.
А метод для обновления Caption из потока надо вызывать с помощью Synchronize.
ЕЖ вне форума  
Старый 25.04.2005, 17:50     # 20
Dragon31337
Advanced Member
 
Аватар для Dragon31337
 
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490

Dragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царствеDragon31337 Луч света в тёмном царстве
А ьеперь самое главное. Как мне узнать об окончании процесса и закрыть приложение.
Dragon31337 вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 13:50.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.