Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem : Schreiben eines Memo1.Text in ein IniFile (https://www.delphipraxis.net/111845-problem-schreiben-eines-memo1-text-ein-inifile.html)

EccoBravo 30. Apr 2008 10:26

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Bitte nochmal nachsehen,
ich habe die Frage nach nochmaliger Testung überarbeitet

Danke

E. B.

TonyR 30. Apr 2008 11:33

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Steht in dem Moment, wo du GET aufrufst, überhaupt schon etwas in FNotiz drin???

Obwohl, wenn es leer wäre, dann wäre das Result ja auch leer ...

Dann, wie rufst du das ganze auf (?) wäre noch interessant zu wissen ...

EccoBravo 30. Apr 2008 12:38

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Hallo,

in M_Notiz.OnExit wird der Memo Inhalt in FNotiz geschrieben.

Delphi-Quellcode:
procedure TForm1.MNotizOnExit(Sender:TObject);
begin
    // Hier wird der MemoInhalt in FNotiz geschrieben
    SatzList.Items[SatzNummer].Notiz:=M_Notiz.Text;
end;
Dannach wird beim Neustart des Programmes das IniFile wieder eingelesen

Delphi-Quellcode:
SatzList.Items[SatzNummer].Notiz:=PatIni.ReadString('Bild','Notiz',EmptyStr);
...
M_Notiz.Text := SatzList.Items[SatzNummer].Notiz;
Das ist mein ChaosCode, der mich konsterniert.

Danke

E. B.

tomsel 30. Apr 2008 12:43

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Ja, dann lies dir deinen "ChaosCode" im letzten Post nochmal durch, vor allem den 2. Teil. Fällt da nix auf?

Edit: vergiss es, Irrtum :stupid:

EccoBravo 30. Apr 2008 13:06

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Hallo Tomsel,

ich habe in meinem letzten Code etwas vergessen.
Schau doch mal auf meinem vorherigen Code nach.

Gruß

E. B.

EccoBravo 30. Apr 2008 14:09

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Ich habs,

das Problem ist komplizierter als gedacht:

An diesem Object SatzList.Items[SatzNummer].Notiz hängen noch ein paar mehr Aufrufe als vorhin geschildert, und jedesmal vertauscht er die Zeichen.

So laufen über eine Property Notiz der Traffic mit Form1 und mit den IniFiles:

Delphi-Quellcode:
M_Notiz.Text := SatzList.Items[SatzNummer].Notiz
...
SatzList.Items[SatzNummer].Notiz := M_Notiz.Text

...

SatzList.Items[SatzNummer].Notiz:=PatIni.ReadString('bla', 'bla', EmptyString);
...
PatIni.WriteString('bla', 'bla', SatzList.Items[SatzNummer].Notiz);

Die Lösung:
Alle Zugriffe vom Form1 laufen wie bisher über die Eigenschaft Notiz
also über

Delphi-Quellcode:
SatzList.Items[SatzNummer].Notiz
Für das Speichern und Schreiben der Notiz in ein IniFile habe ich eine extra Property NotizIni geschaffen

Delphi-Quellcode:
SatzList.Items[SatzNummer].NotizIni
die den ganzen Verkehr mit den IniFiles abwickelt.

So kommen sich Form1-Traffic und IniFile-Traffic nicht mehr ins Gehege.

Das sieht so aus:
im Form1:

Delphi-Quellcode:
M_Notiz.Text := SatzList.Items[SatzNummer].Notiz;
...
SatzList.Items[SatzNummer].Notiz := M_Notiz.Text;

...

SatzList.Items[SatzNummer].NotizIni:=PatIni.ReadString('bla', 'bla', EmptyString);
...
PatIni.WriteString('bla', 'bla', SatzList.Items[SatzNummer].NotizIni);
und in der Klasse TSatz ist es wie folgt hinterlegt:

Delphi-Quellcode:
type
    TSatz = class(TObject)
    private
        ...
        FNotiz: string;
        ...
        ...
        function GetNotiz: string;
        function GetNotizIni: string;
        ...
        procedure SetNotiz(const Value: string);
        procedure SetNotizIni(const Value: string);
        ...
    public
        ...
        property Notiz: string read GetNotiz write SetNotiz;
        property NotizIni: string read GetNotizIni write SetNotizIni;
        ...
    end;

implementation

uses EB_Pat_Foto_U, controls;

...

function TSatz.GetNotiz: string;
begin
    result := FNotiz;
end;

function TSatz.GetNotizIni: string;
begin
    result := FNotizIni;
end;

...

procedure TSatz.SetNotiz(const Value: string);
begin
    FNotiz := value;
    FNotizIni := StringReplace(Value, #13 + #10,'##', [rfReplaceAll]);
end;

procedure TSatz.SetNotizIni(const Value: string);
begin
    FNotizIni := value;
    FNotiz := StringReplace(Value, '##', #13 + #10, [rfReplaceAll]);
end;
...

end.
Also vielen Dank fürs Mitdenken!

Fazit ist:
hat man mit einer Property einer Klasse unterschiedlichen Traffic-Bereiche (unterschiedliche Aufgaben) zu versorgen (dann ist es wohl auch nicht mehr eine Property), dann wäre es besser, diese Property in verschiedene Properties aufzuspalten, also für jede Aufgabe eine Property bereitzulegen.
Sicherlich eine Binsenweisheit, aber ich bin stolz, selbst drauf gekommen zu sein.

Also nochmals Danke
E. B.

jaenicke 30. Apr 2008 14:15

Re: Problem : Schreiben eines Memo1.Text in ein IniFile
 
Viel einfacher (und sinnvoller) wäre es, wenn du das Speichern auch tatsächlich innerhalb der Klasse TSatz machst. Dass du ansonsten außerhalb der Klasse TSatz beide Varianten brauchst, ist ja klar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Seite 2 von 2     12   

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