mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-17 23:29:25 +02:00
qt: support for drag/dock for forms with dkDock style
win32: allow drag/dock TCustomForms too - not only TForm descendants git-svn-id: trunk@13888 -
This commit is contained in:
parent
54d4d815b2
commit
1d29c3e238
@ -1087,7 +1087,8 @@ end;
|
||||
TControl.DoDragMsg
|
||||
------------------------------------------------------------------------------}
|
||||
function TControl.DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean):LRESULT;
|
||||
var AWinTarget: TWinControl;
|
||||
var
|
||||
AWinTarget: TWinControl;
|
||||
Accepts: Boolean;
|
||||
P: TPoint;
|
||||
Begin
|
||||
@ -1108,10 +1109,10 @@ Begin
|
||||
if ADragObject is TDragDockObject then
|
||||
begin
|
||||
AWinTarget:= TWinControl(ADragObject.DragTarget);
|
||||
AWinTarget.DockOver(TDragDockObject(ADragObject),P.X,P.Y,TDragState(ADragMessage),Accepts);
|
||||
AWinTarget.DockOver(TDragDockObject(ADragObject), P.X, P.Y, TDragState(ADragMessage), Accepts);
|
||||
end
|
||||
else
|
||||
DragOver(ADragObject,P.X,P.Y,TDragState(ADragMessage),Accepts);
|
||||
DragOver(ADragObject, P.X, P.Y, TDragState(ADragMessage), Accepts);
|
||||
Result := Ord(Accepts);
|
||||
end;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
{%MainUnit ../extctrls.pp}
|
||||
|
||||
{******************************************************************************
|
||||
TCustomForm
|
||||
TCustomSplitter
|
||||
******************************************************************************
|
||||
|
||||
*****************************************************************************
|
||||
|
@ -4735,7 +4735,7 @@ procedure TWinControl.DockOver(Source: TDragDockObject; X, Y: Integer;
|
||||
State: TDragState; var Accept: Boolean);
|
||||
begin
|
||||
PositionDockRect(Source);
|
||||
DoDockOver(Source,X,Y,State,Accept);
|
||||
DoDockOver(Source, X, Y, State, Accept);
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -4746,7 +4746,7 @@ procedure TWinControl.DoDockOver(Source: TDragDockObject; X, Y: Integer;
|
||||
State: TDragState; var Accept: Boolean);
|
||||
begin
|
||||
if Assigned(FOnDockOver) then
|
||||
FOnDockOver(Self,Source,X,Y,State,Accept);
|
||||
FOnDockOver(Self, Source, X, Y, State, Accept);
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
|
@ -128,6 +128,7 @@ type
|
||||
procedure SlotHover(Sender: QObjectH; Event: QEventH); cdecl;
|
||||
function SlotKey(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
||||
procedure SlotMouse(Sender: QObjectH; Event: QEventH); cdecl;
|
||||
procedure SlotNCMouse(Sender: QObjectH; Event: QEventH); cdecl;
|
||||
procedure SlotMouseEnter(Sender: QObjectH; Event: QEventH); cdecl;
|
||||
procedure SlotMouseMove(Event: QEventH); cdecl;
|
||||
procedure SlotMouseWheel(Sender: QObjectH; Event: QEventH); cdecl;
|
||||
@ -1085,6 +1086,8 @@ const
|
||||
DblClickThreshold = 3;// max Movement between two clicks of a DblClick
|
||||
|
||||
type
|
||||
TWinControlAccess = class(TWinControl)
|
||||
end;
|
||||
TLastMouseInfo = record
|
||||
Widget: QObjectH;
|
||||
MousePos: TQtPoint;
|
||||
@ -1535,6 +1538,10 @@ begin
|
||||
SlotPaint(Sender, Event);
|
||||
end;
|
||||
QEventContextMenu: SlotContextMenu(Sender, Event);
|
||||
QEventNonClientAreaMouseButtonPress:
|
||||
begin
|
||||
SlotNCMouse(Sender, Event);
|
||||
end;
|
||||
QEventLCLMessage:
|
||||
begin
|
||||
SlotLCLMessage(Sender, Event);
|
||||
@ -2013,6 +2020,16 @@ begin
|
||||
DeliverMessage(Msg);
|
||||
end;
|
||||
|
||||
procedure TQtWidget.SlotNCMouse(Sender: QObjectH; Event: QEventH); cdecl;
|
||||
begin
|
||||
//Drag&Dock support TCustomForm => Start BeginDrag()
|
||||
if LCLObject is TCustomForm then
|
||||
begin
|
||||
if TWinControlAccess(LCLObject).DragKind = dkDock then
|
||||
LCLObject.BeginDrag(true);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TQtWidget.SlotMouseEnter(Sender: QObjectH; Event: QEventH); cdecl;
|
||||
var
|
||||
Msg: TLMessage;
|
||||
|
@ -1821,11 +1821,14 @@ begin
|
||||
Assert(False, 'Trace:WindowProc - Got WM_NCLBUTTONDOWN');
|
||||
|
||||
//Drag&Dock support TCustomForm => Start BeginDrag()
|
||||
if lWinControl <> nil then begin
|
||||
if WParam = HTCAPTION then begin
|
||||
if lWinControl is TForm then begin
|
||||
if TForm(lWinControl).DragKind = dkDock
|
||||
then lWinControl.BeginDrag(true);
|
||||
if lWinControl <> nil then
|
||||
begin
|
||||
if WParam = HTCAPTION then
|
||||
begin
|
||||
if lWinControl is TCustomForm then
|
||||
begin
|
||||
if TWinControlAccess(lWinControl).DragKind = dkDock then
|
||||
lWinControl.BeginDrag(true);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user