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
Der schöne Günther

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

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
 
#2

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
 
#3

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
 
#4

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
 
#5

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
 
#6

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
 
#7

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
 
#8

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
Daniel
(Co-Admin)

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

AW: Ini-Writes global abfangen?

  Alt 10. Apr 2017, 14:48
Naja, mehrere Wege führen nach Rom.
Eine weitere Option wäre ein sog. "Virtual Method Interceptor". Damit kannst Du eine Art Benachrichtigungs-Mechanismus implementieren, der auf Methoden anderer Klassen reagiert.

http://docwiki.embarcadero.com/CodeE...eptor_(Delphi)

Je nachdem, was Dein eigentliches Ziel ist, setzt Du dies auf .UpdateFile oder gleich auf die WriteXX-Methoden an. Diese Lösung ist dahingehend sehr mächtig, Du kannst die Werte der an die eigentliche Methode zu übergebenen Parameter abfragen und ändern oder den Aufruf gänzlich unterbinden.
Daniel R. Wolf
mit Grüßen aus Hamburg
  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:58 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 by Thomas Breitkreuz