2010-09-20 98 views
2

我在delphi中做了一個簡單的表單設計器,在窗體上拖放一個按鈕,然後繪製它,但事情是我不能保存/加載這個項目,因爲我不知道該怎麼做,反正有我可以將其保存到.rc文件並從那裏加載它?表單設計器保存並加載

回答

3

這取決於你如何編程你的表單設計師。在Delphi設計器中創建的表單中,所有組件(和子組件)都是從TForm.Components數組屬性引用的。所有的控件在TForm.Controls數組屬性中也被引用(如果你刪除一個容器控件,它的所有子控件也會被銷燬)。

如果您已遵循該模式,您只需監視TForm.Components數組的添加(可能使用覆蓋的TForm.Notification方法)並使用此數據來構建持久表單的文件。

1

Delphi將表單佈局存儲在* .dfm文件中。您可以使用它的結構來保存您的項目。文件是文本的,可供人類閱讀。解析文件就像一條一條線一樣地分析文件並不難。如果您需要更多幫助,請提出要求。

+0

它不是德爾福的事情,它從德爾福項目總獨立的,即時消息使我的歐文的表單設計器,是阿貝爾形式保存爲rc文件,在任何C++或C項目中使用它或者甚至ASM 德爾福沒有任何關係,只是編程語言即時通訊使用 – killercode 2010-09-20 06:16:23

+1

我意識到你正在爲其他東西建立窗體設計器。我建議您將文件保存爲像dephis * .dfm文件那樣的結構。您在應用程序中使用該文件來保存/加載表單。在保存時,您可以保存* .dfm和任何其他文件類型。 – 2010-09-20 06:23:29

0

如果您只想保存您在設計師設計的窗體,請使用TFileStream等功能在用戶保存時創建RC文件。您可能更適合使用自己的表單文件格式,並可選擇導出爲RC文件,因爲RC文件並非真正用於存儲您可能需要的任何設計時間信息。

+0

問題是,我不知道該怎麼做,我該怎麼做才能獲得新創建的控件?和他們的大小?我將數據保存到文件沒有問題,但問題是如何生成此數據 – killercode 2010-09-20 09:26:55

+1

實際問題是您的問題沒有提供關於您如何製作此設計器的足夠信息,您如何跟蹤有關信息您正在創建的控件等。例如,聽起來您只是創建控件並將它們放置在表單上,​​而沒有任何方式跟蹤您正在創建的內容。這聽起來不太有效。你想要做的是打破你的問題,使它們更具體,然後我們可以給你更好的答案。 – GrandmasterB 2010-09-20 17:54:07

2

VCL包含使用其內置DFM支持的方法。在the Delphi 2009 documentation for ObjectBinaryToText有一個樣本;我想這也適用於D7。並且IIRC在D5幫助中已經有ComponentToString的代碼片段 - 搜索ObjectBinaryToText

+1

還有對稱函數 - ObjectTextToBinary。在D7幫助中都有一個全功能的轉換樣本。 – 2010-09-20 16:51:06

1

你可以使用類似delphi .DFM的東西。計算所有對象,然後讀取它們的屬性並將它們寫入文件。示例代碼:

For i:0 To Form1.ComponentsCount-1 Do Begin 
    // Read Component Attributes And Write Them In Your Format 
End; 
+0

ty,現在我知道該怎麼做:) – killercode 2010-10-10 15:05:11