gpt4 book ai didi

delphi - 在 PageControl 之间移动 TabSheet

转载 作者:行者123 更新时间:2023-12-03 07:39:05 27 4
gpt4 key购买 nike

我目前使用的是 Delphi 7。

我有一个主表单,它有一个带有 5 个选项卡的 PageControl。我正在寻找一种方法将这些选项卡从页面控件中“分离”,并将它们单独移动到一个新的表单(即运行时创建的)中。移动的工作表需要保留其所有组件(按钮、标签等),并且功能几乎与它在页面控件中的位置相同。

基本上,这个想法是,如果用户想要同时查看 2 个(或更多)页面,那么他/她可以将该工作表拖出表单区域,并为其创建一个新窗口。当用户完成后,使用 X 按钮关闭额外表单,工作表返回到页面控件中的原始位置。

只是为了额外的挑战:是否可以将此解决方案放入一个单独的单元中,以便可以调用它来在运行时“分离”任何控件? (按钮、编辑、列表框、图像等)?

谢谢!
托马斯

最佳答案

此处显示的方法与您的起始位置不同,但可能接近您的要求。
这个想法是使用一个空的 PageControl,在运行时在其上调整选项卡的速度。
每个选项卡都是一个基于祖先的自己的表单,这里的 TTemplate 将为 Dockcontrol 和 Pageindex 提供两个属性。
ManualDock(PageControl) 可用于将其添加到 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;

enter image description here

关于delphi - 在 PageControl 之间移动 TabSheet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26909701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com