Thema: Delphi Komischer EConvertError

Einzelnen Beitrag anzeigen

Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#1

Komischer EConvertError

  Alt 21. Sep 2005, 22:53
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
Christian "phlux" Arndt
  Mit Zitat antworten Zitat