dockmanager example: DockBook has Owner=Application.

BorderStyle=bsNone as a workaround for otherwise visible form caption.

git-svn-id: trunk@24901 -
This commit is contained in:
dodi 2010-04-25 05:24:28 +00:00
parent 6f5d42e5f5
commit f4b09c31ba
5 changed files with 40 additions and 7 deletions

View File

@ -381,13 +381,17 @@ const
function NoteBookCreate(AOwner: TWinControl): TCustomDockSite;
begin
(* Create default dockbook type.
Dockable notebooks must not have an specific owner.
*)
{
if assigned(AppDockBookClass) then
Result := AppDockBookClass.Create(AOwner)
else
}
Result := TEasyDockBook.Create(AOwner);
//Result := TEasyDockBook.Create(AOwner);
Result := TEasyDockBook.Create(Application);
{ TODO : form style should become bsNone when docked - workaround here }
Result.BorderStyle := bsNone;
end;
procedure NoteBookAdd(ABook: TCustomDockSite; AItem: TControl);
@ -676,7 +680,7 @@ begin
{$IFDEF replace}
NoteBook.ReplaceDockedControl(DropZone.ChildControl, NoteBook, nil, alCustom);
{$ELSE}
NoteBook.ManualDock(nil, nil); //float it - purpose???
//NoteBook.ManualDock(nil, nil); //float it - purpose???
//hack: manually dock the notebook
FReplacingControl := NoteBook; //ignore insert (see above)
NoteBook.ManualDock(FDockSite); //move into DockClients[]

View File

@ -12,9 +12,9 @@ inherited EasyDockBook: TEasyDockBook
OnCreate = FormCreate
OnDockDrop = FormDockDrop
OnDockOver = FormDockOver
OnEndDock = FormEndDock
OnGetSiteInfo = FormGetSiteInfo
OnUnDock = FormUnDock
Visible = True
object pnlDock: TPanel[0]
Left = 0
Height = 300

View File

@ -5,8 +5,8 @@ LazarusResources.Add('TEasyDockBook','FORMDATA',[
+'Top'#3#146#0#5'Width'#3#144#1#7'Caption'#6#12'EasyDockBook'#12'ClientHeight'
+#3','#1#11'ClientWidth'#3#144#1#8'DockSite'#9#8'DragKind'#7#6'dkDock'#7'OnCl'
+'ose'#7#9'FormClose'#8'OnCreate'#7#10'FormCreate'#10'OnDockDrop'#7#12'FormDo'
+'ckDrop'#10'OnDockOver'#7#12'FormDockOver'#13'OnGetSiteInfo'#7#15'FormGetSit'
+'eInfo'#8'OnUnDock'#7#10'FormUnDock'#7'Visible'#9#0#242#2#0#6'TPanel'#7'pnlD'
+'ock'#4'Left'#2#0#6'Height'#3','#1#3'Top'#2#0#5'Width'#3#144#1#5'Align'#7#8
+'alClient'#8'TabOrder'#2#0#14'UseDockManager'#8#0#0#0
+'ckDrop'#10'OnDockOver'#7#12'FormDockOver'#9'OnEndDock'#7#11'FormEndDock'#13
+'OnGetSiteInfo'#7#15'FormGetSiteInfo'#8'OnUnDock'#7#10'FormUnDock'#0#242#2#0
+#6'TPanel'#7'pnlDock'#4'Left'#2#0#6'Height'#3','#1#3'Top'#2#0#5'Width'#3#144
+#1#5'Align'#7#8'alClient'#8'TabOrder'#2#0#14'UseDockManager'#8#0#0#0
]);

View File

@ -54,6 +54,7 @@ HostDockSite.UpdateDockCaption (provide composed dock caption)
{.$DEFINE undockFix}
{$DEFINE closeFix}
{$DEFINE autoWrap} //request FloatingDockSiteClass
interface
@ -88,6 +89,7 @@ type
X, Y: Integer);
procedure FormDockOver(Sender: TObject; Source: TDragDockObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
procedure FormEndDock(Sender, Target: TObject; X, Y: Integer);
procedure FormGetSiteInfo(Sender: TObject; DockClient: TControl;
var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
procedure FormUnDock(Sender: TObject; Client: TControl;
@ -97,6 +99,7 @@ type
Tabs: TTabs;
CurTab: TTabButton;
protected
function GetFloatingDockSiteClass: TWinControlClass; override;
function GetDefaultDockCaption: string; override;
function GetControlTab(AControl: TControl): TTabButton;
procedure AfterUndock(tabidx: integer); virtual;
@ -166,12 +169,16 @@ begin
for i := DockClientCount - 1 downto 0 do begin
ctl := DockClients[i];
if not (csDestroying in ctl.ComponentState) then begin
{$IFDEF old}
ctl.Visible := True; //make hidden notebook pages visible
if ctl is TCustomForm then
if frm.CloseQuery then
frm.Close
else
ctl.Visible := True; //make hidden notebook pages visible
{$ELSE}
ctl.Visible := False; //hide notebook page
{$ENDIF}
end;
end;
inherited Destroy;
@ -230,6 +237,12 @@ begin
Source.DockRect := ScreenRect(pnlDock);
end;
procedure TEasyDockBook.FormEndDock(Sender, Target: TObject; X, Y: Integer);
begin
(* wrap into an FloatHost
*)
end;
procedure TEasyDockBook.FormGetSiteInfo(Sender: TObject; DockClient: TControl;
var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
begin
@ -363,6 +376,17 @@ begin
end;
end;
function TEasyDockBook.GetFloatingDockSiteClass: TWinControlClass;
begin
(* Try: request a floating site
*)
{$IFDEF autoWrap}
Result:= TFloatingSite;
{$ELSE}
Result := inherited GetFloatingDockSiteClass;
{$ENDIF}
end;
{$IFDEF new}
procedure TEasyDockBook.LoadFromStream(strm: TStream);
begin

View File

@ -25,6 +25,7 @@ Default floating sites are owned by Application,
{$DEFINE ownPanels} //elastic panels owned by DockMaster?
{.$DEFINE appDockMgr} //using special AppDockManager?
{.$DEFINE NeedHost} //request float host?
interface
@ -251,8 +252,12 @@ begin
Res.DragMode := dmAutomatic;
//wrap into floating site, if requested (not on restore Layout)
if fWrap then begin
{$IFDEF NeedHost}
Res.FloatingDockSiteClass := TFloatingSite;
{$ELSE}
//if not ForIDE then //problems with the IDE?
Res.OnEndDock := @FormEndDock; //float into default host site
{$ENDIF}
AForm.DisableAlign;
Site := WrapDockable(AForm);
AForm.EnableAlign;