IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ C++ BuilderConsultez toutes les FAQ

Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C++ Builder de developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez

Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.

L'équipe C++ Builder de Developpez.

Commentez cette FAQ : Commentez

SommaireInterface bisComposantsLes zones d'édition (8)
précédent sommaire suivant
 

Il suffit de placer le code suivant dans l'évènement OnKeyPress du TEdit :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
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)

Mis à jour le 1er septembre 2004 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.

Code c++ : Sélectionner tout
1
2
3
4
5
6
__fastcall TForm1::TForm1(TComponent* Owner)  
: TForm(Owner)  
{  
    long StylesEdit = GetWindowLong(Edit1->Handle, GWL_STYLE);  
    SetWindowLong(Edit1->Handle, GWL_STYLE, StylesEdit | ES_NUMBER);  
}
La protection n'est pas totale. En effet, il est toujours possible de coller des caractères non numériques dans le TEdit...

Mis à jour le 1er septembre 2004 Geronimo

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 :

Code c++ : Sélectionner tout
1
2
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 :

Code c++ : Sélectionner tout
1
2
3
4
5
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.

Mis à jour le 1er septembre 2004 Alacazam Sunchaser

Dans cet exemple, les lignes font apparaître un dégradé de couleur allant du bleu au rose.
Comme vu ici ( Comment connaître et modifier la position du curseur dans un TRichEdit ?), on peut assez facilement récupérer le numéro (absolu) du 1er caractère d'une ligne donnée, grâce à EM_LINEINDEX. Nous nous en servons cette fois pour sélectionner une ligne dans sa totalité, avant de lui appliquer un attribut de couleur.

Code c++ : Sélectionner tout
1
2
3
4
5
for (int i = 0 ; i < RichEdit1->Lines->Count ; i++) { 
    RichEdit1->SelStart = RichEdit1->Perform(EM_LINEINDEX, i, 0); 
    RichEdit1->SelLength = RichEdit1->Lines->Strings[i].Length(); 
    RichEdit1->SelAttributes->Color = 0x00F56B00 + 10 * i; 
}
Pour choisir facilement votre gamme de couleurs, regardez ici : Comment obtenir les composantes RGB d'une couleur TColor ?

Mis à jour le 1er septembre 2004 Alacazam

Le lien ci-dessous vous donnera les informations nécessaires.

Mis à jour le 1er septembre 2004 Alacazam

Pour enregistrer le contenu de votre TRichEdit :

Code c++ : Sélectionner tout
RichEdit1->Lines->SaveToFile(Nom_fichier);
Cet enregistrement se fera, par défaut, au format RTF (texte mis en forme).
Si vous souhaitez sauvegarder le contenu au format "texte simple", précédez votre enregistrement de :

Code c++ : Sélectionner tout
RichEdit1->PlainText = true;

Mis à jour le 1er septembre 2004 Alacazam

Le code permet de recréer le Canvas du RichEdit, afin de pouvoir dessiner un rectangle coloré, sur lequel on insère une image :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
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; 
}

Mis à jour le 10 décembre 2007 blondelle pottiez

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 :

Code c++ : Sélectionner tout
1
2
SysLocale.MiddleEast = True; 
MonEdit->BiDiMode = bdRightToLeft;

Mis à jour le 21 novembre 2010 blondelle Gysmo

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.