[英]Move a TabSheet between PageControls
我目前正在使用Delphi 7。
我有一個主窗體,它具有5個選項卡的PageControl。 我正在尋找一種方法,可以從pagecontrol中“分離”這些選項卡並將它們分別移動到新的表單中,該表單是在運行時創建的。 移動的工作表需要保留其所有組件(按鈕,標簽等),並且其功能與在pagecontrol中仍然保持的位置幾乎相同。
基本上,這種想法是,如果用戶希望同時查看2(或更多)頁面,則他/她可以將該工作表拖出表單區域,並為其創建一個新窗口。 當用戶完成操作后,多余的表單將用X按鈕關閉,工作表將返回到它在pagecontrol中的原始位置。
僅僅是一個額外的挑戰:是否有可能將這種解決方案做成一個單獨的單元,以便可以在運行時調用它“分離”任何控件? (按鈕,編輯,列表框,圖像等)?
謝謝!
托馬斯
此處顯示的方法與您的開始位置有所不同,但可能會接近您的要求。
這個想法是使用一個空的PageControl,在運行時可以在其上調整選項卡的速度。
每個Tab都是基於祖先的自己的表單,此處為TTemplate
,它將為Dockcontrol和Pageindex提供兩個屬性。
ManualDock(PageControl)
可用於將其添加到,而ManualDock(nil)
可將其從Pagecontrol中刪除。
這里使用CloseQuery對其進行重新定位並恢復PageIndex。
在此示例中,DoubleClick將取消停靠表單。
填充Pagecontrol的示例:
procedure TDemoForm.FormCreate(Sender: TObject);
var
i:Integer;
begin
for I := 0 to 9 do
begin
With TTemplate.Create(self) do
begin
Color := Random(255*255);
MyDockControl := PageControl1;
DockTabIndex := i;
Ctl3d := false;
Caption := Format('Tab %d',[i]);
Show;
end;
end;
end;
和模板的草稿:
type
TTemplate = class(TForm)
Button1: TButton;
RadioGroup1: TRadioGroup;
procedure FormDblClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
FMyDockControl: TWinControl;
FDockTabIndex: Integer;
procedure SetMyDockControl(const Value: TWinControl);
procedure Redock;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
Property MyDockControl:TWinControl read FMyDockControl Write SetMyDockControl;
Property DockTabIndex:Integer read FDockTabIndex write FDockTabIndex;
end;
var
Template: TTemplate;
implementation
{$R *.dfm}
procedure TTemplate.Redock;
begin
if Assigned(MyDockControl) then ManualDock(MyDockControl);
if MyDockControl is TPageControl then
TPageControl(MyDockControl).Pages[TPageControl(MyDockControl).ActivePageIndex].PageIndex := DockTabIndex;
end;
procedure TTemplate.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := not Assigned(MyDockControl);
Redock;
end;
Frame.DragKind
設置為dkDock
。 Frame.DragMode
設置為dmAutomatic
。 Form.PageControl.DockSite
設置為True
。 請參閱C:\\ Program Files \\ Borland \\ Demos \\ Docking中的示例,以獲取有關如何進一步自定義此示例的靈感。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.