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 exécuter des commandes ?
- Comment exécuter une commande et en récupérer le résultat ?
- Comment exécuter un programme externe ?
- Comment récupérer les arguments de la ligne de commande passés à mon exécutable ?
- Comment générer une alerte à destination de l'utilisateur ?
- Comment faire pour qu'un traitement long ne fige pas l'application ?
- Comment faire une courte pause de quelques millisecondes ou secondes ?
Pour cela, utilisez la fonction system, déclarée dans stdlib.h, qui prend pour argument la commande à exécuter :
Code c++ : | Sélectionner tout |
1 2 3 | #include <stdlib.h> //... system("dir *.*"); |
Pour récupérer le résultat de l'exécution d'une commande, il suffit d'utiliser la fonction system, définie dans stdlib.h, pour lancer une commande, et de spécifier une redirection de sortie (celles-ci fonctionnent aussi bien sous DOS/Windows que sous Linux) :
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | #include <stdlib.h> // Version DOS/Windows : system("dir *.* > results.txt"); // Version Linux : /* L'option -l permet d'avoir les détails des fichiers */ system("ls -l > results"); |
Utilisez la fonction ShellExecute.
Pour lancer Notepad, par exemple :
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 | ShellExecute(NULL, // Handle de la fenêtre parent "open", // Action à effectuer "notepad.exe", // Fichier "", // Paramètres "", // Répertoire par défaut SW_SHOWDEFAULT // Manière d'afficher ); |
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | // Affiche une boîte de dialogue "Ouvrir un fichier" et ouvre le fichier avec notepad. if (OpenDialog1->Execute()) { ShellExecute(NULL, // Handle de la fenêtre parent "open", // Action à effectuer "notepad.exe", // Fichier OpenDialog1->FileName.c_str(), // Paramètres ExtractFilePath(OpenDialog1->FileName).c_str(), // Répertoire par défaut SW_SHOW // Manière d'afficher ); } |
Cela peut être effectué grâce aux fonctions ParamCount() et ParamStr(), la seconde prenant en argument le numéro de l'argument.
Dans l'exemple suivant, nous chargeons dans un TMemo le fichier placé en argument de la ligne de commande. Placez le code suivant dans le constructeur de votre fiche :
Code c++ : | Sélectionner tout |
1 2 | if ( ParamCount() > 0 ) Memo1->Lines->LoadFromFile(ParamStr(1)); |
Il est souvent utile d'avertir l'utilisateur par un message rapide, pour lui faire part d'une information ou pour lui signaler une erreur. Il existe différentes méthodes. Les plus simples et les plus utiles sont ShowMessage et MessageDlg.
ShowMessage permet d'afficher un message tout simple dans une fenêtre. Elle prend pour argument une AnsiString qui est le contenu du message.
Code c++ : | Sélectionner tout |
ShowMessage("Tâche effectuée");
Code c++ : | Sélectionner tout |
MessageDlg("La tâche a été effectuée correctement", mtInformation, TMsgDlgButtons() << mbOK, 0);
Code c++ : | Sélectionner tout |
1 2 3 | if (MessageDlg("Le document n'a pas été sauvegardé, voulez-vous le sauvegarder avant de quitter ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes) Sauver(); |
Lors d'un traitement long, l'application ne traite plus les messages Windows de la queue de messages.
Le résultat est en général une application qui ne répond plus aux événements utilisateurs, ou qui ne se redessine plus.
Dans ce cas, il faut faire un appel à la méthode ProcessMessages de la classe Application dans la boucle. L'exemple présenté ci-dessous déclenche une tâche ininterrompue lors du clic sur un bouton. Nous dessinons un quadrillage par rebonds successifs du pinceau sur les bords de la fenêtre. Déclarons tout d'abord une variable Stop en global :
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | //... //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; bool Stop; /* Placez la variable ici */ //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { //... } |
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | void __fastcall TForm1::Button1Click(TObject *Sender) { static int x_inc = 1; // Incrémentation d'abscisse static int y_inc = 1; // Incrémentation d'ordonnée static int X = 10; // Position initiale (abscisse) static int Y = 10; // Position initiale (ordonnée) Stop = false; // La boucle est activée. /* Le seul moyen d'arrêter la boucle est de positionner la variable Stop à true */ while(!Stop) { Canvas->MoveTo(X, Y); // Placement du pinceau en (X, Y) X += x_inc; // Incrémentation des positions Y += y_inc; // Change la couleur de la ligne aléatoirement Canvas->Pen->Color = RGB(rand()%255, rand()%255, rand()%255); Canvas->LineTo(X, Y); // Ligne jusqu'à la nouvelle position /* Si la position du pinceau sort de la zone cliente de la fenêtre, on inverse les incrémentations, ce qui donne l'effet de "rebond" */ if (X > ClientWidth || X < 0) x_inc = -x_inc; if (Y > ClientHeight || Y < 0) y_inc = -y_inc; /* L'appel à cette méthode évite le blocage de l'application : les messages et clics sur autres boutons sont traités */ Application->ProcessMessages(); } } |
Code c++ : | Sélectionner tout |
1 2 3 4 | void __fastcall TForm1::Button2Click(TObject *Sender) { Stop = true; } |
Utilisez la fonction Sleep en lui passant en argument le nombre de millisecondes.
Code c++ : | Sélectionner tout |
1 2 | // Pause d'une seconde : Sleep(1000); |
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.