mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-24 12:59:39 +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
|
TControl.DoDragMsg
|
||||||
------------------------------------------------------------------------------}
|
------------------------------------------------------------------------------}
|
||||||
function TControl.DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean):LRESULT;
|
function TControl.DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean):LRESULT;
|
||||||
var AWinTarget: TWinControl;
|
var
|
||||||
|
AWinTarget: TWinControl;
|
||||||
Accepts: Boolean;
|
Accepts: Boolean;
|
||||||
P: TPoint;
|
P: TPoint;
|
||||||
Begin
|
Begin
|
||||||
@ -1108,10 +1109,10 @@ Begin
|
|||||||
if ADragObject is TDragDockObject then
|
if ADragObject is TDragDockObject then
|
||||||
begin
|
begin
|
||||||
AWinTarget:= TWinControl(ADragObject.DragTarget);
|
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
|
end
|
||||||
else
|
else
|
||||||
DragOver(ADragObject,P.X,P.Y,TDragState(ADragMessage),Accepts);
|
DragOver(ADragObject, P.X, P.Y, TDragState(ADragMessage), Accepts);
|
||||||
Result := Ord(Accepts);
|
Result := Ord(Accepts);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{%MainUnit ../extctrls.pp}
|
{%MainUnit ../extctrls.pp}
|
||||||
|
|
||||||
{******************************************************************************
|
{******************************************************************************
|
||||||
TCustomForm
|
TCustomSplitter
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
|
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
|
@ -4735,7 +4735,7 @@ procedure TWinControl.DockOver(Source: TDragDockObject; X, Y: Integer;
|
|||||||
State: TDragState; var Accept: Boolean);
|
State: TDragState; var Accept: Boolean);
|
||||||
begin
|
begin
|
||||||
PositionDockRect(Source);
|
PositionDockRect(Source);
|
||||||
DoDockOver(Source,X,Y,State,Accept);
|
DoDockOver(Source, X, Y, State, Accept);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
@ -4746,7 +4746,7 @@ procedure TWinControl.DoDockOver(Source: TDragDockObject; X, Y: Integer;
|
|||||||
State: TDragState; var Accept: Boolean);
|
State: TDragState; var Accept: Boolean);
|
||||||
begin
|
begin
|
||||||
if Assigned(FOnDockOver) then
|
if Assigned(FOnDockOver) then
|
||||||
FOnDockOver(Self,Source,X,Y,State,Accept);
|
FOnDockOver(Self, Source, X, Y, State, Accept);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
|
@ -128,6 +128,7 @@ type
|
|||||||
procedure SlotHover(Sender: QObjectH; Event: QEventH); cdecl;
|
procedure SlotHover(Sender: QObjectH; Event: QEventH); cdecl;
|
||||||
function SlotKey(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
function SlotKey(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
||||||
procedure SlotMouse(Sender: QObjectH; Event: QEventH); cdecl;
|
procedure SlotMouse(Sender: QObjectH; Event: QEventH); cdecl;
|
||||||
|
procedure SlotNCMouse(Sender: QObjectH; Event: QEventH); cdecl;
|
||||||
procedure SlotMouseEnter(Sender: QObjectH; Event: QEventH); cdecl;
|
procedure SlotMouseEnter(Sender: QObjectH; Event: QEventH); cdecl;
|
||||||
procedure SlotMouseMove(Event: QEventH); cdecl;
|
procedure SlotMouseMove(Event: QEventH); cdecl;
|
||||||
procedure SlotMouseWheel(Sender: QObjectH; 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
|
DblClickThreshold = 3;// max Movement between two clicks of a DblClick
|
||||||
|
|
||||||
type
|
type
|
||||||
|
TWinControlAccess = class(TWinControl)
|
||||||
|
end;
|
||||||
TLastMouseInfo = record
|
TLastMouseInfo = record
|
||||||
Widget: QObjectH;
|
Widget: QObjectH;
|
||||||
MousePos: TQtPoint;
|
MousePos: TQtPoint;
|
||||||
@ -1535,6 +1538,10 @@ begin
|
|||||||
SlotPaint(Sender, Event);
|
SlotPaint(Sender, Event);
|
||||||
end;
|
end;
|
||||||
QEventContextMenu: SlotContextMenu(Sender, Event);
|
QEventContextMenu: SlotContextMenu(Sender, Event);
|
||||||
|
QEventNonClientAreaMouseButtonPress:
|
||||||
|
begin
|
||||||
|
SlotNCMouse(Sender, Event);
|
||||||
|
end;
|
||||||
QEventLCLMessage:
|
QEventLCLMessage:
|
||||||
begin
|
begin
|
||||||
SlotLCLMessage(Sender, Event);
|
SlotLCLMessage(Sender, Event);
|
||||||
@ -2013,6 +2020,16 @@ begin
|
|||||||
DeliverMessage(Msg);
|
DeliverMessage(Msg);
|
||||||
end;
|
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;
|
procedure TQtWidget.SlotMouseEnter(Sender: QObjectH; Event: QEventH); cdecl;
|
||||||
var
|
var
|
||||||
Msg: TLMessage;
|
Msg: TLMessage;
|
||||||
|
@ -1821,11 +1821,14 @@ begin
|
|||||||
Assert(False, 'Trace:WindowProc - Got WM_NCLBUTTONDOWN');
|
Assert(False, 'Trace:WindowProc - Got WM_NCLBUTTONDOWN');
|
||||||
|
|
||||||
//Drag&Dock support TCustomForm => Start BeginDrag()
|
//Drag&Dock support TCustomForm => Start BeginDrag()
|
||||||
if lWinControl <> nil then begin
|
if lWinControl <> nil then
|
||||||
if WParam = HTCAPTION then begin
|
begin
|
||||||
if lWinControl is TForm then begin
|
if WParam = HTCAPTION then
|
||||||
if TForm(lWinControl).DragKind = dkDock
|
begin
|
||||||
then lWinControl.BeginDrag(true);
|
if lWinControl is TCustomForm then
|
||||||
|
begin
|
||||||
|
if TWinControlAccess(lWinControl).DragKind = dkDock then
|
||||||
|
lWinControl.BeginDrag(true);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user