Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Komischer EConvertError (https://www.delphipraxis.net/53722-komischer-econverterror.html)

phlux 21. Sep 2005 21:53


Komischer EConvertError
 
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? :stupid:

mfg phlux :hi:

marabu 22. Sep 2005 06:37

Re: Komischer EConvertError
 
Hi Christian,

du hast die Methoden Assign() und AssignTo() gar nicht überschrieben...

Grüße vom marabu

phlux 22. Sep 2005 13:58

Re: Komischer EConvertError
 
Hi Marabu!
*gnarf* ich hab stundenlang in der Delphi-Hilfe geguckt und das Virtual übersehen, danke dir :)
*methode überschreib*

mfg phlux :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz