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

Взять один символ из потока памяти

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

Взять один символ из потока памяти


- Создали новый компьютер, "Майк Тайсон" назвали.
- Ну и в чем главное отличие?
- Два байта памяти.


 unit MsFormR;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Memo1: TMemo;
    ListBox1: TListBox;
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Splitter1: TSplitter;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    MemStr1: TMemoryStream;
  public
    procedure ShowMemStr;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  MemStr1 := TMemoryStream.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Str1: TFileStream;
begin
  OpenDialog1.Filter :=
    'Any file (*.*)|*.*';
  OpenDialog1.DefaultExt := '*';
  if OpenDialog1.Execute then
  begin
    Str1 := TFileStream.Create (
      OpenDialog1.Filename, fmOpenRead);
    try
      MemStr1.LoadFromStream (Str1);
      ShowMemStr;
      Button2.Enabled := true;
    finally
      Str1.Free;
    end;
  end;
end;

procedure TForm1.ShowMemStr;
begin
  Memo1.Lines.LoadFromStream (MemStr1);
end;

procedure TForm1.Button2Click(Sender: TObject);
const
  ndx: LongInt = 1;
var
  pch:  PChar;
  tmpC: Char;
begin
  pch := MemStr1.Memory;
  tmpC := pch[ndx];
  pch[ndx] := #0;
  ListBox1.Items.SetText(MemStr1.Memory);
  pch[ndx] := tmpC;

  if ndx < MemStr1.Size then
    Inc(ndx)
  else
    Button2.Enabled := False;
end;




end.

Загрузить весь проект

Программа на Delphi - это простой приложение с формой, которое позволяет пользователю открыть файл, загрузить его содержимое в память, отобразить содержимое в контроле Memo и затем изменять отдельные символы загруженной данных.

Вот разбивка кода:

  1. Определен класс TForm1, который представляет основную форму приложения.
  2. Объявлены несколько контролов: диалог открытия (OpenDialog1), диалог сохранения (SaveDialog1), контрол Memo (Memo1), список (ListBox1) и два кнопки (Button1 и Button2).
  3. Процедура FormCreate вызывается при создании формы, и она инициализирует объект памяти (MemStr1) для хранения загруженных данных.
  4. Процедура Button1Click обрабатывает событие клика кнопки Button1. Она открывает файл с помощью диалога открытия, загружает его содержимое в память, отображает содержимое в контроле Memo и включает кнопку Button2.
  5. Процедура ShowMemStr вызывается при загрузке данных и заполняет контрол Memo загруженными данными.
  6. Процедура Button2Click обрабатывает событие клика кнопки Button2. Она берет одиночный символ из памяти по указанному индексу (ndx), заменяет его на null-символ (#0), обновляет список с модифицированными данными и проверяет, есть ли еще символы для изменения (т.е., если ndx меньше размера памяти). Если есть, она увеличивает ndx, в противном случае включает кнопку Button2.

Основное отличие этого проекта от обычного компьютерного программы - использование объекта памяти (TMemoryStream) для хранения и манипуляции данными. Это позволяет эффективно обрабатывать большие объемы данных.

В отношении извлечения одного символа из памяти код не делает это явно. Однако, процедура Button2Click изменяет отдельные символы, заменяя их на null-символы (#0).

В статье рассматривается создание компьютера 'Майк Тайсон' с памятью на два байта и демонстрируется пример работы с потоком памяти в Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Потоки ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:48:30/0.0031599998474121/0