![]() |
Re: memo in ini speichern
Ganz simple Lösung:
Datei sieht so aus:
Code:
Also
11
12 Hallo WeltIch bin da !
Code:
:wink:
Länge Memo1
Länge Memo2 <Inhalt Memo1><Inhalt Memo2> |
Re: memo in ini speichern
und falls man doch die memos in die ini packen will:
Hilfsfunktion
Delphi-Quellcode:
so wird in die Ini-Datei gespeichert
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;
Delphi-Quellcode:
und so wirds wieder ausgelesen
ini.WriteString('Section', 'MemoInhalt', ConvStrToHex(Memo1.Text));
Delphi-Quellcode:
Memo1.Text := ConvHexToStr(ini.ReadString('Section', 'MemoInhalt', ''));
|
Re: memo in ini speichern
Zitat:
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; |
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. |
Re: memo in ini speichern
Zitat:
Code:
Memo1=" foo","bar "
|
Re: memo in ini speichern
probiere mal
Delphi-Quellcode:
wenn in Memo1 folgendes steht
LIni.WriteString('Section', 'memotext', Memo1.Lines.CommaText);
Memo1.Lines.CommaText := LIni.ReadString('Section', 'memotext', '');
Code:
danach steht in Memo1 bischen was anderes, und zwar genau dieser Text aber jedes wort auf einer neuen zeile
textteil1 textteil nach 3 leerzeichen
|
Re: memo in ini speichern
Nö, mein Code funktioniert mit dem Text (Delphi 6 PE, Delphi 9 PE).
|
Re: memo in ini speichern
stimmt, da ist in meinem Testprojekt wohl irgendwas schief gegangen :oops:
|
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. |
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