我有一个TForm,其中包含了很多TFrame's
,我想能够保存所有属性,如TEdit.text
,TCheckbox.checked
等的TFrame's
到一个共享存储。我如何实现与TJvFormStorage
和TJvAppIniFileStorage
?
工作流程如下:
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
中。
1条答案
按热度按时间zfciruhq1#
今天遇到了同样的问题,但是与保存网格相关的属性有关。
由于TJvFormStorage是TJvFormPlacement的一个类,因此调用
TJvFormPlacement.RestorePlacement
和TJvFormPlacement.SavePlacement
对我来说很有效。这里我的情况和解决方案,如果其他任何人福尔斯落入同样的坑:
我有一个带有TJvFormStorage(A)(像符咒一样工作)和一个面板的主窗体,在运行时加载一个外部VCL-Frame,包括一个TjvUltimGrid。目标是将网格属性加载和保存到同一个AppStorage中。
1.我在框架上添加了一个新的TJvFormStorage(B),它具有与主窗体相同的AppStorage,并手动设置AppStorage路径
1.检查fpState/fpSize/fpLocation的选项
1.然后在加载帧后调用存储B上的
TJvFormPlacement.RestorePlacement
1.主井型闭合事件上的威尔斯井为
TJvFormPlacement.SavePlacement