[Lazarus] MDI problem and fix for Windows with Qt4/Qt5

zeljko zeljko at holobit.net
Thu Sep 6 08:28:50 CEST 2018

On 09/05/2018 08:38 PM, Rudolf Cornelissen via Lazarus wrote:
> Hi all,
> This is my first post here, I hope my input is considered helpfull.
> Anyhow, I am busy converting a Delphi MDI application (which I develop 
> as a daytime job) to Lazarus using Qt/Qt5.
> Compared to Win32 Widgeset indeed Qt has much more stuff in place.
> A problem I encountered is a mouse offset between mouseposition in the 
> MDI child window 'onscreen' and the position as handled internally in 
> LCL when a button in pressed.
> The effect is that for instance if I have a button onscreen, and I hover 
> over it, the color correctly changes hinting me that I can press that 
> button. When I do however, the button is not activated unless I hover my 
> mouse 'titlebar height' above the button.
> There is a simple fix possible for this my modifying the file 
> 'qtwidgets.pas' in both Qt and Qt5 LCL/interfaces folders.
> When I modify routine 'TQtMainWindow.OffsetMousePos' in the below way 
> MDI works fully correctly concerning the mouse positions here (windows7 
> tested):
> procedure TQtMainWindow.OffsetMousePos(APoint: PQtPoint);
> var
>    MyWidget         : QWidgetH;
>    MyStyle          : QStyleH;
>    MyTitleBarHeight : Integer;
> begin
>    inherited OffsetMousePos(APoint);
>    if IsMdiChild and not IsMaximized then
>    begin
>      //correct windowed Y-pos
>      //dec(APoint^.Y, GetSystemMetrics(SM_CYCAPTION)); //windows only
>      MyWidget := GetWidget;
>      MyStyle  := QWidget_style(MyWidget);
>      MyTitleBarHeight := QStyle_pixelMetric(MyStyle 
> ,QStylePM_TitleBarHeight, nil, MyWidget);
>      dec(APoint^.Y, MyTitleBarHeight);
>      //correct windowed X-pos
>      dec(APoint^.X, (self.getFrameSize.Width - 
> self.getClientBounds.Size.Width) div 2);
>    end;
> end;
> Can someone validate I am not doing something stupid here and update the 
> sources if not?
> That would save me some work manually modifying these routines over here..
> Thanks for taking the time to look at this..

Please open an issue about it and attach example project.


More information about the Lazarus mailing list