2010-12-15 376 views

Répondre

1

Pour définir la propriété d'alignement - qui affiche le texte aligné à gauche, au centre ou à droite, vous définissez la propriété Alignement, par ex. pour un contrôle d'édition appelé Edit1, qui est membre de pointeur de l'objet sous forme, pour définir l'alignement à droite justification, vous utilisez:

Edit1->Alignment = taRightJustify; 

les autres propriétés de justification sont taLeftJustify et taCenter.

Ceci n'affecte que l'emplacement des caractères sur le contrôle, et non pas s'il est aligné de droite à gauche ou de gauche à droite. Cela peut être ajusté en définissant la propriété BiDiMode - bdLeftToRight, bdRightToLeft (ceux-ci sont plus importants dans les langues de gauche à droite et de droite à gauche)

Ou est-ce que quelque chose me manque dans la question?

+1

Dans turbo C++ explorer, il n'y a pas de propriété 'Alignement' pour le composant TEdit ... – BlackShadow

+0

Je vais juste configurer une machine virtuelle et voir ce qui est nécessaire – Petesh

+0

Trouver l'édition de démonstration de turbo C++ explorer n'est pas trivial – Petesh

2

Vous pouvez trouver cette solution au problème intéressant:

http://bcbjournal.com/bcbcaq/?loc=edits&caq=28

Il fait la zone d'édition aligné à droite en mais permettant au pour le contrôle de style ES_RIGHT Windows, il le fait lors de la création du composant. Pour des raisons historiques, le contrôle d'édition standard de Windows ne prend pas en charge la modification de l'alignement après sa création (officiellement), comme indiqué dans this post on The Old New Thing. Cependant, comme vous pouvez le constater en examinant les différentes affirmations et commentaires, cela a changé et même s'il n'est pas documenté, cela devrait être possible.

Donc, si vous voulez faire cela sans créer votre propre composant, vous pouvez utiliser la fonction API Windows SetWindowLong comme ceci:

DWORD alignment = ES_RIGHT; 
DWORD oldStyle = GetWindowLong(Edit1->Handle, GWL_STYLE); 
DWORD newStyle = (oldStyle & ~(ES_LEFT | ES_CENTER | ES_RIGHT)) | alignment; 
SetWindowLong(Edit1->Handle, GWL_STYLE, newStyle); 

S'il vous plaît noter que vous pourriez avoir à appeler SetWindowPos pour que les modifications prennent effet, comme noté dans les commentaires dans le poste lié plus tôt dans le texte.

+0

SetWindowPos n'a pas fait l'affaire, mais appeler Edit1-> Invalidate a fonctionné pour moi. Comme le dit Raymond, c'est un hack non supporté ... –

2

Sur Delphi je le fais par une surcharge type TEdit, de cette façon:

Sur la section d'interface, avant toute déclaration TForm je mets:

type 
    TEdit=class(StdCtrls.TEdit) 
    private 
     FAlignment:TAlignment; 
     procedure SetAlignment(Value:TAlignment); 
    protected 
     procedure CreateParams(var Params:TCreateParams);override; 
    public 
     constructor Create(AOwner:TComponent);override; 
    published 
     property Alignment:TAlignment read FAlignment write SetAlignment default taLeftJustify; 
    end; 

Sur la section de mise en œuvre i mettre la mise en œuvre d'une telle :

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

procedure TEdit.CreateParams(var Params:TCreateParams); 
const 
    Alignments:array[TAlignment] of Cardinal=(ES_LEFT,ES_RIGHT,ES_CENTER); 
begin 
    inherited CreateParams(Params) 
    Params.Style:=Params.Style or Alignments[FAlignment]; 
end; 

constructor TEdit.Create(AOwner:TComponent); 
begin 
    inherited Create(AOwner); 
    FAlignment:=taLeftJustify; 
end; 

Puis je mets quelque chose comme l'événement sous forme OnCreate ceci:

MyEditBox.Alignment:=taLeftJustify; 
MyEditBox.Alignment:=taCenter; 
MyEditBox.Alignment:=taRightJustify; 

Voilà. Pelase note qu'il peut être beaucoup amélioré, c'est juste une preuve de concept de l'ajouter à TEdit, il ne s'agit pas de créer une nouvelle classe (avec un autre nom) et il ne s'agit pas non plus de créer un nouveau composant .

Espérons que cela peut être utile à quelqu'un.

P.D .: La même idée est possible à faire pour TStringGrid, il suffit de chercher sur stackoverflow.com pour CellsAlignment ou post lu Delphi: How to make cells' texts in TStringGrid center aligned?

0

J'ai fais aussi capable d'être tous dans une autre unité séparée, donc voici:

unit AlignedTEdit; 

interface 

uses Windows,Classes,Controls,StdCtrls; 

type 
    TEdit=class(StdCtrls.TEdit) 
    private 
     FAlignment:TAlignment; 
     procedure SetAlignment(Value:TAlignment); 
    protected 
     procedure CreateParams(var Params:TCreateParams);override; 
    public 
     constructor Create(AOwner:TComponent);override; 
    published 
     property Alignment:TAlignment read FAlignment write SetAlignment default taLeftJustify; 
    end; 

implementation 

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

procedure TEdit.CreateParams(var Params:TCreateParams); 
const 
    Alignments:array[TAlignment] of Cardinal=(ES_LEFT,ES_RIGHT,ES_CENTER); 
begin 
    inherited CreateParams(Params); 
    Params.Style:=Params.Style or Alignments[FAlignment]; 
end; 

constructor TEdit.Create(AOwner:TComponent); 
begin 
    inherited Create(AOwner); 
    FAlignment:=taLeftJustify; 
end; 

end. 

Ceci est une unité entière, enregistrez-le dans un fichier appelé AlignedTEdit.pas.

Ensuite, sur n'importe quel formulaire, vous avez TEdit ajouter ,AlignedTEdit à la fin de la clause d'utilisation de l'interface.

PD: La même idée est possible de faire pour TStringGrid, il suffit de chercher sur stackoverflow.com pour TStringGrid.SetCellsAlignment ou lire après Delphi: How to make cells' texts in TStringGrid center aligned?