Afficher : Delphi C++
Préférences d'affichage

Codage des réponses aux actions des utilisateurs dans l'éditeur de code (tutoriel de l'EDI)

De RAD Studio XE2

Remonter à Démarrage de votre première application RAD Studio - Index (tutoriel de l'EDI)


En suivant les instructions de cette section, vous rendrez votre application interactive et lui fournirez les fonctionnalités de votre choix. Vous coderez les gestionnaires d'événements, c'est-à-dire les réponses aux clics sur les divers éléments du menu principal.

Sommaire

Commencement du code

Commencez l'écriture du code en définissant une variable String que vous utiliserez pendant l'exécution de l'application pour stocker le nom du fichier texte ouvert. Assurez-vous que vous êtes en mode Editeur de code en sélectionnant l'onglet Code, auprès de l'onglet Conception dans la barre d'état. Pour permuter entre les modes Concepteur de fiches et Editeur de code, appuyez sur F12.

Dans Delphi, définissez une variable String appelée CurrentFile dans la section private de la classe TTextEditorForm dans la partie interface, comme illustré dans la figure suivante.


TutorialIDENewFig3-18kh2.PNG

Figure 3-18. Définition de la variable private CurrentFile (vue Delphi)


Dans C++, utilisez les onglets situés en bas de la fenêtre Editeur de code pour afficher le fichier TextEditor.h. Déclarez la variable currentFile dans la section private de TTextEditorForm, comme illustré dans la figure suivante.


TutorialIDENewFig3-19kh.PNG

Figure 3-19. Définition de la variable private currentFile (vue C++Builder)

Création d'un gestionnaire d'événements pour la commande Nouveau

Vous êtes maintenant prêt à définir les réponses aux clics sur les éléments de menu. Dans le Concepteur de fiches, cliquez sur Fichier > Nouveau sur la barre de menus de votre fiche éditeur de texte. Sélectionnez ensuite l'onglet Evénements de l'inspecteur d'objets, comme illustré dans l'image suivante. Cliquez sur le signe plus (+) pour développer la liste Action, si nécessaire.


TutorialIDEFig3-20.png

Figure 3-20. Ouverture de l'onglet Evénements de l'inspecteur d'objets


Double-cliquez sur la zone d'édition relative à l'événement OnExecute. L'éditeur de code s'ouvre et affiche le squelette de fonction suivant, en utilisant respectivement Delphi ou C++Builder.


TutorialIDENewFig3-21kh.PNG

Figure 3-21. Génération automatique du squelette de code pour l'événement OnExecute (vue Delphi)


TutorialIDENewFig3-22kh.PNG

Figure 3-22. Génération automatique du squelette de code pour l'événement OnExecute (vue C++Builder)


Ecrivez maintenant le code qui s'exécute quand l'utilisateur sélectionne Fichier > Nouveau dans le squelette de code préalablement généré, comme suit :

 // New menu item event handler Delphi
 procedure TTextEditorForm.NewExecute(Sender: TObject); 
 var 
   UserResponse : Integer; 
 begin
   // Check TMemo number of lines property
   if TextMemo.Lines.Count > 0 then 
   begin 
     UserResponse := MessageDlg( 
       'This will clear the current document. ' + 'Do you want to continue?' , 
       mtInformation, 
       mbYesNo, 0); 
 
     if UserResponse = mrYes then 
     begin 
       TextMemo.Clear; 
       CurrentFile := ''; 
     end; 
   end; 
 end;
 // New menu item event handler C++
 void __fastcall TTextEditorForm::NewExecute(TObject *Sender)
 {
   // Check TMemo number of lines property
   if (TextMemo->Lines->Count > 0)
   {
     int userResponse = MessageDlg(
     String("This will clear the current document. ")
     + "Do you want to continue?", mtInformation,
     TMsgDlgButtons() << mbYes << mbNo, 0);
 
     if (userResponse == mrYes) {
       TextMemo->Clear();
       currentFile = "";
     }
   }
 }

Création des gestionnaires d'événements pour la commande Ouvrir

Revenez à la fiche sur l'onglet Conception. Effectuez un ensemble d'étapes similaire à la création du gestionnaire pour l'élément de menu Nouveau. Cliquez sur Fichier > Ouvrir sur la barre de menus de votre fiche éditeur de texte. Sélectionnez l'onglet Evénements de l'inspecteur d'objets, et cliquez sur le signe plus (+) pour développer la liste Action, si nécessaire. Double-cliquez sur l'événement OnAccept et écrivez le code affiché ci-dessous.

// Delphi
 procedure TTextEditorForm.FileOpen1Accept(Sender: TObject); 
 var 
   FileName: String; 
 begin
   // Get file name from TFileOpen component
   FileName := FileOpen1.Dialog.FileName; 
   if FileExists(FileName) then 
   begin 
     TextMemo.Lines.LoadFromFile(FileName); 
     CurrentFile := FileName; 
     Self.Caption := 'Text Editor - ' + ExtractFileName(FileName); 
   end; 
 end;
//C++
 void __fastcall TTextEditorForm::FileOpen1Accept(TObject *Sender) 
 {
   // Get file name from TFileOpen component
   String fileName = FileOpen1->Dialog->FileName; 
   if (FileExists(fileName)) { 
     TextMemo->Lines->LoadFromFile(fileName); 
     currentFile = fileName; 
     this->Caption = "Text Editor - " + ExtractFileName(fileName); 
   }
 }

Création des gestionnaires d'événements pour la commande Enregistrer sous

Revenez à la fiche et double-cliquez sur l'événement OnAccept de Fichier > Enregistrer sous et écrivez le code suivant.

//Delphi
 procedure TTextEditorForm.FileSaveAs1Accept(Sender: TObject); 
 var 
   FileName: String; 
   UserResponse : Integer; 
 begin 
   // Get file name from TFileSaveAs component
   FileName := FileSaveAs1.Dialog.FileName; 
 
   if FileExists(FileName) then 
   begin 
     UserResponse := MessageDlg( 
       'File already exists. ' + 
       'Do you want to overwrite?' , mtInformation, 
       mbYesNo, 0); 
     if UserResponse = mrNo then 
       Exit(); 
   end; 
 
   TextMemo.Lines.SaveToFile(FileName); 
   CurrentFile := FileName; 
   Self.Caption := ExtractFileName(FileName); 
 end;
//C++
 void __fastcall TTextEditorForm::FileSaveAs1Accept(TObject *Sender) 
 {
   // Get file name from TFileSaveAs component
   String fileName = FileSaveAs1->Dialog->FileName; 
 
   if (FileExists(fileName)) { 
     int userResponse = MessageDlg( 
       String( "File already exists. " ) + 
       "Do you want to overwrite?" , mtInformation, 
       TMsgDlgButtons() << mbYes << mbNo, 0); 
     if (userResponse == mrNo) { 
       return; 
     }
   }
 
   TextMemo->Lines->SaveToFile(fileName); 
   currentFile = fileName; 
   this->Caption = ExtractFileName(fileName); 
 }

Création des gestionnaires d'événements pour la commande Enregistrer

Double-cliquez sur l'événement OnExecute de Fichier > Enregistrer et écrivez le code suivant.

//Delphi
 procedure TTextEditorForm.SaveExecute(Sender: TObject); 
 begin 
   if CurrentFile = '' then 
     Self.FileSaveAs1.Execute() 
   else 
     TextMemo.Lines.SaveToFile(CurrentFile); 
 end;
//C++
 void __fastcall TTextEditorForm::SaveExecute(TObject *Sender) 
 {
   if (currentFile == "") { 
   this->FileSaveAs1->Execute(); 
   }
   else { 
   TextMemo->Lines->SaveToFile(currentFile); 
   }
 }

Création des gestionnaires d'événements pour la commande Police

Double-cliquez sur l'événement OnAccept de Format > Police et écrivez le code suivant.

//Delphi
 procedure TTextEditorForm.FontEdit1Accept(Sender: TObject); 
 begin
   // Set TMemo font property
   TextMemo.Font := FontEdit1.Dialog.Font; 
 end;
//C++
 void __fastcall TTextEditorForm::FontEdit1Accept(TObject *Sender) 
 {
   // Set TMemo font property
   TextMemo->Font = FontEdit1->Dialog->Font; 
 }

Création des gestionnaires d'événements pour la commande Retour automatique à la ligne

Double-cliquez ensuite sur l'événement OnExecute de Format > Retour automatique à la ligne et écrivez le code suivant.

//Delphi
 procedure TTextEditorForm.WordWrapExecute(Sender: TObject); 
 begin 
   { Toggle the word wrapping state. } 
   TextMemo.WordWrap := not TextMemo.WordWrap; 
   WordWrap.Checked := TextMemo.WordWrap; 
   if TextMemo.WordWrap = True then 
     { Only vertical scrollbars are needed when word wrapping is set. } 
     TextMemo.ScrollBars := ssVertical 
     else 
       TextMemo.ScrollBars := ssBoth; 
 end;
//C++
 void __fastcall TTextEditorForm::WordWrapExecute(TObject *Sender) 
 {
   // Toggle the word wrapping state.
   TextMemo->WordWrap = !TextMemo->WordWrap; 
   WordWrap->Checked = TextMemo->WordWrap; 
   if (TextMemo->WordWrap == True) { 
     // Only vertical scrollbars are needed when word wrapping is set.
     TextMemo->ScrollBars = ssVertical; 
   }
   else { 
    TextMemo->ScrollBars = ssBoth; 
   }
 }

Création des gestionnaires d'événements pour la barre d'état

Utilisez la barre d'état pour afficher la position en cours du curseur et le nombre de lignes du fichier texte ouvert. Double-cliquez sur l'événement OnMouseDown du composant TextMemo et écrivez le code suivant, respectivement dans Delphi et C++. La propriété CaretPos est utilisée pour indiquer les coordonnées du curseur à l'intérieur de la zone mémo texte.

//Delphi
 procedure TTextEditorForm.TextMemoMouseDown(Sender: TObject; 
   Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
 begin 
   TextStatus.Panels.Items[ 0].Text := 
     'L: ' + IntToStr(TextMemo.CaretPos.Y + 1); 
   TextStatus.Panels.Items[ 1].Text := 
     'C: ' + IntToStr(TextMemo.CaretPos.X + 1); 
   TextStatus.Panels.Items[ 2].Text := 
     'Lines: ' + IntToStr(TextMemo.Lines.Count); 
 end;
//C++
 void __fastcall TTextEditorForm::TextMemoMouseDown(TObject *Sender, 
   TMouseButton Button, TShiftState Shift, int X, int Y) 
 {
   TextStatus->Panels->Items[ 0]->Text = 
     "L: " + String (TextMemo->CaretPos.y + 1); 
   TextStatus->Panels->Items[ 1]->Text = 
     "C: " + String (TextMemo->CaretPos.x + 1); 
   TextStatus->Panels->Items[ 2]->Text = 
     "Lines: " + IntToStr (TextMemo->Lines->Count); 
 }

Finalement, double-cliquez sur l'événement OnKeyDown de TextMemo et écrivez le code ci-dessous. L'événement OnKeyDown est déclenché quand vous appuyez sur une touche à l'intérieur de la zone mémo texte.

//Delphi
 procedure TTextEditorForm.TextMemoKeyDown(Sender: TObject; 
   var Key: Word; Shift: TShiftState); 
 begin
   // Perform same action as for mouse down in TMemo
   TextMemoMouseDown(Sender, mbLeft, Shift, 0, 0); 
 end;
//C++
 void __fastcall TTextEditorForm::TextMemoKeyDown(TObject *Sender, 
   WORD &Key, TShiftState Shift) 
 {
   // Perform same action as for mouse down in TMemo
   TextMemoMouseDown(Sender, mbLeft, Shift, 0, 0); 
 }

Suivant

Compilation et exécution de l'application

Versions précédentes
Autres langues