我有一个名为fmTest
的表单。如果程序终止,我使用JVCL TJvFormStorage来存储INI文件中的表单位置,表单大小和表单位置。
但是,如果我尝试将Windows控件在运行时拖到底部,直到它只看到任务栏附近的标题部分,然后我释放它并终止程序,fmTest
无法启动在程序再次启动时的那个位置。
我被建议使用StoredProps
中的StoredValues
和TJvFormStorage
方法,但我真的不明白如何使用这些方法。
为什么TJvFormStorage无法正确存储表单位置?有没有办法使用TJvFormStorage
正确存储表单位置?
提前致谢。
答案 0 :(得分:0)
当表单关闭时,实际上在INI文件中保存了什么?
也许,或许,也许,JFS采取措施不会偶尔将表格带到显示器之外,从而忽略了太极端的价值观。尝试跟踪INI加载序列以查看它被忽略的条件。要缩小目标范围,请尝试发布和跟踪RestorePlacement
方法。
现在你引用了ini文件,这似乎是正确的行: NormPos = 135,734,623,1367
再次,将调用添加到前面提到的RestorePlacement
并逐行跟踪。
您会看到未读取INI文件或未应用值。
很可能你会以procedure InternalRestoreFormPlacement
的{{1}}结尾。继续跟踪它以查看数据未从INI读取的位置和原因,或者无法分配数据。
同样,即使你无法解决问题,你还有两个选择:
使用JvJVCLUtils.pas
属性(非方法)很简单:双击JSF组件并添加Form的左/上/宽/高属性以保存列表,取消选中{{1然后从保存列表中。
使用StoredProps
属性(非方法)很简单:双击pproperty,然后添加一个字符串属性或4个整数属性。使用组件的form position
和StoredValues
事件从表单的实际位置更新它们。
PS。采取安全措施,如果用户更改显示,显示计数或显示分辨率,窗口将不会位于屏幕外。
PPS。 JvFormPlacement和JvFormStorage样本可以检查为d:\ DelphiProjects \ Libs \ JediVCL \ jvcl \ examples \ JvAppStorage \ *。*
PPPS。 JediVCL官方论坛在http://newsportal.delphi-jedi.org/index.php