| auteur : Geronimo | Il suffit de placer le code suivant dans l'évènement OnKeyPress du TEdit :
void __fastcall TForm1:: Edit1KeyPress (TObject * Sender, char & Key)
{
if (Key = = VK_RETURN)
{
Key = 0 ;
}
}
|
Cela permet de savoir quand la touche [Entree] est appuyée (validation si nécessaire) et supprime le son en "faisant croire" à Windows qu'aucune touche n'a été enfoncée (Key = 0)
|
| auteur : Geronimo |
Il faut obtenir les Flags de la zone d'édition choisie et lui rajouter le Flag ES_NUMBER.
On utilise pour cela respectivement les fonctions GetWindowLong et SetWindowLong.
__fastcall TForm1:: TForm1 (TComponent* Owner)
: TForm (Owner)
{
long StylesEdit = GetWindowLong (Edit1- > Handle, GWL_STYLE);
SetWindowLong (Edit1- > Handle, GWL_STYLE, StylesEdit | ES_NUMBER);
}
|
Attention, la protection n'est pas totale. En effet, il est toujours possible de coller des caractères non numériques dans le TEdit...
|
| auteurs : Alacazam, Sunchaser | Le but est d'accéder à la position du curseur sous la forme (Ligne, Caractère), plus aisément utilisable que le simple numéro de caractère donné par RichEdit1->SelStart. On utilise pour cela les messages Windows EM_* se rapportant aux composants TRichEdit.
N.B. Perform a le même effet que SendMessage, il permet d'envoyer un message à un composant.
Pour connaître la position actuelle :
int numLigne = RichEdit1- > Perform (EM_EXLINEFROMCHAR, 0 , (LPARAM) (DWORD) RichEdit1- > SelStart);
int numCaractere = (RichEdit1- > SelStart - RichEdit1- > Perform (EM_LINEINDEX, (LPARAM) (DWORD) numLigne, 0 ));
|
Le message EM_EXLINEFROMCHAR permet de déterminer la ligne où se trouve le caractère dont le numéro est passé en 3ème paramètre LPARAM.
De la même manière, grâce à EM_LINEINDEX, on détermine le numéro du 1er caractère de la ligne dont le numéro est passé en second paramètre ; pour avoir le "déplacement horizontal", on n'a plus alors qu'à soustraire ce résultat au numéro du caractère courant.
Pour modifier cette position :
int numLigne = 10 , numCaractere = 15 ;
RichEdit1- > SelStart = RichEdit1- > Perform (EM_LINEINDEX, numLigne - 1 , 0 );
RichEdit1- > SelStart + = numCaractere;
RichEdit1- > Perform (EM_SCROLLCARET, 0 , 0 );
RichEdit1- > SetFocus ();
|
Ici, le principe est exactement le même ; on se déplace au 1er caractère de la ligne numLigne (grâce à EM_LINEINDEX), puis on avance de numCaractere positions sur cette même ligne.
|
| auteurs : blondelle, pottiez |
Le code permet de recréer le Canvas du RichEdit, afin de pouvoir dessiner un rectangle coloré, sur lequel on insère une image :
void __fastcall TForm1:: Button2Click (TObject * Sender)
{
Graphics:: TBitmap * pBitmap = new Graphics:: TBitmap ();
pBitmap- > LoadFromFile (" C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\AG00004_.bmp " );
TControlCanvas * pCn;
pCn = new TControlCanvas ();
pCn- > Control = RichEdit1;
pCn- > Brush- > Color = clGreen;
pCn- > Rectangle (0 , 0 , 488 , 289 );
pCn- > Draw (50 ,50 ,pBitmap);
delete pCn;
delete pBitmap;
}
|
|
| auteurs : blondelle, Gysmo | L'astuce est d'utiliser la propriété BiDiMode du TControl (ancêtre des composants visibles). Ce mode bidirectionnel spécifie la direction de la lecture du texte. En localisant l'application on arrive à aligner le texte à droite.
Dans l'événement OnCreate : SysLocale.MiddleEast = True;
MonEdit- > BiDiMode = bdRightToLeft;
|
|
Consultez les autres F.A.Q.
|
|