J'utilise turbo C++ explorer edition (l'édition gratuite). Y at-il quelqu'un qui sait comment je peux définir le texte d'un contrôle TEdit?Comment définir l'alignement de texte dans le contrôle TEdit
Répondre
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?
Dans turbo C++ explorer, il n'y a pas de propriété 'Alignement' pour le composant TEdit ... – BlackShadow
Je vais juste configurer une machine virtuelle et voir ce qui est nécessaire – Petesh
Trouver l'édition de démonstration de turbo C++ explorer n'est pas trivial – Petesh
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.
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é ... –
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?
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?
Notez que le C++ turbo Explorer est la version gratuite de C++ Builder et n'a rien à faire avec turbo-C++ de vieux. – Johan