mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 09:59:23 +02:00
LCL: Improved docking of coolbar/controlbar (patches by Andrey Zubarev), Issue #0032027
git-svn-id: trunk@55423 -
This commit is contained in:
parent
f76b44a7c6
commit
39d4577487
@ -539,7 +539,7 @@ type
|
|||||||
function Dragging(AControl: TControl): boolean; virtual;abstract;
|
function Dragging(AControl: TControl): boolean; virtual;abstract;
|
||||||
procedure RegisterDockSite(Site: TWinControl; DoRegister: Boolean); virtual;abstract;
|
procedure RegisterDockSite(Site: TWinControl; DoRegister: Boolean); virtual;abstract;
|
||||||
|
|
||||||
procedure DragStart(AControl: TControl; AImmediate: Boolean; AThreshold: Integer);virtual;abstract;
|
procedure DragStart(AControl: TControl; AImmediate: Boolean; AThreshold: Integer; StartFromCurrentMouse:Boolean=False);virtual;abstract;
|
||||||
procedure DragMove(APosition: TPoint); virtual;abstract;
|
procedure DragMove(APosition: TPoint); virtual;abstract;
|
||||||
procedure DragStop(ADrop: Boolean); virtual;abstract;
|
procedure DragStop(ADrop: Boolean); virtual;abstract;
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ begin
|
|||||||
if assigned(AControl) and assigned(FOnBandDrag) then
|
if assigned(AControl) and assigned(FOnBandDrag) then
|
||||||
FOnBandDrag(self, AControl, Result);
|
FOnBandDrag(self, AControl, Result);
|
||||||
if Result then
|
if Result then
|
||||||
DragManager.DragStart(AControl, True, -1);
|
DragManager.DragStart(AControl, True, -1, True);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomControlBar.DragOver(Source: TObject; X, Y: Integer; State: TDragState;
|
procedure TCustomControlBar.DragOver(Source: TObject; X, Y: Integer; State: TDragState;
|
||||||
|
@ -936,7 +936,7 @@ begin
|
|||||||
aRect := ClientRect;
|
aRect := ClientRect;
|
||||||
InflateRect(aRect, cUserDragArea, cUserDragArea);
|
InflateRect(aRect, cUserDragArea, cUserDragArea);
|
||||||
if not PtInRect(aRect, Point(X, Y)) then
|
if not PtInRect(aRect, Point(X, Y)) then
|
||||||
DragManager.DragStart(FVisiBands[FDraggedBandIndex].Control, True, -1);
|
DragManager.DragStart(FVisiBands[FDraggedBandIndex].Control, True, -1, True);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -15,9 +15,18 @@
|
|||||||
{ TCustomDockForm }
|
{ TCustomDockForm }
|
||||||
|
|
||||||
procedure TCustomDockForm.DoAddDockClient(Client: TControl; const ARect: TRect);
|
procedure TCustomDockForm.DoAddDockClient(Client: TControl; const ARect: TRect);
|
||||||
|
procedure FixClientPlacing(Client: TControl);
|
||||||
|
begin
|
||||||
|
Client.BorderSpacing.Left:=0;
|
||||||
|
Client.BorderSpacing.Right:=0;
|
||||||
|
Client.BorderSpacing.Top:=0;
|
||||||
|
Client.BorderSpacing.Bottom:=0;
|
||||||
|
Client.BorderSpacing.Around:=0;
|
||||||
|
end;
|
||||||
begin
|
begin
|
||||||
inherited DoAddDockClient(Client, ARect);
|
inherited DoAddDockClient(Client, ARect);
|
||||||
Client.Align := alClient;
|
Client.Align := alClient;
|
||||||
|
FixClientPlacing(Client);
|
||||||
if ([csLoading,csDestroying]*ComponentState=[]) then
|
if ([csLoading,csDestroying]*ComponentState=[]) then
|
||||||
Visible := True;
|
Visible := True;
|
||||||
end;
|
end;
|
||||||
|
@ -95,7 +95,7 @@ type
|
|||||||
procedure RegisterDockSite(Site: TWinControl; DoRegister: Boolean);override;
|
procedure RegisterDockSite(Site: TWinControl; DoRegister: Boolean);override;
|
||||||
|
|
||||||
//The Drag and Drop routines
|
//The Drag and Drop routines
|
||||||
procedure DragStart(AControl: TControl; AImmediate: Boolean; AThreshold: Integer); override;
|
procedure DragStart(AControl: TControl; AImmediate: Boolean; AThreshold: Integer; StartFromCurrentMouse:Boolean=False); override;
|
||||||
procedure DragMove(APosition: TPoint); override;
|
procedure DragMove(APosition: TPoint); override;
|
||||||
procedure DragStop(ADropped: Boolean); override;
|
procedure DragStop(ADropped: Boolean); override;
|
||||||
|
|
||||||
@ -595,6 +595,8 @@ begin
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
DragMsg := dmDragDrop;
|
DragMsg := dmDragDrop;
|
||||||
|
ADockObjectCopy.Control.Top:=0;
|
||||||
|
ADockObjectCopy.Control.Left:=0;
|
||||||
SendDragMessage(ADockObjectCopy.DragTarget, DragMsg, ADockObjectCopy,
|
SendDragMessage(ADockObjectCopy.DragTarget, DragMsg, ADockObjectCopy,
|
||||||
ADockObjectCopy.DragTarget, ADockObjectCopy.DragPos);
|
ADockObjectCopy.DragTarget, ADockObjectCopy.DragPos);
|
||||||
end;
|
end;
|
||||||
@ -639,7 +641,7 @@ begin
|
|||||||
Result := FPerformer.Dragging(AControl)
|
Result := FPerformer.Dragging(AControl)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDragManagerDefault.DragStart(AControl: TControl; AImmediate: Boolean; AThreshold: Integer);
|
procedure TDragManagerDefault.DragStart(AControl: TControl; AImmediate: Boolean; AThreshold: Integer; StartFromCurrentMouse:Boolean=False);
|
||||||
//Start a drag operation
|
//Start a drag operation
|
||||||
begin
|
begin
|
||||||
if FPerformer = nil then
|
if FPerformer = nil then
|
||||||
@ -649,7 +651,10 @@ begin
|
|||||||
else
|
else
|
||||||
FThresholdValue := DragThreshold;
|
FThresholdValue := DragThreshold;
|
||||||
FWaitForTreshold := not AImmediate;
|
FWaitForTreshold := not AImmediate;
|
||||||
GetCursorPos(FStartPosition);
|
if StartFromCurrentMouse then
|
||||||
|
FStartPosition:=AControl.ClientToScreen(point(0,0))
|
||||||
|
else
|
||||||
|
GetCursorPos(FStartPosition);
|
||||||
|
|
||||||
AControl.BeforeDragStart;
|
AControl.BeforeDragStart;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user