2012-11-02 19 views
0

我创建一个窗体的新实例,并尝试从面板上显示它作为一个孩子。但该表格似乎不可用。我的意思是我不能编辑任何文本框。但有其他控件,如树和按钮,似乎可点击。拉撒路帕斯卡/德尔福 - 儿童形式不可编辑

下面是代码:

procedure TForm1.ProcfrmSetupItemCategories; 
var 
    NewForm: TfrmSetupItemCategories; 
begin 
    NewForm:=TfrmSetupItemCategories.Create(BodyPanel); 

    NewForm.Parent := BodyPanel; 
    NewForm.Top:=5; 
    NewForm.Left:=5; 
    NewForm.Show; 
end; 

但如果我删除行NewForm.Parent := BodyPanel;形式是可编辑的,但它超出父窗体/面板。

而且当父设置,子窗体处于非活动状态(看标题栏)

我缺少的东西?请指教。 谢谢!

+1

您可以添加,为什么你需要使用的一种形式,并把它贴到面板上,你想达到什么样的一些细节。也许更好的解决方案是使用'TFrame'。 – Kromster

+0

是否'BodyPanel.Enabled = True'? –

+0

@TomHagen BodyPanel已启用。事实上,它是在设计时完成的,所以在那里没有什么改变。 – itsols

回答

0

表单需要成为其他表单或TApplication的子项。 TPanel不知道如何管理表单,因此您的表单不会被激活,其组件也不会获得焦点。

相反,您可以使用正常形式并编写一个过程来对齐表单。现在添加一个计时器到你的主窗体并从ontimer事件调用对齐过程。随着用户移动或调整主窗体的大小,其他窗体重新对齐。

戴夫·彼得斯 DP软件

+0

来自VB环境,我没有看到使用定时器的任何意义。究竟是什么原因在这里? – itsols

+0

您需要检查用户是否移动了主窗体,以便您可以调整其他窗体的位置以适应该窗体。你不会知道表单什么时候被移动,所以设置一个每隔几百毫秒到期的计时器,然后在ontimer事件中,你可以检查表单是否需要移动。 –

+0

嗯......我不太确定这是否是一种优雅或有效的移动孩子形式的方式。这似乎是可行的,但我认为这不是一个好主意,特别是对于像feepascal这样强大的OOP语言。创建一个包含子窗体的新类并且拥有一个构造函数来放置初始位置,然后使用重置位置来移动父窗体的方法不是更好吗? – itsols

相关问题