Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка CLX сообщений


Mim1 ©   (2004-07-09 08:29:00) 

Здраствуйте, немогу поменять параметры собыитя (сообщения) CLX. Далее текст.

function TMyWidget.EventFilter(Sender: QObjectH;
 Event: QEventH): Boolean;
var p:tpoint;
begin
     if (QEvent_type(Event) = QEventType_MouseButtonPress) then
       begin
         P.X := QMouseEvent_x(QMouseEventH(Event));
         P.Y := QMouseEvent_y(QMouseEventH(Event));
         if ... then
           ...  
       end;
   result := inherited EventFilter(Sender, Event);
end;


Хочется в зависимости от какого то условия сделать
QMouseEvent_x(QMouseEventH(Event)) := 100;
То есть заменить параметр сообщения.

Из некрасиывых решений вижу два
1) создать повое сообщени такого же типа и передать его выше по иерархии вместо текущего
2) вернуть результат что сообщение отработано и сгенерировать новое с нужными параметрами и послать его тому же виджету :), его уже не обрабатывать :)


Mim1   (2004-07-09 10:58:00) [1]

Решил проблемку "Некрасивым" методом номер 1.

function TCkgListListView.EventFilter(Sender: QObjectH;
 Event: QEventH): Boolean;
var p,p1:tpoint;
   ss : TShiftState;
   btn:integer;
   state : integer;
begin
 if (Sender = ChildHandle) and
    (QEvent_type(Event) = QEventType_MouseButtonPress) and
    (QMouseEvent_x(QMouseEventH(Event)) > Columns[0].Width) then
   begin
   //
     p.X := Columns[0].Width div 2;
     p.Y := QMouseEvent_Y(QMouseEventH(Event));
     p1.X := QMouseEvent_globalX(QMouseEventH(Event));
     p1.y := QMouseEvent_globalY(QMouseEventH(Event));
     btn := ord(QMouseEvent_button(QMouseEventH(Event)));
     state := ord(QMouseEvent_state(QMouseEventH(Event)));
     //@p1,
     event := QMouseEvent_create(QEvent_type(Event),@p,
       btn,state);
     result := inherited EventFilter(Sender, Event);
     QMouseEvent_destroy(QMouseEventH(Event));
   end
 else
 if (QEvent_type(Event) = QEventType_MouseButtonRelease) then
   begin
     SetCaptureControl(nil);
     result := true
   end
 else
   result := inherited EventFilter(Sender, Event);
end;


Mim1   (2004-07-09 08:49:00) [2]

Точно забыл вопрос, можно ли заменить значение параметра не прибегая к некрасивым решениям?


Наверх

Титульная страница Поиск, карта сайта Написать письмо