![]() |
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. |
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:
Das ganze müsste dann für jede Write-Variante gemacht werden.
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; Dazu sollte man sich etwas in die Classhelper einlesen: ![]() 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. |
AW: Ini-Writes global abfangen?
Ich hätte auch direkt die Klassenhelfer genannt, aber du hast schneller getippt ;-)
|
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:
'X' wird angezeigt, UpdateFile scheinbar aber nicht ausgeführt (da Datei nicht erstellt wird)
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; |
AW: Ini-Writes global abfangen?
Delphi-Quellcode:
Spontan hätte ich jetzt das "virtual" im Classhelper als schuldigen in verdacht. Nimm das einfach mal weg, dann sollte es laufen.
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; |
AW: Ini-Writes global abfangen?
Leider kein Glück. Nur ein kleines MemoryLeak am Ende.
|
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. |
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 |
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? |
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. |
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