Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi-子窗体具有父窗体的框架_Delphi_Tform - Fatal编程技术网

Delphi-子窗体具有父窗体的框架

Delphi-子窗体具有父窗体的框架,delphi,tform,Delphi,Tform,我有一个带有多个表单的delphi应用程序。最初,我尝试了一种设置,其中每个新打开的表单都是一个框架,当显示子对象时,该表单的“父对象”(无论调用哪个来打开表单)被隐藏,子对象被调整大小并重新定位,以提供一个无缝的窗口效果,当子对象关闭时,父对象被重新定位并再次可见。所有窗体的Windows标题栏都具有单一边框样式。 这种方法在定位方面效果很好,但是我遇到的问题是,当父窗体关闭,子窗体打开时,会出现明显的闪烁,并且在很短的一段时间内没有打开任何窗体,因此开始栏上的图标/托盘会移动,并且自身会变得

我有一个带有多个表单的delphi应用程序。最初,我尝试了一种设置,其中每个新打开的表单都是一个框架,当显示子对象时,该表单的“父对象”(无论调用哪个来打开表单)被隐藏,子对象被调整大小并重新定位,以提供一个无缝的窗口效果,当子对象关闭时,父对象被重新定位并再次可见。所有窗体的Windows标题栏都具有单一边框样式。 这种方法在定位方面效果很好,但是我遇到的问题是,当父窗体关闭,子窗体打开时,会出现明显的闪烁,并且在很短的一段时间内没有打开任何窗体,因此开始栏上的图标/托盘会移动,并且自身会变得隐藏和可见

有人对解决这个问题有什么建议吗?我想,如果我在应用程序中只有一个带有边框的表单,并且在这个边框内打开每个新表单,它可能会工作得更好——尽管我不确定具体如何做到这一点


非常感谢您的帮助。

很容易让一个表单在另一个表单中显示为子表单。创建一个新表单,该表单将包含并创建其他表单:

procedure TMainForm.FormCreate(Sender: TObject);
var
  F : TForm;
begin
  F := TOneOfYourChildForms.Create(Self);
  F.Parent := Self;
  F.Show();
end;

创建两个类似于此的子窗体,然后只在要显示的窗体上显示,在另一个窗体上隐藏。在子窗体上将BorderStyle设置为bsNone以删除标题。如果您自己这样创建表单,请关闭“项目设置”中表单的“自动创建”。

我已经成功地完成了此设计,并且我认为将“主表单”的内容也包含在TFrame中也很有帮助。当您想显示主窗体时,只需执行帧交换。

听起来您需要有一个窗体,其中有多个子窗体,一次显示其中一个子窗体。如果您没有为窗体设置父级/停靠子窗体,是否确定不会发生闪烁?换句话说,闪烁肯定是由停靠或托管表单引起的吗?这些相同的表单,当显示为自由浮动时,是否没有闪烁?您是否测试了这两种方式?抱歉,我不清楚我是如何表述的-表单没有指定父级或停靠,但我会在任何给定时间跟踪哪个表单是“父级”或处于活动状态,当打开新的“子级”时,它会从当前父级获取其位置和大小,然后在显示新表单时隐藏。因此,目前所有表单都是自由浮动的。有时,您需要做更多的工作才能使托管表单正常工作:嗨,Villie和David,我在这两种方法上都取得了一些成功,从这里找到的信息来看,但是,当设置子级的父级值时,似乎所有控件都是由父级表单指定的?在子窗体中未检测到任何按键或鼠标单击。。。这是标准的儿童家长行为吗?我怎样才能避免呢?谢谢你的帮助谢谢你的指南针John-当亲子关系可能存在多个“层次”时,这种技术有效吗?主窗体打开一个子菜单,可以打开第三个子菜单(但一次不超过3个子菜单)。我不明白为什么不能。我将在主窗体中创建一个控制器类来处理所有交换。。