Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Объясните пожалуйста по ApplicationEvents в Builder 5  (Прочитано 12363 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
yurza_81
Гость
« : 17-12-2008 08:30 » 

Есть обыкновенное приложени просто для эксперимента

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SendMessage(Application->Handle,WM_MOVE,NULL,100);
}

void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
if (Msg.message==WM_MOVE)
 {
  ShowMessage("a");
  Label1->Caption="sadsadas";
 }
}
По логике при получениии сообшения WM_MOVE в обработчике должен поменятся Label но вот только этого не происходит почему я не могу понять
Смотрел Spy++ TApplication получает это сообшения но вот почемуто не обрабатывает.
Помогите разобраться.
« Последнее редактирование: 17-12-2008 08:37 от Вад » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 17-12-2008 08:40 » 

yurza_81, не обрабатывает - в смысле, не вызывает TForm1::ApplicationEvents1Message?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 17-12-2008 08:52 » 

yurza_81, а так если

PostMessage(Application->Handle,WM_MOVE,NULL,100);

Записан

sss
Специалист

ru
Offline Offline

« Ответ #3 : 17-12-2008 09:35 » 

Если функция SendMessage вызывается  в потоке создавшем окно, вызывается обработчик окна непосредственно.  ApplicationEvents1Message вызывается при извлечении из очереди очередного сообщения.
Вопрос на понимание:
Код:
  Button1->Caption = "Name1"; //Здесь за кулисами SendMessage
  s = Button1->Caption;

Чему равен s ? Ведь GetMessage еще не вызывалось?
Записан

while (8==8)
yurza_81
Гость
« Ответ #4 : 17-12-2008 09:47 » 

Спасибо заработало с PostMessage

Пошёл очередной раз штудировать дядю Рихтера про очередь асинхронных сообщений.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 17-12-2008 10:45 » new

yurza_81, так что штудировать то Улыбаюсь SendMessage делает прямой вызов оконной процедуры (поэтому, наверное, спай и не видит сообщения) и дальше SendMessage код не выполняется, пока не выполнится сообщение.
А PostMessage кладёт сообщение в  конец очереди и забывает про него
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines