Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi von TCustomIniFile ableiten und auf alle Ini-Typen anwenden (https://www.delphipraxis.net/105072-von-tcustominifile-ableiten-und-auf-alle-ini-typen-anwenden.html)

Martin K 15. Dez 2007 01:01


von TCustomIniFile ableiten und auf alle Ini-Typen anwenden
 
Hallo,

ich möchte gerne IniDateien um ein paar Methoden erweitern.
Dies soll dann allgemein für alle von TCustomIniFile abgeleiteten IniFiles-Klassen möglich sein (TIniFile, TMemIniFile, TRegistryIniFile, ...).
Nun weiß ich aber leider nicht so ganz, wie ich das anstellen soll.

Folgender Beispielcode soll das verdeutlichen, was ich umsetzen will:

Delphi-Quellcode:
type
  TMyCustomIniFile = class(TCustomIniFile)
  public
    procedure WriteMyString;
  end;

  // nun sollen die Erweiterungen z.B. auf TIniFile, TMemIniFile etc. angewendet werden
  TMyIniFile = class(TIniFile, TMyCustomIniFile); // geht leider nicht

implementation

procedure TMyCustomIniFile.WriteMyString;
begin
  WriteString('My', 'String', 'Hello world!');
end;
Oder auch so etwas funktioniert leider nicht:
Delphi-Quellcode:
var ini: TMyCustomIniFile;
begin
  ini := TMemIniFile.Create('test.ini');
  // ...
end;
Nun habe ich mir überlegt, dass meine TMyCustomIniFile einfach im Konstruktor eine Instanz von einer von TCustomIniFile abgeleiteten Klasse übergeben bekommt und auf diese alle abstrakten Methoden anwendet, etwa so:
Delphi-Quellcode:
type
  TMyCustomIniFile = class(TCustomIniFile)
  private
    FIniFile: TCustomIniFile;
  public
    constructor Create(IniFile: TCustomIniFile);
    procedure WriteString(const Section, Ident, Value: String); override;
    // und für alle weiteren abstrakten Methoden
    procedure WriteMyString;
  end;

implementation

constructor TMyCustomIniFile.Create(IniFile: TCustomIniFile);
begin
  inherited Create(IniFile.FileName);
  FIniFile := IniFile;
end;

// das ganze für alle abstrakten Methoden
procedure TMyCustomIniFile.WriteString(const Section, Ident, Value: String);
begin
  FIniFile.WriteString(Section, Ident, Value);
end;

procedure TMyCustomIniFile.WriteMyString;
begin
  WriteString('My', 'String', 'Hello world!');
end;
Hier gibt es nur das Problem, wenn in der von TCustomIniFile abgeleiteten Klasse, von der im Konstruktor eine Instanz übergeben wurde, eine Methode überschrieben wurde (z.B. WriteInteger bei TRegistryIniFile).

Eine letzte Möglichkeit die mir einfällt:
TMyCustomIniFile nicht von TCustomIniFile abzuleiten (einfach nur von TObject) und eben nur die neuen Methoden implementieren, evtl. dann noch eine Methode GetIniFile um auf die "normalen" Methoden einer (der übergebenen) IniDatei zuzugreifen.

Nun die eigentliche Frage:
Gibt es hier möglicherweise eine ganz einfache Lösung, die ich übersehen habe?
Wie würdet ihr so etwas lösen?

Hawkeye219 15. Dez 2007 09:02

Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
 
Hallo Martin,

vielleicht ist das etwas für dich.

Gruß Hawkeye

Martin K 15. Dez 2007 14:48

Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
 
Super, danke :thumb:
Funktioniert ausgezeichnet :bounce1:

So habe ich es jetzt gemacht:
Delphi-Quellcode:
type
  TMyHelperIniFile = class helper for TCustomIniFile
  public
    procedure WriteMyString;
  end;

implementation

procedure TMyHelperIniFile.WriteMyString;
begin
  WriteString('My', 'String', 'Hello world!');
end;
Funktioniert allerdings nicht unter Delphi 7, gibt es da noch keine Class Helper ?
Zitat:

Zitat von Delphi 7 PE
[Fataler Fehler] Unit1.pas(10): System-Unit veraltet oder beschädigt: 'TClassHelperBase' fehlt


Progman 15. Dez 2007 15:07

Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
 
class helper for... wurde eigentlich für .NET gemacht und ist wohl erst in den Delphi-Versionen, die auch .NET unterstützen, denk ich mal.

Luckie 15. Dez 2007 15:11

Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
 
Lies dir den verlinkten Artikel durch, da steht es.

Martin K 15. Dez 2007 16:29

Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
 
Zitat:

Helper classes were introduced in Delphi 8 as a way of binding the VCL to the .Net framework.
Okay, alles klar.
Macht ja nichts, Delphi 7 benutze ich sowieso nur noch selten.
Vorwiegend Turbo Delphi (BDS 2006).

Danke nochmal an alle!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 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