{
-> Question:
How can I store some TRichEdit components and TEdit Components in a single file?
-> Answer:
Use a filestream and a reader or writer object.
These ease the tasks of writing strings to a binary stream and reading them back.
}{
-> Frage:
Wie kann ich den Inhalt einiger TRichEdit und TEdit Komponenten in einer einzigen
Datei speichern?
-> Antwort:
Verwende einen FileStraem und ein Reader/Writer Objekt.
Damit kann man leicht strings in einen binдren Stream speichern und zurьcklesen.
}// Save routine // Speichern Routine procedure SaveEditcontrols(const FileName: string; const Controls: arrayof TCustomEdit);
var
fs: TFilestream;
writer: TWriter;
i: Integer;
ss: TStringstream;
begin
fs := TFilestream.Create(FileName, fmCreate);
try
writer := TWriter.Create(fs, 4096);
tryfor i := Low(Controls) to High(Controls) doif Controls[i] is TCustomRichedit thenbegin
ss := TStringstream.Create(EmptyStr);
trywith TRichedit(Controls[i]) dobegin
Plaintext := False;
Lines.SaveToStream(ss);
end;
writer.WriteString(ss.Datastring);
finally
ss.Free;
end;
endelse
writer.WriteString(Controls[i].Text);
finally
writer.Free;
end;
finally
fs.Free;
end;
end;
// Load routine // Lade Routine procedure LoadEditcontrols(const FileName: string; const Controls: arrayof TCustomEdit);
var
fs: TFilestream;
reader: Treader;
i: Integer;
ss: TStringstream;
begin
fs := TFilestream.Create(FileName, fmOpenread or fmShareDenyWrite);
try
reader := Treader.Create(fs, 4096);
tryfor i := Low(Controls) to High(Controls) doif Controls[i] is TCustomRichedit thenbegin
ss := TStringstream.Create(reader.ReadString);
trywith TRichedit(Controls[i]) dobegin
Plaintext := False;
Lines.LoadfromStream(ss);
end;
finally
ss.Free;
end;
endelse
Controls[i].Text := reader.ReadString;
finally
reader.Free;
end;
finally
fs.Free;
end;
end;
// Example to store 2 TRichEdits and 3 Edit Controls to one file // Beispiel, um 3 TRichEdits und 3 TEdit Controls in einer Datei zu speichern procedure TForm1.Button1Click(Sender: TObject);
begin
SaveEditControls('C:\temp\temp.dat',
[richedit1, richedit2, edit1, edit2, edit3]);
end;
Обзор кода:
Общая информация
Код содержит два процедура: SaveEditcontrols и LoadEditcontrols. Эти процедуры используются для хранения множества компонентов TRichEdit и TEdit в одном файле и загрузки их обратно.
Процедура SaveEditcontrols
Эта процедура сохраняет содержимое компонентов TRichEdit и TEdit в файл. Она принимает два параметра: FileName (имя файла для сохранения) и Controls (массив компонентов TCustomEdit).
Создается объект TFilestream (fs) с указанным именем файла, используя режим fmCreate.
Создается объект TWriter (writer) с потоком fs и буфером размером 4096 байт.
Процедура перебирает массив компонентов и проверяет каждый из них на тип TRichEdit или TEdit.
Если компонент является TRichEdit, то его содержимое сохраняется в объекте TStringstream (ss) с помощью метода Lines.SaveToStream.
Объект writer записывает строковую информацию из потока ss в файл.
Если компонент не является TRichEdit (то есть он TEdit), то его текстовое содержимое записывается напрямую в файл с помощью метода writer.WriteString.
Процедура LoadEditcontrols
Эта процедура загружает содержимое файла в множество компонентов TRichEdit и TEdit. Она принимает два параметра: FileName (имя файла для загрузки) и Controls (массив компонентов TCustomEdit).
Создается объект TFilestream (fs) с указанным именем файла, используя режим fmOpenread or fmShareDenyWrite.
Создается объект TReader (reader) с потоком fs и буфером размером 4096 байт.
Процедура перебирает массив компонентов и проверяет каждый из них на тип TRichEdit или TEdit.
Если компонент является TRichEdit, то его содержимое загружается из файла с помощью метода Lines.LoadFromStream, после чтения строковой информации из файла в объект TStringstream (ss) с помощью метода reader.ReadString.
Если компонент не является TRichEdit (то есть он TEdit), то его текстовое содержимое устанавливается равным строке, прочитанной из файла с помощью выражения Controls[i].Text := reader.ReadString;.
Пример
В примере кода демонстрируется, как сохранять два компонента TRichEdit и три компонента TEdit в одном файле, используя процедуру SaveEditcontrols. Сохраненный файл имеет имя "C:\temp\temp.dat".
Альтернативное решение
Вместо использования объектов TFilestream и TReader/Writer можно использовать тип TEncodedString из единицы System.SysUtils, чтобы сериализовать и десериализовать содержимое компонентов. Это может быть более лёгким и эффективным, особенно для больших объемов данных.
В примере кода показано, как модифицировать процедуры SaveEditcontrols и LoadEditcontrols, используя тип TEncodedString.
Сохранить несколько контролов TRichEdit и TEdit в один файл можно с помощью использования файловой системы и объектов чтения-записи.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.