Alinear a la derecha el contenido de un TControl (TEdit,...)

3064 vistas

El truco está en usar la propiedad BiDiMode de TControl (ancestro de todos los componentes visuales).

Este modo bidireccional especifica la dirección de la lectura del texto. Localizando la aplicación podemos llegar a alinear el texto a la derecha.

En el evento OnCreate:



delphi
  1. { indica una localización de oriente medio }
  2. SysLocale.MiddleEast := True;
  3. { ejemplo con un TEdit  }
  4. MyEdit.BiDiMode := bdRightToLeft;



Esto funciona con la mayorÃa de los descendientes de TControl: TEdit, TMaskEdit, TListBox...

Pero en el caso de TEdit podemos crear un componente que nos acepte el alineamiento a la derecha:



delphi
  1. type
  2.   TMiEdit = class(TEdit)
  3.   private
  4.     FTextAlign: TAlignment;
  5.     procedure SetTextAlign(Value: TAlignment);
  6.   protected
  7.     procedure CreateParams(var Params: TCreateParams); override;
  8.   public
  9.     constructor Create(AOwner: TComponent); override;
  10.   published
  11.     property TextAlignment: TAlignment read FTextAlign write SetTextAlign;
  12.   end;
  13. implementation
  14.  
  15. constructor TMiEdit.Create(AOwner: TComponent);
  16. begin
  17.   inherited;
  18.   FTextAlign := taLeftJustify;
  19. end;
  20.  
  21. procedure TMiEdit.CreateParams(var Params: TCreateParams);
  22. const
  23. Alignments: array[TAlignment] of Word = (ES_LEFT, ES_RIGHT, ES_CENTER);
  24. begin
  25. inherited CreateParams(Params);
  26. Params.Style := Params.Style or Alignments[TextAlignment];
  27. end;
  28.  
  29. procedure TMiEdit.SetTextAlign(Value: TAlignment);
  30. begin
  31.   if FTextAlign <>Value then
  32.     Begin
  33.     FTextAlign := Value;
  34.     RecreateWnd;
  35.   End;
  36. end;