AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Create wird nicht aufgerufen bei Klassen-Chaos
Thema durchsuchen
Ansicht
Themen-Optionen

Create wird nicht aufgerufen bei Klassen-Chaos

Ein Thema von glkgereon · begonnen am 13. Jan 2006 · letzter Beitrag vom 14. Jan 2006
 
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Create wird nicht aufgerufen bei Klassen-Chaos

  Alt 13. Jan 2006, 19:20
Hi

ich schreibe grade an einer Importer-Klasse...
Diese soll möglichst einfach erweiterbar sein, daher habe ich mir folgendes Konzept ausgedacht:
Eine virtuelle Basisklasse, und mehrere Klassen, die diese Implementieren, für jeden Datentyp einen.

Code:
Delphi-Quellcode:
type
  TImport_Virtual = class(TObject)
  private //Basisklasse für ImportTyp
    FFileName: String;
    FFileExt: String;
  public
    FData: TDataArray;
    function OpenFile(var Err: String):Boolean; virtual; abstract;
    function CloseFile(var Err: String):Boolean; virtual; abstract;
    function Analyse(var Err: String):Boolean; virtual; abstract;
    function GetData(var Dat: TDataArray):Boolean;
    property FileName: String read FFileName write FFileName;
  end;

  TImportClassType = class of TImport_Virtual;

  TDBFImport = class(TImport_Virtual)
  private //Import aus DBF-Datei
    FDBF: TDBFFile;
  public
    constructor Create;
    destructor Destroy;
    function OpenFile(var Err: String):Boolean; override;
    function CloseFile(var Err: String):Boolean; override;
    function Analyse(var Err: String):Boolean; override;
  end;


type
  TImport = TImport_Virtual;
Als erstes die Basisklasse, dann eine Implementation für ein DBF-File.

So rufe ich das ganze auf:
Delphi-Quellcode:
Typ:=GetImportType(Edt_FileName_Man.FileName);
    if Typ=nil then
      begin
      Log('Importer laden',True,cEFileExt);
      Exit;
      end
    else
      Log('Importer laden',False,'');

    Import:=Typ.Create;
GetImportType gibt den zu der Endung passenden Importer zurück...das klapp auch. in Classname steht auch TDBFImport drin!
Delphi-Quellcode:
  TImportType = record //Import-Typ
    Import: TImportClassType;
    FileExt: String;
    Description: String;
  end;

  TImportArray = array[0..0] of TImportType;

const //Import-Typen
  cImports: TImportArray = (
  (Import: TDBFImport; FileExt: '.dbf'; Description: 'DBF-Datei')
  );

function GetImportType(FileName: String): TImportClassType;
var Ext: String;
    i, ID:Integer;
begin
  Ext:=LowerCase(ExtractFileExt(FileName));
  ID:=-1;
  for i:=0 to Length(cImports)-1 do
    if LowerCase(cImports[i].FileExt)=Ext then ID:=i;
  if ID=-1 then
    Result:=nil
  else
    Result:=cImports[ID].Import;
end;
Nun setze ich im OnCreate der Implementation FFileExt auf die jeweilige Endung (hier '.dbf')
Allerdings wird dieses Create nie aufgerufen!

hat irgendeiner eine Idee warum das so ist?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz