AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi von TCustomIniFile ableiten und auf alle Ini-Typen anwenden
Thema durchsuchen
Ansicht
Themen-Optionen

von TCustomIniFile ableiten und auf alle Ini-Typen anwenden

Ein Thema von Martin K · begonnen am 15. Dez 2007 · letzter Beitrag vom 15. Dez 2007
Antwort Antwort
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

von TCustomIniFile ableiten und auf alle Ini-Typen anwenden

  Alt 15. Dez 2007, 01:01
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?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

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

  Alt 15. Dez 2007, 09:02
Hallo Martin,

vielleicht ist das etwas für dich.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

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

  Alt 15. Dez 2007, 14:48
Super, danke
Funktioniert ausgezeichnet

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 von Delphi 7 PE:
[Fataler Fehler] Unit1.pas(10): System-Unit veraltet oder beschädigt: 'TClassHelperBase' fehlt
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

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

  Alt 15. Dez 2007, 15:07
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.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

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

  Alt 15. Dez 2007, 15:11
Lies dir den verlinkten Artikel durch, da steht es.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

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

  Alt 15. Dez 2007, 16:29
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!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:25 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