diff --git a/lcl/interfaces/qt/qtint.pp b/lcl/interfaces/qt/qtint.pp index c19c98c922..69f6cbb555 100644 --- a/lcl/interfaces/qt/qtint.pp +++ b/lcl/interfaces/qt/qtint.pp @@ -135,7 +135,8 @@ type const TargetEntrys = 3; - + QEventLCLMessage = QEventUser; + var QtWidgetSet: TQtWidgetSet; diff --git a/lcl/interfaces/qt/qtobject.inc b/lcl/interfaces/qt/qtobject.inc index f3a2bc5ed6..83a7f1948b 100644 --- a/lcl/interfaces/qt/qtobject.inc +++ b/lcl/interfaces/qt/qtobject.inc @@ -141,8 +141,7 @@ end; ------------------------------------------------------------------------------} procedure TQtWidgetSet.AppProcessMessages; begin - if QCoreApplication_hasPendingEvents - then + if QCoreApplication_hasPendingEvents then QCoreApplication_processEvents(); end; diff --git a/lcl/interfaces/qt/qtwidgets.pas b/lcl/interfaces/qt/qtwidgets.pas index 5c7ed2e73f..e16f6905ef 100644 --- a/lcl/interfaces/qt/qtwidgets.pas +++ b/lcl/interfaces/qt/qtwidgets.pas @@ -32,7 +32,7 @@ uses {$else} qt4, {$endif} - qtobjects, + qtobjects, qtint, // Free Pascal Classes, SysUtils, Types, // LCL @@ -128,6 +128,7 @@ type procedure SlotPaint(Event: QEventH); cdecl; procedure SlotResize; cdecl; procedure SlotContextMenu; cdecl; + procedure SlotLCLMessage(Sender: QObjectH; Event: QEventH); cdecl; public procedure Activate; procedure BringToFront; @@ -1360,6 +1361,11 @@ begin QEventResize: SlotResize; QEventPaint: SlotPaint(Event); QEventContextMenu: SlotContextMenu; + QEventLCLMessage: + begin + SlotLCLMessage(Sender, Event); + Result := True; + end; else QEvent_ignore(Event); end; @@ -2032,6 +2038,18 @@ begin LCLObject.PopupMenu.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; +procedure TQtWidget.SlotLCLMessage(Sender: QObjectH; Event: QEventH); cdecl; +var + MessageEvent: QLCLMessageEventH absolute Event; + Msg: TLMessage; +begin + Msg.msg := QLCLMessageEvent_getMsg(MessageEvent); + Msg.wParam := QLCLMessageEvent_getWParam(MessageEvent); + Msg.lParam := QLCLMessageEvent_getLParam(MessageEvent); + Msg.Result := 0; + DeliverMessage(Msg); +end; + procedure TQtWidget.Activate; begin QWidget_activateWindow(Widget); diff --git a/lcl/interfaces/qt/qtwinapi.inc b/lcl/interfaces/qt/qtwinapi.inc index da5767b077..4f4c7f5709 100644 --- a/lcl/interfaces/qt/qtwinapi.inc +++ b/lcl/interfaces/qt/qtwinapi.inc @@ -3377,23 +3377,16 @@ begin end; function TQtWidgetSet.PostMessage(Handle: HWND; Msg: Cardinal; wParam: WParam; lParam: LParam): Boolean; -{var +var Widget: TQtWidget absolute Handle; - Event: QEventH; -} + Event: QLCLMessageEventH; begin Result := False; if Handle <> 0 then begin - {$note todo ask in bindings} -{ - Event := QEvent_create(QEventUser); - try - QCoreApplication_postEvent(Widget.Widget, Event); - finally - QEvent_destroy(Event); - end; -} + Event := QLCLMessageEvent_create(QEventLCLMessage, Msg, wParam, lParam, 0); + QCoreApplication_postEvent(Widget.Widget, Event); + Result := True; end; end; {------------------------------------------------------------------------------