| 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 
			
			
			
			Регистрация: 31.03.2003 
				Адрес: СПб 
				
				
				
					Сообщения: 162
				 
				
				![]() ![]() ![]()  | 
	
	
	
		
		
		
		 Цитата: 
	
  )+приложение не подвисает на время работы цикла.
		
				__________________ 
		
		
		
		
	640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию  
			 | 
|
| 
		 | 
	
	
| 
			
			 | 
		# 14 | |
| 
			
			 Junior Member 
			
			
			
			Регистрация: 31.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)'  | 
| 
		 |