Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ini-Writes global abfangen? (https://www.delphipraxis.net/192336-ini-writes-global-abfangen.html)

a.def 10. Apr 2017 12:52

Ini-Writes global abfangen?
 
Für ein aktuelles Projekt wäre es nützlich, wenn ich alle Ini-Write-Befehle global abfangen könnte.
Am besten sollte das einfach in eins bestehendes Projekt einzuarbeiten sein (> 100.000 Zeilen).

Ist das irgendwie ohne große Hexerei möglich?

Edit:
bzw.Ini.UpdateFile abzufangen wäre auch nützlich.

SebastianZ 10. Apr 2017 13:15

AW: Ini-Writes global abfangen?
 
Spontan, ohne es getestet zu haben, wäre hier die einfachste Variante, die mir einfällt, einen globalen Classhelper für die TIniFile zu erstellen.
Delphi-Quellcode:
  TIniFileHelper = class helper for TIniFile
  public
    procedure WriteString(const Section, Ident, Value: String);
  end;


procedure TIniFileHelper.WriteString(const Section, Ident, Value: String);
begin
   //hier reagieren

  inherited WriteString(Section, Ident, Value);

end;
Das ganze müsste dann für jede Write-Variante gemacht werden.
Dazu sollte man sich etwas in die Classhelper einlesen:
http://docwiki.embarcadero.com/RADSt...elpers_(Delphi)

Alternativ leitest du die TIniFile-Klasse ab, und änderst alle Verwendungen.

Vielleicht gibt es auch noch andere Varianten die keinen zu großen Aufwand bedeuten, die mir aber im Moment nicht einfallen.

Der schöne Günther 10. Apr 2017 13:16

AW: Ini-Writes global abfangen?
 
Ich hätte auch direkt die Klassenhelfer genannt, aber du hast schneller getippt ;-)

a.def 10. Apr 2017 13:25

AW: Ini-Writes global abfangen?
 
Die class-helper sind wirklich toll. Danke für den Hinweis.
Nur leider funktioniert das nich mit UpdateFile. Eine Fehlermeldung bekomme ich keine und eine Ini-Datei wird auch nicht geschrieben.

Delphi-Quellcode:
 TIniFileHelper = class helper for TCustomIniFile
 public
  procedure UpdateFile; virtual;
 end;

procedure TIniFileHelper.UpdateFile;
begin
 ShowMessage('X');

 inherited UpdateFile;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 IniF: TCustomIniFile;
begin

 IniF := TMemIniFile.Create('......');

 try
  IniF.WriteString('section', 'ident', 'value');
 finally
  IniF.UpdateFile;
  IniF.Free;
 end;
end;
'X' wird angezeigt, UpdateFile scheinbar aber nicht ausgeführt (da Datei nicht erstellt wird)

SebastianZ 10. Apr 2017 13:34

AW: Ini-Writes global abfangen?
 
Delphi-Quellcode:
 TIniFileHelper = class helper for TCustomIniFile
 public
  procedure UpdateFile;
 end;

procedure TIniFileHelper.UpdateFile;
begin
 ShowMessage('X');

 inherited UpdateFile;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 IniF: TCustomIniFile;
begin

 IniF := TMemIniFile.Create('......');

 try
  IniF.WriteString('section', 'ident', 'value');
 finally
  IniF.UpdateFile;
  IniF.Free;
 end;
end;
Spontan hätte ich jetzt das "virtual" im Classhelper als schuldigen in verdacht. Nimm das einfach mal weg, dann sollte es laufen.

a.def 10. Apr 2017 13:37

AW: Ini-Writes global abfangen?
 
Leider kein Glück. Nur ein kleines MemoryLeak am Ende.

Daniel 10. Apr 2017 13:40

AW: Ini-Writes global abfangen?
 
Seit wann kann ein Class-Helper Methoden überschreiben und sich damit in die Vererbungs-Hierarchie einklinken? Soweit ich weiß, lassen sich lediglich neue Methoden hinzufügen.
Würde der Class-Helper also eine Methode "Update2" einführen, könnte aus dieser heraus die originale Methode "UpdateFile" ausgerufen werden. Das ist nicht der transparente Ablauf, der gewünscht ist, aber damit sollte am Ende eine INI-Datei geschrieben worden sein.

Mein Ansatz wäre eine eigene INI-Klasse.

SebastianZ 10. Apr 2017 13:42

AW: Ini-Writes global abfangen?
 
Danke für den Hinweis Daniel, hab nicht mit gedacht -.-
Vorher war auch nicht die Rede vom Custom sondern nur von TIniFile

a.def 10. Apr 2017 13:43

AW: Ini-Writes global abfangen?
 
Mhh jetzt bin ich hin und her gerissen.

Heißt das, dass ich am Ende doch gezwungen bin im ganzen Projekt Anpassungen vorzunehmen?

Ich verwende überall TCustomIniFile und TMemIniFile. Das abzuändern in TMeineIniKlasse wäre ja möglich.
Aber wie würdest du denn dann UpdateFile aufrufe? Ein eigenes UpdateFile was dann das richtige UpdateFile aufruft?

SebastianZ 10. Apr 2017 13:46

AW: Ini-Writes global abfangen?
 
Wenn man schon die Klasse ableitet, spricht aus meiner sicht nichts dagegen auch das UpdateFile zu überschreiben. Die Grundfunktion bleibt ja die gleiche und wird erweitert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 Uhr.
Seite 1 von 4  1 23     Letzte »    

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-2025 by Thomas Breitkreuz