Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Работа с формой


Автор: Гость_Tigr 3.2.2005, 15:22
Привет всем.
Народ подскажите, как после открытия формы автоматически запустить (без нажатий на какие-нибудь кнопки) определенный цикл, который периодически выводит инфу и image на исходную форму. И как при прекращении работы этого цикла (при определенных условиях) также автоматически закрыть и форму (опять же без кликов на кнопки). Использование таймера нежелательно.
Исходная форма открывается как модальная (ShowModal).


Автор: _hunter 3.2.2005, 16:23
можно послать форме пользовательское сообщение WM_USER [+n] -- оно придет после создания и отображения формы. словив его начинай рисовать.
ну а закрыть форму -- Close()

Автор: Adil' 3.2.2005, 18:16
Цитата(_hunter @ 3.2.2005, 16:23)
можно послать форме пользовательское сообщение WM_USER [+n] -- оно придет после создания и отображения формы
Только если посылать c PostMessage(...)

Автор: _hunter 3.2.2005, 18:18
само собой smile

Автор: Гость_Tigr 4.2.2005, 12:20
До сих пор не приходилось работать с PostMessage. Когда посылать сообщение форме - до ее открытия по ShowModal() или в другое время? Если не затруднит, приведите часть кода в качестве примера.
Заранее спасибо за помощь. smile

Автор: Adil' 4.2.2005, 14:35
Код
//unit2.h - заголовочный файл второй формы
class TForm2 : public TForm
{
__published: // IDE-managed Components
void __fastcall FormShow(TObject *Sender);
private: // User declarations
public:  // User declarations
__fastcall TForm2(TComponent* Owner);
protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_USER+100, TMessage, OnWMUSER100)
END_MESSAGE_MAP(TForm)
void __fastcall OnWMUSER100(TMessage& msg);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;


//---------------------------------------------------------------------------
//unit2.cpp
...
//---------------------------------------------------------------------------
void __fastcall TForm2::FormShow(TObject *Sender)
{
 PostMessage(Handle,WM_USER+100,0,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::OnWMUSER100(TMessage& msg)
{
 for(int i=0;i<100000;i++)
 {
   Form1->Label1->Caption=i;
   Application->ProcessMessages();//это чтобы програма не "подвисла"
   if(ModalResult!=mrNone)//это чтобы эта форма закрылась сразу, если был нажат крестик, например
     break;
 }
 Close();//закрываем сразу
}
//---------------------------------------------------------------------------

Ну а показываем Form2 чкак обычно, через ShowModal

Автор: Гость_Tigr 4.2.2005, 18:29
Все ясно. Разжевано подробно. Вопросов нет. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)