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

Элементы управления с автовыравниванием

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

Элементы управления с автовыравниванием

Автор: Ralph Friedman

Я просто хочу в моем модуле заставить перемещаться поле редактирования (компонент Edit) синхронно с перемещением кнопки. При любом перемещении поля редактирования кнопка должна следовать за ним. Покопался в исходном коде VCL, но так ничего и не обнаружил...

При создании кнопки вы должны сделать ее "ребенком" поля редактирования (обычно, parent := self;). Также для компонента вы должны перекрыть метод CreateParams и установить Param.Style следующим образом:


Params.Style or WS_CLIPCHILDREN;

Проблема классическая! Чтобы синхронизировать движение кнопки с компонентом редактирования, вам нужно сделать кнопку дочерней для компонента редактирования и переопределить метод CreateParams для установки стиля WS_CLIPSIBLINGS.

Вот пример кода, который может помочь вам достичь этого:

unit Unit1;

interface

uses
  Windows, Messages, Controls, Forms, Dialogs, StdCtrls;

type
  TEditButton = class(TButton)
  private
    FParentEdit: TEdit;
  public
    constructor Create(AOwner: TComponent); override;
  end;

implementation

{ TEditButton }

constructor TEditButton.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Parent := AOwner; // Сделайте кнопку дочерней для компонента редактирования
end;

procedure TEditButton.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or WS_CLIPSIBLINGS;
end;

end.

В этом коде мы создали новый класс TEditButton, который наследуется от TButton. Мы переопределили конструктор Create для установки свойства Parent кнопки на владельца компонента (который должен быть экземпляром TEdit). Мы также переопределили метод CreateParams для добавления стиля WS_CLIPSIBLINGS к параметрам кнопки.

Когда вы создаете экземпляр класса TEditButton, убедитесь, что передаете валидный компонент редактирования как владельца. Например:

var
  Edit: TEdit;
  Button: TEditButton;

begin
  Edit := TEdit.Create(Self);
  // Инициализируйте компонент редактирования...

  Button := TEditButton.Create(Edit);
  // Добавьте кнопку в ваш форм или макет...
end.

Таким образом, кнопка автоматически будет перемещаться с компонентом редактирования при его изменении размера.

Обратите внимание, что вам может потребоваться настройка свойств anchoring и docking для кнопки и компонента редактирования, чтобы достичь желаемого поведения.

В статье описывается способ синхронного перемещения поля редактирования (компонент Edit) с кнопкой, создавая последнюю "ребенком" поля редактирования и перекрывая метод CreateParams для компонента.


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

Получайте свежие новости и обновления по 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 11:48:39/0.0055339336395264/1