Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2010, 22:08   #1
White_foxSA
Пользователь
 
Регистрация: 26.11.2009
Сообщений: 56
По умолчанию Delphi. Положение текста в

Привет всем, вот у меня возник вопрос по Delphi, по умолчанию в Tedit текст печатается слева, а мне необходимо справа.
Вот что мне подсказали:

Код:
Идея заключается в том, как сделать правое выравнивание текста в 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;

на событие edit'a onChange написать procedure TForm1.edt1Change(Sender: TObject);
begin
 RJustifyEdit(edt1);
end;
В итоге при использовании текст иногда справа, иногда слева и курсор слева. Как сделать что бы он был справа, и текст печатался только справа?
White_foxSA вне форума Ответить с цитированием
Старый 17.02.2010, 23:30   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Идея эта мертворожденная и довольно смешная. Как бы мы не зарисовывали прямоугольник окна TEdit, винда упорно считает, что символы вводятся и находятся слева окна. Потому и курсор моргает слева, а не справа как бы хотелось. А если выделить введенные символы, то система их и выделит слева, а не справа.

Свйство для выравнивания ввода вправо (как и по цетру) в штатном виндовом Edit есть, но Дельфи этого свойства не предоставляет. Добраться до него можно. Вот один из способов.

Создаем wrap-class (этакая оболочка с любым именем) наследника от нашего контрола (здесь TEdit). При создании класса прописываем в его исходных параметрах выравнивание ввода вправо:
Код:
...
implementation

type
  TMEdit = class(TEdit)
    procedure CreateParams(var Params: TCreateParams); override;
  end;

{ TMEdit }

procedure TMEdit.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or ES_RIGHT;
end;
Теперь остается подменить наш Edit на форме этим классом, что можно сделать при создании формы:
Код:
procedure TForm3.FormCreate(Sender: TObject);
begin
  PPointer(Edit1)^ := TMEdit;
end;
В общем то и все. Будет ввод с правой стороны окна. При этом не теряются другие свойства компонента (цвет фона, шрифта, например). Не то что при использовании этой высосанной из пальца "идеи".
Скандербег вне форума Ответить с цитированием
Старый 12.06.2018, 23:42   #3
kirvoboy
 
Аватар для kirvoboy
 
Регистрация: 11.11.2011
Сообщений: 5
По умолчанию

отличное решение для центровки текста в Edit.
kirvoboy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Положение курсора Sanek_ntsk Общие вопросы Delphi 6 09.01.2010 11:11
Как узнать положение текста, куда планируется его вставить? Diego__ Microsoft Office Word 8 05.12.2009 17:56
положение формы blackstersl Общие вопросы Delphi 5 04.06.2009 12:59
Безвыходное положение BETONOMESHALKA Общие вопросы Delphi 2 03.11.2007 19:06
положение курсора mishel Общие вопросы Delphi 9 30.01.2007 21:37