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

Автоматическое обновление лога в `TMemo` при добавлении записей в `TStringList` класса

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

Автоматическое обновление лога в TMemo при добавлении записей в TStringList класса

Вопрос, который выставил перед нами пользователь, связан с реализацией функций логирования в классе, использующем TStringList для хранения логов. Основная задача заключается в том, чтобы обеспечить возможность отображения содержимого TStringList в контроле, например, TMemo, на отдельной форме, не связывая при этом класс напрямую с формой.

Решение проблемы

Для решения задачи можно использовать механизм обратного вызова (callback). Класс, содержащий TStringList, будет иметь метод для установки обратного вызова, который будет вызываться при добавлении новой записи в лог.

Пример кода на Object Pascal (Delphi)

Type
  TLogCallback = procedure(const ALogStr: String) of object;

  TMyLogger = Class
    private
      FLogFile: TStringList;
      FCallback: TLogCallback;
    public
      constructor Create;
      procedure AddToLog(const ALogText: String);
      property Callback: TLogCallback read FCallback write SetCallback;
    private
      procedure SetCallback(const Value: TLogCallback);
  end;

{ TMyLogger }

constructor TMyLogger.Create;
begin
  FLogFile := TStringList.Create;
  FCallback := nil;
end;

procedure TMyLogger.SetCallback(const Value: TLogCallback);
begin
  FCallback := Value;
end;

procedure TMyLogger.AddToLog(const ALogText: String);
begin
  FLogFile.Add(ALogText);
  if Assigned(FCallback) then
    FCallback(ALogText);
end;

procedure TMyLogger.SetCallback(Value: TLogCallback);
begin
  FCallback := Value;
end;

{ VCL }
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    FLogger: TMyLogger;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FLogger := TMyLogger.Create;
  try
    FLogger.Callback := procedure(const S: String)
      begin
        Memo1.Lines.Add(S);
      end;
  finally
    FLogger.AddToLog('Пример записи в лог');
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FLogger.Free;
  inherited;
end;

Форма, использующая TMyLogger

На форме, где используется TMemo для отображения лога, следует зарегистрировать обработчик событий для вызова при получении новой записи лога.

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Создание и инициализация логгера
  FLogger := TMyLogger.Create;
  try
    // Привязка обработчика событий формы к логгеру
    FLogger.Callback := MemoUpdate;
    // Добавление начальной информации для демонстрации
    FLogger.AddToLog('Система логирования запущена');
  end;
end;

procedure MemoUpdate(const ALogText: String);
begin
  Memo1.Lines.Add(ALogText);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Освобождение ресурсов логгера
  FLogger.Free;
  inherited;
end;

Автономность класса

Таким образом, класс TMyLogger становится автономным и может быть использован в различных проектах без необходимости изменять свой код, при этом обеспечивая возможность интеграции с различными компонентами интерфейса пользователя, такими как TMemo, для отображения логических сообщений.

Вывод

Мы рассмотрели, как можно организовать логирование в классе, используя TStringList для хранения логов, и как обеспечить автоматическое обновление содержимого контрола TMemo на форме при добавлении новых записей в лог, не связывая при этом класс напрямую с формой. Это позволяет сохранить чистоту архитектуры приложения и упростить его поддержку и расширение.

Создано по материалам из источника по ссылке.

Автоматическое обновление лога в `TMemo` при добавлении записей в `TStringList` класса достигается через механизм обратного вызова, позволяя контролу `TMemo` отображать содержимое `TStringList` без прямой связи класса с формой.


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

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




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


:: Главная :: Списки ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-09 09:35:19/0.0060379505157471/0