type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
{ Обявляем класс нашего едита как потомок от стандартного}
type TMySuperEdit=class(TCustomEdit)
public
{ Внутри класса переопредялем процедуру CreateParams,
т.к. нужный нам стиль можно изменить только на создании или пересоздании
окна }
Procedure CreateParams(Var Params: TCreateParams); override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Procedure TMySuperEdit.CreateParams(Var Params: TCreateParams);
Begin
{ Вызываем родительский обработчик, чтобы он сделал все процедуры по созданию объекта класса }
inherited CreateParams(Params);
{ Изменяем стиль }
With Params Do Style:=Style or ES_CENTER;
End;
procedure TForm1.FormCreate(Sender: TObject);
begin
{ Создаём едит на основе нашего класса и кладём его на форму }
With TMySuperEdit.Create(Self) Do
Parent:=Self;
end;
End.
Давайте разбираться: код создает компонент TEdit с центрированием текста на форме. Для этого он создает класс TMySuperEdit, который наследуется от стандартного TCustomEdit, и переопределяет процедуру CreateParams.
Вот что происходит в коде:
Событие FormCreate основной формы (TForm1) вызывается, которое создает экземпляр класса TMySuperEdit на форме.
В процедуре CreateParams класса TMySuperEdit он вызывает метод CreateParams, чтобы выполнить стандартный процесс создания компонента TEdit.
Затем он устанавливает свойство Style компонента TEdit в включенный режим (ES_CENTER), что позволяет центрировать текст.
Для улучшения кода есть несколько предложений:
Вместо использования отдельного класса (TMySuperEdit) для достижения центрирования, можно использовать встроенные свойства и методы компонента TEdit. Например, можно установить свойство Alignment напрямую на компонент TEdit.
Рассмотрите создание повторно используемого контрола (например, пользовательского контрола или компонента) для encapsulation этого поведения, а не модифицируйте стандартный компонент TEdit.
Вот пример альтернативного решения:
unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;typeTForm1=class(TForm)Edit1:TEdit;procedureFormCreate(Sender:TObject);private{ Private declarations }public{ Public declarations }end;varForm1:TForm1;implementation{$R *.dfm}procedureTForm1.FormCreate(Sender:TObject);beginEdit1.Alignment:=taCenter;end;end.
В этом примере мы просто устанавливаем свойство Alignment компонента TEdit (Edit1) в значение taCenter в событии FormCreate. Это достигает того же результата, не модифицируя стандартный компонент TEdit.
Надеюсь это поможет!
В статье описывается пример создания TEdit в Delphi с центровкой текста по горизонтали за допомогою класса TMySuperEdit и переопределения процедуры CreateParams.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.