2015-04-01 39 views
1

我以兩種不同的方式顯示錶格。第一個作爲頁面控制標籤頁的孩子,如下所示:以兩種不同的方式顯示錶格

myform := Tmyform.Create(<tab sheet of page control>); 
myform.Parent := <tab sheet of page control>; 
myform.Align := alClient; 
myform.BorderStyle := bsNone; 

myform.Visible := true; 

此選項卡始終可見。

我第二次顯示它作爲一個正常的形式是這樣的:

myform := Tmyform.Create(nil); 
myform.ShowModal; 

我這樣做是因爲我需要看到和在第二時間隱藏的一些可視化控件來顯示相同​​的形式。

我的問題我注意到現在應用程序消耗更多的內存每次我打開使用第二種方法的形式,如果我在關閉事件中使用action := cafree當我嘗試關閉應用程序,同時打開標籤頁時訪問衝突所以我應該如何解決這個問題,而不使用兩個具有相同控件的窗體?

我用Delphi XE5

+1

你應該能夠做一個'SavemyForm:= myForm的;'在創建之前,那麼'myForm的:= SavemyForm;'模式窗體被釋放 – 2015-04-01 01:42:57

+2

或者停止後使用全局'myForm'指針開始。 – 2015-04-01 01:45:55

+0

很難診斷這裏的信息有什麼問題。就目前來看,我認爲我們能做的最好的事情包括猜測。 – 2015-04-01 07:35:16

回答

3

TForm從未打算或設計成可以嵌入到其他控件。改爲使用TFrame,它是專門爲此目的而設計的。

var 
    frame: TMyFrame; 
begin 
    frame := TMyFrame.Create(TheTabSheet); 
    frame.Parent := TheTabSheet; 
    frame.Align := alClient; 
    frame.Visible := true; 
end; 

var 
    form: TForm; 
    frame: TMyFrame; 
begin 
    form := TForm.CreateNew(nil); // yes, a blank TForm 
    try 
    form.Width := ...; 
    form.Height := ...; 
    form.Caption := ...; 
    frame := TMyFrame.Create(form); 
    frame.Parent := form; 
    frame.Align := alClient; 
    frame.Visible := true; 
    form.ShowModal; 
    finally 
    form.Free; 
    end; 
end; 
+0

我不確定這是否正確。什麼可停靠的形式? – 2015-04-01 07:32:51

+0

@DavidHeffernan:這是一個完全不同的野獸,而不是簡單地通過設置其'Parent'屬性來嵌入'TForm'。實施對接支持涉及整個框架。 – 2015-04-01 08:19:28

+0

從根本上講,它雖然圍繞着你所說的從來沒有打算做的事情。我常常將窗體嵌入其他窗口控件的子窗體中。它確實有效,它的目的是工作。你的答案的第一句話是錯誤的。框架確實是一個很好的選擇,但我不同意你在案文中提出的主張,甚至對問題的診斷。我經常按照問題中所描述的內容進行,沒有任何問題。 – 2015-04-01 08:33:21