2012-01-04 64 views
0

我有一個delphi應用程序與多種形式。最初我嘗試了一種設置,其中每個新打開的窗體都是一個框架,並且此窗體的「父窗體」(以打開窗體爲準)隱藏起來,因爲孩子被顯示出來,孩子被調整大小並重新定位以產生無縫的效果有一個窗口,當孩子關閉時,父母被重新定位並再次變得可見。所有窗體對於Windows標題欄都有一個bsSingle邊框樣式。 這種方法適用於定位,但是我的問題是一個明顯的閃爍,因爲父窗體關閉並且孩子打開,並且由於有一小段時間沒有打開窗體,所以開始欄上的圖標/托盤會轉移周圍和本身變得隱藏和可見。德爾福 - 兒童窗體有父母的框架

有沒有人對解決這個問題有什麼建議?我想也許如果我只在應用程序中有一個帶有邊框的窗體,並且在這個邊框內打開了每個新窗體,那麼它會更好 - 雖然我不確定如何完全做到這一點。

任何幫助,非常感謝。

+2

聽起來像你需要有一個形式有多個孩子,你一次顯示其中之一。 – 2012-01-04 21:05:12

+0

如果你不是父母/對接表單,你確定閃爍不會發生嗎?換句話說,是否由於對接或託管表單而導致閃爍?這些相同的形式,當顯示自由浮動沒有閃爍?你測試過兩種方法嗎? – 2012-01-04 21:27:20

+0

不好意思,我不清楚它是如何表達的 - 表格並沒有專門設計或停靠,但是我隨時瞭解哪種形式是「父母」或在任何給定時間處於活動狀態,何時打開一個新的「孩子」就會獲得其位置和當前父級的大小,然後在顯示新形式時將其隱藏。所以現在所有的形式都是自由浮動的。 – jmc 2012-01-05 00:39:55

回答

1

很容易讓一個窗體在另一個窗體中出現。創建一個新的形式,其中將包含與創建其他形式:

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

創建兩個孩子形成與此類似,那麼只是顯示上要顯示和隱藏在其他的一個。將子窗體上的BorderStyle設置爲bsNone以刪除標題。如果您自己創建它們,請在項目設置中關閉自動創建。

+1

您有時需要做更多的工作才能使託管窗體很好地工作:http://stackoverflow.com/questions/4385948/how-to-avoid-issues-when-embedding-a-tform-in-another -tform/4386129#4386129 – 2012-01-04 21:23:43

+0

嗨Villie和大衛,我已經取得了一些成功,這兩種方法和從這裏找到的信息http://stackoverflow.com/questions/4385948/how-to-avoid-issues-when-embedding-a -platform-in-another-tform/4386129#4386129但是,它似乎設置孩子的父母值 - 所有控制是從父窗體口授?在子窗體中沒有檢測到按鍵或鼠標點擊...這是標準的孩子 - 父母行爲嗎?我怎樣才能避免它?感謝您的幫助 – jmc 2012-01-05 03:20:59

1

我已經受夠了這種設計的成功,我認爲它有助於有「主表」一份TFRAME中的內容也是如此。當你想顯示主窗體時,你只需要執行一個框架交換。

+0

感謝John的指針 - 當父子關係可能存在多個「層次」時,這種技術是否有效?例如,主窗體打開一個子菜單,可以打開第三個子菜單(但每次不超過3個)。 – jmc 2012-01-05 00:41:09

+0

我不明白爲什麼不。我會在處理所有交換的主窗體中創建一個控制器類。 – 2012-01-05 12:52:53