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:
paul 2008-01-26 18:20:19 +00:00
parent 54d4d815b2
commit 1d29c3e238
5 changed files with 32 additions and 11 deletions

View File

@ -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;

View File

@ -1,7 +1,7 @@
{%MainUnit ../extctrls.pp}
{******************************************************************************
TCustomForm
TCustomSplitter
******************************************************************************
*****************************************************************************

View File

@ -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;
{------------------------------------------------------------------------------

View File

@ -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;

View File

@ -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;