Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi memo in ini speichern (https://www.delphipraxis.net/21821-memo-ini-speichern.html)

jfheins 26. Apr 2005 20:26

Re: memo in ini speichern
 
Ganz simple Lösung:
Datei sieht so aus:
Code:
11
12
Hallo
WeltIch bin da !
Also
Code:
Länge Memo1
Länge Memo2
<Inhalt Memo1><Inhalt Memo2>
:wink:

SirThornberry 26. Apr 2005 20:36

Re: memo in ini speichern
 
und falls man doch die memos in die ini packen will:
Hilfsfunktion
Delphi-Quellcode:
function ConvStrToHex(AStr: String): String;
var LGiveback, LStr: String;
    LCount: Integer;
begin
  setlength(LGiveback, length(AStr) * 2);
  for LCount := 1 to length(AStr) do
  begin
    LStr := IntToHex(Byte(AStr[LCount]), 2);
    move(LStr[1], LGiveback[(LCount - 1) * 2 + 1], 2);
  end;
  result := LGiveback;
end;

function ConvHexToStr(AHex: String): String;
var LGiveback: String;
    LCount: Integer;
begin
  setlength(LGiveback, Trunc(length(AHex) / 2));
  for LCount := 0 to length(LGiveback) - 1 do
    LGiveback[LCount + 1] := Char(StrToInt('$' + AHex[LCount * 2 + 1] + AHex[LCount * 2 + 2]));
  result := LGiveback;
end;
so wird in die Ini-Datei gespeichert
Delphi-Quellcode:
ini.WriteString('Section', 'MemoInhalt', ConvStrToHex(Memo1.Text));
und so wirds wieder ausgelesen
Delphi-Quellcode:
Memo1.Text := ConvHexToStr(ini.ReadString('Section', 'MemoInhalt', ''));

NicoDE 26. Apr 2005 20:38

Re: memo in ini speichern
 
Zitat:

Zitat von SirThornberry
Die kannst auch den Inhalt des memos in Hex-Zeichen wandeln und dann in die Ini speichern.

TStrings.CommaText dürfte noch einfacher sein...
Delphi-Quellcode:
uses
  IniFiles;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TMemIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')) do
    try
      WriteString('Test', 'Memo1', Memo1.Lines.CommaText);
      UpdateFile;
    finally
      Free;
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  with TMemIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')) do
    try
      Memo1.Lines.CommaText := ReadString('Test', 'Memo1', EmptyStr);
    finally
      Free;
    end;
end;

SirThornberry 26. Apr 2005 20:40

Re: memo in ini speichern
 
@NicoDE: Da muss ich dich leider enttäuschen. Zum Beispiel sind in einer Ini führende Leerzeischen nicht erlaubt und auch einige Sonderzeischen nicht. Wenn ich mich recht entsinne werden auch mehrere Leerzeischen hintereinander zu einem Leerzeichen.
Wenn du also den Inhalt des Memos speicherst wo 2 Leerzeischen hintereinander auftreten kannst du dann beim laden das pech haben das nur noch eines der beiden leerzeischen vorhanden ist.

NicoDE 26. Apr 2005 20:48

Re: memo in ini speichern
 
Zitat:

Zitat von SirThornberry
@NicoDE: Da muss ich dich leider enttäuschen. Zum Beispiel sind in einer Ini führende Leerzeischen nicht erlaubt und auch einige Sonderzeischen nicht. Wenn ich mich recht entsinne werden auch mehrere Leerzeischen hintereinander zu einem Leerzeichen.
Wenn du also den Inhalt des Memos speicherst wo 2 Leerzeischen hintereinander auftreten kannst du dann beim laden das pech haben das nur noch eines der beiden leerzeischen vorhanden ist.

Bei Leerzeichen setzt CommaText die betreffen Zeilen in Hochkommata...
Code:
Memo1="  foo","bar  "

SirThornberry 26. Apr 2005 20:57

Re: memo in ini speichern
 
probiere mal
Delphi-Quellcode:
  LIni.WriteString('Section', 'memotext', Memo1.Lines.CommaText);
  Memo1.Lines.CommaText := LIni.ReadString('Section', 'memotext', '');
wenn in Memo1 folgendes steht
Code:
textteil1   textteil nach 3 leerzeichen
danach steht in Memo1 bischen was anderes, und zwar genau dieser Text aber jedes wort auf einer neuen zeile

NicoDE 26. Apr 2005 21:02

Re: memo in ini speichern
 
Nö, mein Code funktioniert mit dem Text (Delphi 6 PE, Delphi 9 PE).

SirThornberry 26. Apr 2005 21:05

Re: memo in ini speichern
 
stimmt, da ist in meinem Testprojekt wohl irgendwas schief gegangen :oops:

Nicolai1234 26. Apr 2005 21:08

Re: memo in ini speichern
 
So sollte es auf jeden Fall gehen:
Delphi-Quellcode:
//zum speichern:
//ini.writestring('Name','Schlüssel',MemoToHexString(memo1);
//und zum laden:
//Memo1.lines.commatext := HexStringToMemo(ini.readstring('Name', 'Schlüssel', 'Fehler'))
function MemoToHexString(MEMO: TMemo): string;
function StrToHexString(const s : string):string;
begin
   if s = '' then
      Result := ''
   else
   begin
      SetLength(Result, Length(s)*2);
      BinToHex(PChar(s), PChar(Result), Length(s));
   end;
end;
begin
Result := StrToHexString(MEMO.Lines.CommaText);
end;

function HexStringToMemo(HS: String):string;
function HexStringToStr(s : string):string;
begin
   if s = '' then
      Result := ''
   else
   begin
      if Odd(length(s)) then
         s := '0'+s;
      SetLength(Result, Length(s) div 2);
      HexToBin(Pchar(s), PChar(Result), Length(Result));
   end;
end;
begin
result := hexstringtostr(hs);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.
Seite 3 von 3     123   

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