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

Создание Интерактивного Компонента на Основе TListBox с Автоматическим Обновлением TLabel

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

В данной статье мы рассмотрим процесс создания компонента на основе TListBox, который будет автоматически обновлять текст TLabel при изменении количества элементов в списке. Это может быть полезно, например, для отображения количества доступных элементов в пользовательском интерфейсе.

Проблема и Задача

Пользователь хочет создать компонент на основе TListBox, который будет обновлять текст TLabel, отображая текущее количество элементов в списке. Однако, в представленном коде компонента TChListBox реализация не учитывает изменение количества элементов, а только изменения в выборе элементов.

Оригинальный Компонент

Код, предоставленный пользователем, включает в себя компонент TChListBox, который наследуется от StdCtrls.TListBox и содержит обработку событий изменения выбора (CN_COMMAND). Однако, данный подход не решает задачу автоматического обновления TLabel при изменении количества элементов в списке.

Подтвержденное Решение

В TListBox уже имеется защищенный метод Changed(), который отправляет сообщение CM_CHANGED для обработки в дочерних классах. Для обработки изменений количества элементов, следует обрабатывать сообщения LB_ADDSTRING, LB_INSERTSTRING, LB_DELETESTRING и LB_RESETCONTENT.

Новый Компонент

Давайте создадим новый компонент TChListBox, который будет обрабатывать указанные сообщения и вызывать обработчик OnItemCountChange при изменении количества элементов.

unit UChangeListBox;

interface

uses
  Classes, StdCtrls, Messages;

type
  TChListBox = class(StdCtrls.TListBox)
  private
    FOnItemCountChange: TNotifyEvent;
  protected
    procedure WndProc(var Message: TMessage); override;
  published
    property OnItemCountChange: TNotifyEvent read FOnItemCountChange write FOnItemCountChange;
  end;

procedure Register;

implementation

procedure TChListBox.WndProc(var Message: TMessage);
var
  OldCount: Integer;
begin
  case Message.Msg of
    LB_ADDSTRING, LB_INSERTSTRING, LB_DELETESTRING:
    begin
      inherited;
      if (Message.Result >= 0) and Assigned(FOnItemCountChange) then
        FOnItemCountChange(Self);
      UpdateLabel;
    end;
    LB_RESETCONTENT:
    begin
      OldCount := Items.Count;
      inherited;
      if (OldCount <> Items.Count) and Assigned(FOnItemCountChange) then
        FOnItemCountChange(Self);
      UpdateLabel;
    end;
  else
    inherited;
  end;
end;

procedure TChListBox.UpdateLabel;
begin
  with OwnerDo
    Label1.Caption := IntToStr(ListBox1.Items.Count);
end;

procedure Register;
begin
  RegisterComponents('MyComponents', [TChListBox]);
end;

end.

Использование Компонента

Для использования нового компонента TChListBox, его необходимо подключить к вашему проекту и обработать событие OnItemCountChange:

procedure TForm1.ListBox1OnItemCountChange(Sender: TObject);
begin
  Label1.Caption := IntToStr(ListBox1.Items.Count);
end;

initialization
  ListBox1.OnItemCountChange := @TForm1.ListBox1OnItemCountChange;

Теперь, при каждом изменении количества элементов в ListBox1, текст Label1 будет автоматически обновляться.

Заключение

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

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

Создание и настройка компонента `TListBox`, который самостоятельно обновляет информацию в `TLabel` о количестве элементов в списке.


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

Получайте свежие новости и обновления по 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 08:21:23/0.005958080291748/0