Hallo,
beim kopieren 2er Objekte mit Assign krieg ich einen EConvertError, obwohl beide Objekte vom gleichen Typen sind. Hier mal ein bisschen Code:
Das Objekt
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Classes, Graphics, IniFiles;
type
TAnotherConfig = record
UseUnicode: Boolean;
WordWrap: Boolean;
Font: TFont;
end;
TabConfig = class(TComponent)
private
{ Private declarations }
fConfig: TAnotherConfig;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(aOwner: TComponent); override;
procedure SaveToFile(aFileName: TFileName);
procedure LoadFromFile(aFileName: TFileName);
published
{ Published declarations }
property Config: TConfig read fConfig write fConfig;
end;
implementation
constructor TabConfig.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
fConfig.Font := TFont.Create;
with fConfig do
begin
UseUnicode := False;
WordWrap := False;
Font.Name := 'Courier New';
Font.Charset := DEFAULT_CHARSET;
Font.Color := clBlack;
Font.Size := 10;
Font.Style := [];
end;
end;
procedure TabConfig.SaveToFile(aFileName: TFileName);
var
aIniFile: TIniFile;
begin
aIniFile := TIniFile.Create(aFileName);
with aIniFile do
begin
WriteBool('Option','UseUnicode', fConfig.UseUnicode);
WriteBool('Option','WordWrap', fConfig.WordWrap);
end;
//WriteFontToIni(aIniFile, fConfig.Font, 'Option');
aIniFile.Free;
end;
procedure TabConfig.LoadFromFile(aFileName: TFileName);
var
aIniFile: TIniFile;
begin
aIniFile := TIniFile.Create(aFileName);
with aIniFile do
begin
fConfig.UseUnicode := ReadBool('Option', 'UseUnicode', False);
fConfig.WordWrap := ReadBool('Option', 'WordWrap', False);
end;
//ReadFontFromIni(aIniFile, fConfig.Font,'Option');
aIniFile.Free;
end;
end.
So dann hab ich mir einen Dialog gebastelt der eine zusätzliche Property Einstellung vom Typ TabConfig hat.
Dialog
Delphi-Quellcode:
type
TConfigDlg = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
fConfig: TabConfig;
procedure SetConfig(aConfig: TabConfig);
public
{ Public declarations }
property Einstellung: TabConfig read fConfig write SetConfig;
end;
var
ConfigDlg: TConfigDlg;
implementation
{$R *.dfm}
procedure TConfigDlg.FormCreate(Sender: TObject);
begin
//TreeView.FullExpand;
fConfig := TabConfig.Create(Self);
end;
procedure TConfigDlg.FormDestroy(Sender: TObject);
begin
fConfig.Free;
end;
procedure TConfigDlg.SetConfig(aConfig: TabConfig);
begin
try
fConfig.Assign(aConfig); //Hier machts BOOOM!!
except
on E: EConvertError do
ShowMessage(E.ClassName + #10#13 + E.Message);
end;
//Zuweisungen, ein paar Checkboxen kriegen nen haken oder nicht
cbWordWrap.Checked := fConfig.Config.WordWrap;
cbUseUnicode.Checked := fConfig.Config.UseUnicode;
Font.FontName := fConfig.Config.Font.Name;
FontColor.SelectedColor := fConfig.Config.Font.Color;
end;
end.
aufgerufen wird der spaß wie folgt:
Delphi-Quellcode:
procedure TMainForm.ShowConfigDlgExecute(Sender: TObject);
begin
with TConfigDlg.Create(Self) do
begin
try
Config := meineConfig;
ShowModal;
finally
Free;
end;
end;
end;
Also beim Assign knallts aus dem Grund, dass es wohl nicht die gleichen Typen seien (sinds doch oder?) lustigerweise steht nach der
Exception jedoch in fConfig der Inhalt von aConfig und die Checkboxen werden richtig abgehakt etc, weiß wer rat woran es liegt?
mfg phlux