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
- Comment supprimer le son du TEdit quand on appuie sur la touche [Entrée] ?
- Comment faire une zone d'édition n'acceptant que des entiers ?
- Comment connaître et modifier la position du curseur dans un TRichEdit ?
- Comment afficher chaque ligne d'un TRichEdit avec une couleur de texte différente ?
- Comment faire de la mise en forme dans un TRichEdit ?
- Comment enregistrer le texte d'un TRichEdit avec ou sans mise en forme ?
- Comment inserer un image sur un fond en couleur dans un RichEdit ?
- Comment aligner à droite le contenu d'un TControl (TEdit...) ?
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; } } |
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... |
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)); |
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(); |
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; } |
Le lien ci-dessous vous donnera les informations nécessaires.
Pour enregistrer le contenu de votre TRichEdit :
Code c++ : | Sélectionner tout |
RichEdit1->Lines->SaveToFile(Nom_fichier);
Si vous souhaitez sauvegarder le contenu au format "texte simple", précédez votre enregistrement de :
Code c++ : | Sélectionner tout |
RichEdit1->PlainText = true;
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; } |
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; |
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 çaLes 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.