Delphi   发布时间:2022-04-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Delphi应用程序配置的最佳方法是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我会自己回答这个问题,但如果你比我快,或者不喜欢我的解决方案,请随时提供你的答案.我只是想出了这个想法,并希望对此有一些看法.

目标:一种可读的配置类(如INI文件),但不必写入(并且在添加了新的配置项之后进行调整)加载和保存方法.

我想创建一个类

TMyConfiguration = class (TConfiguration)
  ...
  property ShowFlags : Boolean read FShowFlags write FShowFlags;
  property NumFlags : Integer read FNumFlags write FNumFlags;
end;

调用TMyConfiguration.Save(继承自TConfiguration)应该创建一个文件

[Options]
ShowFlags=1
NumFlags=42

问题:最好的方法是什么?

解决方法

这是我提出的解决方案.

我有一个基础课

TConfiguration = class
protected
  type
    TCustomSaveMethod = function  (Self : TObject; P : Pointer) : String;
    TCustomLoadMethod = procedure (Self : TObject; const Str : String);
public
  procedure Save (const Filename : String);
  procedure Load (const Filename : String);
end;

Load方法看起来像这样(相应地保存方法):

procedure TConfiguration.Load (const Filename : String);
const
  PropNotFound = '_PROP_NOT_FOUND_';
var
  IniFile : TiniFile;
  Count : Integer;
  List : PPropList;
  Typename,PropName,InputString,MethodName : String;
  LoadMethod : TCustomLoadMethod;
begin
  IniFile := TiniFile.Create (FileName);
  try
    Count := GetPropList (Self.ClassInfo,tkProperties,nil) ;
    GetMem (List,Count * SizeOf (PPropInfo)) ;
    try
      GetPropList (Self.ClassInfo,List);
      for I := 0 to Count-1 do
        begin
        Typename  := String (List [I]^.PropType^.Name);
        PropName  := String (List [I]^.Name);
        InputString := IniFile.ReadString ('Options',PropNotFound);
        if (InputString = PropNotFound) then
          ConTinue;
        MethodName := 'Load' + Typename;
        LoadMethod := Self.MethodAddress (MethodName);
        if not Assigned (LoadMethod) then
          raise EConfigLoadError.Create ('No load method for custom type ' + TypeName);
        LoadMethod (Self,InputString);
        end;
    finally
      FreeMem (List,Count * SizeOf (PPropInfo));
    end;
  finally
    FreeAndNil (IniFilE);
  end;

基类可以为delphi默认类型提供加载和保存方法.然后,我可以为我的应用程序创建一个配置,如下所示:

TMyConfiguration = class (TConfiguration)
...
published
  function  SaveTObject (P : Pointer) : String;
  procedure LoadTObject (const Str : String);
published
  property BoolOption : Boolean read FBoolOption write FBoolOption;
  property ObjOption : TObject read FObjOption write FObjOption;
end;

自定义保存方法的示例:

function TMyConfiguration.SaveTObject (P : Pointer) : String;
var
  Obj : TObject;
begin
  Obj := TObject (p);
  Result := Obj.ClassName;  // does not make sense; only example;
end;

大佬总结

以上是大佬教程为你收集整理的Delphi应用程序配置的最佳方法是什么?全部内容,希望文章能够帮你解决Delphi应用程序配置的最佳方法是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。