Delphi - TFrame如何保存和加载组件属性

5lwkijsr  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个TForm,其中包含了很多TFrame's,我想能够保存所有属性,如TEdit.textTCheckbox.checked等的TFrame's到一个共享存储。我如何实现与TJvFormStorageTJvAppIniFileStorage
工作流程如下:
1.创建一个VCL表单,在那里放置一个TJvAppIniFileStorage,设置FileName属性。
1.创建一个VCL Frame,在那里放置一个TjvFormStorage,设置AppStoragePath属性。
1.在框架上添加一个TEdit,并使用表单存储设计器将.text属性添加到TJvFormStorage
1.将框架添加到调色板。
1.在VCL表单中,添加VCL框架。
我尝试通过将在TForm中创建的TJvAppIniStorage传递给TFrame's并在运行时设置TJvFormStorage属性的.AppStorage来实现这一点。这并没有保存预定义的属性,但writeString可以工作。

// FormShow event of the Main Form
procedure TMainForm.FormShow(Sender: TObject);
begin
  frFrame.init(fs_AppIniStorage); // fs_AppIniStorage is the component on the MainForm
end;

// The init function of the TFrame
procedure TfrFrame.init(var FormStorage : TJvAppIniFileStorage);
begin
  fs_FrameStorage.AppStorage := FormStorage;
  fs_FrameStorage.WriteString('test','test'); // <- is written into the storage
end;

字符串
这会将以下内容写入文件:

[Test] // fs_FrameStorage.AppStoragePath
test=test// fs_FrameStorage.WriteString


我还尝试手动保存和加载组件属性:

fs_FrameStorage.SaveFormPlacement; // At .FormClose of TMainForm 
fs_FrameStorage.RestoreFromPlacement; // At TfrFrame.init


在此之后,文件看起来像这样:

[Test] // fs_FrameStorage.AppStoragePath
test=test// fs_FrameStorage.WriteString
FormVersion=0 // new


然后我尝试在 Delphi 设计器中将TFrame.fs_FrameStorage.AppStoragePath设置为TMainForm


的数据
结果也是一样。
调用StoredProps将导致输入edit.text

ShowMessage(fs_FrameStorage.StoredProps.Text);
// Shows ed_Frame.text


当我在同一个TForm上添加两个组件时,在本例中为TMainForm,它按预期工作,保存所有输入的属性。但是我不能从MainForm访问Frames子组件,因为TJvFormStorage放置在MainForm中。

zfciruhq

zfciruhq1#

今天遇到了同样的问题,但是与保存网格相关的属性有关。
由于TJvFormStorage是TJvFormPlacement的一个类,因此调用TJvFormPlacement.RestorePlacementTJvFormPlacement.SavePlacement对我来说很有效。
这里我的情况和解决方案,如果其他任何人福尔斯落入同样的坑:
我有一个带有TJvFormStorage(A)(像符咒一样工作)和一个面板的主窗体,在运行时加载一个外部VCL-Frame,包括一个TjvUltimGrid。目标是将网格属性加载和保存到同一个AppStorage中。
1.我在框架上添加了一个新的TJvFormStorage(B),它具有与主窗体相同的AppStorage,并手动设置AppStorage路径
1.检查fpState/fpSize/fpLocation的选项
1.然后在加载帧后调用存储B上的TJvFormPlacement.RestorePlacement
1.主井型闭合事件上的威尔斯井为TJvFormPlacement.SavePlacement

相关问题