Выравнивание по правому краю в TEdit?
Материал из DRKB
Выравнивание по правому краю в TEdit?[править | править код]
type
TNumEdit = class(TEdit)
procedure CreateParams(var Params: TCreateParams); override;
end;
implementation
procedure TNumEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or ES_MULTILINE or ES_RIGHT;
end;
Author: МММ
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00527
{ Пример TEdit с правым выравниванием © Song }
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_RIGHT);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{ Создаём едит на основе нашего класса и кладём его на форму }
with TMySuperEdit.Create(Self) do Parent := Self;
end;
Идея заключается в том, как сделать правое выравнивание текста в TEdit, не прибегая к написанию нового компонента.
Для этого можно воспользоваться канвасом. Так как TEdit не имеет канваса, то сперва мы создадим TControlCanvas а затем, прикрепим TEdit к этому канвасу.
Теперь нам доступны все свойства и методы TControlCanvas, поэтому мы спокойно можем настраивать в нём текст. Ниже приведёна процедура, реализующая всё вышесказанное.
procedure RJustifyEdit(var ThisEdit : TEdit);
var
Left, Width: Integer;
GString: String;
Rgn: TRect;
TheCanvas: TControlCanvas;
begin
TheCanvas := TControlCanvas.Create;
try
TheCanvas.Control := ThisEdit;
GString := ThisEdit.Text;
Rgn := ThisEdit.ClientRect;
TheCanvas.FillRect(Rgn);
Width := TheCanvas.TextWidth(GString);
Left := Rgn.Right - Width - 1;
TheCanvas.TextRect(Rgn, Left, 0, GString);
finally
TheCanvas.Free;
end;
end;
Author: Song
Source: Взято из http://forum.sources.ru
ID: 00529