AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ini-Writes global abfangen?

Ein Thema von a.def · begonnen am 10. Apr 2017 · letzter Beitrag vom 12. Apr 2017
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
a.def
(Gast)

n/a Beiträge
 
#1

Ini-Writes global abfangen?

  Alt 10. Apr 2017, 13:52
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.

Geändert von a.def (10. Apr 2017 um 14:05 Uhr)
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:15
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.

Geändert von SebastianZ (10. Apr 2017 um 14:18 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:16
Ich hätte auch direkt die Klassenhelfer genannt, aber du hast schneller getippt
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#4

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:25
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)
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:34
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.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#6

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:37
Leider kein Glück. Nur ein kleines MemoryLeak am Ende.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:40
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:42
Danke für den Hinweis Daniel, hab nicht mit gedacht -.-
Vorher war auch nicht die Rede vom Custom sondern nur von TIniFile

Geändert von SebastianZ (10. Apr 2017 um 17:26 Uhr)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#9

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:43
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?
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:46
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 08:16 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