Выравнивание по центру в TEdit?

Материал из DRKB

Выравнивание по центру в TEdit?[править | править код]

Tedit center align.jpg

TEdit не поддерживает выравниваение текста по центру и по правой стороне - лучше использовать компонент TMemo. Вам понадобится запретить пользователю нажимать Enter, Ctrl-Enter и всевозможные комбинации клавиш со стрелками, чтобы избежать появления нескольких сторк в Memo. Этого можно добиться и просматривая содержимое текста в TMemo в поисках кода возврата каретки (13) и перевода строки(10) на событиях TMemo Change и KeyPress. Можно также заменять код возврата каретки на пробел - для того чтобы позволять вставку из буфера обмена многострочного текста в виде одной строки.


procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Alignment := taCenter;
  Memo1.MaxLength := 24;
  Memo1.WantReturns := false;
  Memo1.WordWrap := false;
end;

procedure MultiLineMemoToSingleLine(Memo: TMemo);
var
  t: string;
begin
  t := Memo.Text;
  if Pos(#13, t) > 0 then
  begin
    while Pos(#13, t) > 0 do
      Delete(t, Pos(#13, t), 1);
    while Pos(#10, t) > 0 do
      Delete(t, Pos(#10, t), 1);
    Memo.Text := t;
  end;
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  MultiLineMemoToSingleLine(Memo1);
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  MultiLineMemoToSingleLine(Memo1);
end;


Source: https://delphisources.ru/pages/faq/base/tedit_center_align.html
ID: 00965



unit Unit1;

interface

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

{ Пример TEdit с выравниванием по центру © Song 
  в модификации Vit
}

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.


Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
ID: 00966