На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Компоненты / Как создать эквивалент TEdit но только с выравниваением вводимого текста по центру или по правой стороне? Сделать домашней страницей Добавить в избранное Написать писмо

Как создать эквивалент TEdit но только с выравниваением вводимого текста по центру или по правой стороне?


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

procedure TForm1.FormCreate(Sender: TObject);
begin
   Memo1.Alignment := taRightJustify;
   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;



Комментарий от "Сэр Кот-Оборотень" (kotwlf@newmail.ru)
Вот так это можно сделать...

unit QEditAlignment;
interface
uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls;

type
 TEdit_Alignment = class(TEdit)
 private
   FAlignment: TAlignment;
 protected
   procedure CreateParams(var Params: TCreateParams); override;
   procedure SetAlignment(Value: TAlignment);
 public
   function GetControlsAlignment: TAlignment; override;
   constructor Create (AOwner: TComponent); override;

 published
   property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
 end;

procedure Register;

implementation

constructor TEdit_Alignment.Create (AOwner: TComponent);
Begin
inherited Create (AOwner);
Alignment:=FAlignment;
End;

procedure TEdit_Alignment.CreateParams(var Params: TCreateParams);
const
 Alignments: array[Boolean, TAlignment] of DWORD =
   ((ES_LEFT, ES_RIGHT, ES_CENTER),(ES_RIGHT, ES_LEFT, ES_CENTER));
begin
 inherited CreateParams(Params);
 with Params do
 begin
   Style := Style or Alignments[UseRightToLeftAlignment, FAlignment];
 end;
end;

function TEdit_Alignment.GetControlsAlignment: TAlignment;
begin
 Result := FAlignment;
end;

procedure TEdit_Alignment.SetAlignment(Value: TAlignment);
begin
 if FAlignment <> Value then
 begin
   FAlignment := Value;
   RecreateWnd;
 end;
end;

procedure Register;
begin
 RegisterComponents('Standard', [TEdit_Alignment]);
end;

end.

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz