我需要一個重新創建表單的程序。
原因是我有許多不同組件的表單。這些組件值(編輯框文本、復選框是否選中等)保存在 onhide 中并在 iside onshow 中再次加載。這可確保在程式運行之間保留所有用戶設定。
當他們做出改變(有意或無意地)導致問題時,問題就來了。我希望能夠在首次安裝應用程式時將表單“重置”回默認設定。
我可以創建一個運行此代碼的重置按鈕
FormName.free;
DeleteFile('FormNameSettings.ini');
FormName:=TFormName.Create(Application);
FormName.show;
這就是需要的。表單關閉,清除設定檔案(因此再次顯示時不會恢復狀態),然后重新創建表單。該表單現在具有原始默認設定。
我的問題是試圖將該代碼放入一個可以從多種表單中輕松呼叫的函式中。
procedure ResetForm(form:tform;filename:string);
begin
form.free;
if fileexists(filename)=true then deletefile(filename);
<what goes here to recretae the form by the passed tform?>
end;
任何人都可以幫助該 ResetForm 程式正常作業嗎?最新的德爾福 11。
uj5u.com熱心網友回復:
要回傳新創建的表單,我們實際上需要表單的 var 引數,但這并不是很優雅,因為不能將派生的表單類傳遞給 TForm 型別的 var 引數,并且必須進行硬轉換以取悅編譯器. 即使使用回傳 TForm 的函式也不會好多少,因為結果很可能分配給派生表單類的變數,并且編譯器也會拒絕該變數。
感謝泛型,我們可以撰寫一些代碼來克服這些限制。由于 Delphi 不支持獨立的通用程序或函式,我們將其包裝在記錄宣告中:
type
TFormUtils = record
public
class procedure ResetForm<T: TForm>(var form: T; const filename: string); static;
end;
我們還需要保存一些關于表單的資訊以備后用:
- 表單的所有者
- 是當前顯示的表格
這允許重新創建表單。
class procedure TFormUtils.ResetForm<T>(var form: T; const filename: string);
begin
var formOwner := form.Owner;
var formShowing := form.Showing;
form.free;
if fileexists(filename) then
deletefile(filename);
form := T.Create(formOwner);
if formShowing then
form.Show;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/460922.html
標籤:德尔福
上一篇:在SQLServer資料庫表中存盤TTreeView
下一篇:如何在后臺運行回圈程式?
