Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сохранить несколько контролов в один файл

Delphi , Компоненты и Классы , Компоненты

Сохранить несколько контролов в один файл


{ 
 -> 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: array of TCustomEdit); 
var 
  fs: TFilestream; 
  writer: TWriter; 
  i: Integer; 
  ss: TStringstream; 
begin 
  fs := TFilestream.Create(FileName, fmCreate); 
  try 
    writer := TWriter.Create(fs, 4096); 
    try 
      for i := Low(Controls) to High(Controls) do 
        if Controls[i] is TCustomRichedit then  
        begin 
          ss := TStringstream.Create(EmptyStr); 
          try 
            with TRichedit(Controls[i]) do  
            begin 
              Plaintext := False; 
              Lines.SaveToStream(ss); 
            end; 
            writer.WriteString(ss.Datastring); 
          finally 
            ss.Free; 
          end; 
        end 
      else 
        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: array of TCustomEdit); 
var 
  fs: TFilestream; 
  reader: Treader; 
  i: Integer; 
  ss: TStringstream; 
begin 
  fs := TFilestream.Create(FileName, fmOpenread or fmShareDenyWrite); 
  try 
    reader := Treader.Create(fs, 4096); 
    try 
      for i := Low(Controls) to High(Controls) do 
        if Controls[i] is TCustomRichedit then  
        begin 
          ss := TStringstream.Create(reader.ReadString); 
          try 
            with TRichedit(Controls[i]) do  
            begin 
              Plaintext := False; 
              Lines.LoadfromStream(ss); 
            end; 
          finally 
            ss.Free; 
          end; 
        end 
      else 
        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).

  1. Создается объект TFilestream (fs) с указанным именем файла, используя режим fmCreate.
  2. Создается объект TWriter (writer) с потоком fs и буфером размером 4096 байт.
  3. Процедура перебирает массив компонентов и проверяет каждый из них на тип TRichEdit или TEdit.
  4. Если компонент является TRichEdit, то его содержимое сохраняется в объекте TStringstream (ss) с помощью метода Lines.SaveToStream.
  5. Объект writer записывает строковую информацию из потока ss в файл.
  6. Если компонент не является TRichEdit (то есть он TEdit), то его текстовое содержимое записывается напрямую в файл с помощью метода writer.WriteString.

Процедура LoadEditcontrols Эта процедура загружает содержимое файла в множество компонентов TRichEdit и TEdit. Она принимает два параметра: FileName (имя файла для загрузки) и Controls (массив компонентов TCustomEdit).

  1. Создается объект TFilestream (fs) с указанным именем файла, используя режим fmOpenread or fmShareDenyWrite.
  2. Создается объект TReader (reader) с потоком fs и буфером размером 4096 байт.
  3. Процедура перебирает массив компонентов и проверяет каждый из них на тип TRichEdit или TEdit.
  4. Если компонент является TRichEdit, то его содержимое загружается из файла с помощью метода Lines.LoadFromStream, после чтения строковой информации из файла в объект TStringstream (ss) с помощью метода reader.ReadString.
  5. Если компонент не является 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компоненты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:24:16/0.0056099891662598/1