begin process at 2010 02 10 04:35:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > POSITION DU CURSEUR ( LIGNE ET COLONNE ) DANS UN MEMO OU UN RICHEDIT

POSITION DU CURSEUR ( LIGNE ET COLONNE ) DANS UN MEMO OU UN RICHEDIT


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Trucs & Astuces Niveau :Débutant Date de création :06/07/2003 Date de mise à jour :29/07/2003 21:50:29 Vu / téléchargé :5 415 / 329

Auteur : bazole

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Mon premier code tout simple pour débutant.

Affiche la position du curseur (ligne et colonne) dans le Panel d'un StatusBar
Pour Memo ou RichEdit.
j'ai vu ça dans le forum mais avec l'utilisation de messages Windows.
Pourtant ces 2 composants possèdent la propriété "CaretPos" pour le faire simplement.

Exemple avec un RichEdit.

Petite modif : suite à un conseil de Delphiprog (voir commentaire ci-dessous), je retire l'argument 'Sender' dans le code ci-dessous.

Dans le zip, j'y ai mis le code fourni par Delphiprog que j'ai essayé de commenter, tant bien que mal, pour les débutants.  

Source

  • procedure TForm1.PosCurseur;
  • var
  • ligne, colonne : integer;
  • Affichage : string;
  • begin
  • //Récupère la position de la colonne
  • colonne := RichEdit1.CaretPos.X + 1 ;
  • //Récupère la position de la ligne
  • ligne := RichEdit1.CaretPos.Y + 1 ;
  • //Ajoute le texte "lig" et "col" pour l'affichage dans le Panel d'un StatusBar
  • Affichage := 'Lig ' + IntToStr(ligne) + ' : Col ' + IntToStr(colonne);
  • //Affiche le texte finale dans le Panel d'un StatusBar
  • StatusBar1.Panels.Items[0].Text := Affichage;
  • end;
procedure TForm1.PosCurseur;
var
  ligne, colonne : integer;
  Affichage : string;
begin
  //Récupère la position de la colonne
  colonne := RichEdit1.CaretPos.X + 1 ;

  //Récupère la position de la ligne
  ligne := RichEdit1.CaretPos.Y + 1 ;

  //Ajoute le texte "lig" et "col" pour l'affichage dans le Panel d'un StatusBar
  Affichage := 'Lig ' + IntToStr(ligne) + ' : Col ' +  IntToStr(colonne);

  //Affiche le texte finale dans le Panel d'un StatusBar
  StatusBar1.Panels.Items[0].Text := Affichage;
end;    

 Conclusion

Placer le code ou son appel dans l'événement :
OnSelectionChange pour un RichEdit  
OnClick et OnKeyUp pour un Memo  
(pour chaque déplacement du curseur).

et dans l'événement OnShow de Tform1
(pour faire apparaître les numéros de ligne et colonne au démarage du prog).

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture UTILISER UNE DLL INCLUSE EN RESSOURCES par Bacterius
Source avec Zip Source avec une capture IMAGE DANS UN TDBGRID par HAFTARIFOUAD
Source avec Zip Source avec une capture [ASTUCE] COMMENT VOIR UN ITEM, D'UNE LISTBOX, TRONQUÉ DANS U... par cirec
Source avec Zip Source avec une capture MESSAGEDLG PERSONNALISÉ par HAFTARIFOUAD
Source avec Zip Source avec une capture COMMENT DESSINER SUR UN TCANVAS LE TEXTE D'UNE FORMULE CHIMI... par pseudo3

Commentaires et avis

Commentaire de crazyjoke le 08/07/2003 12:27:35

Merci pour ce code qui peut être très utile lors de la création d'application dans lesquelles l'utilisateur doit taper beaucoup de texte (en + sa fait Pro :-)).

@++

Commentaire de Delphiprog le 27/07/2003 23:49:45 administrateur CS

Extrait de l'aide en ligne de Delphi :
"Utilisez CaretPos pour déterminer les coordonnées du curseur. Le type TPoint définit un emplacement sur l'écran exprimé en pixels, l'origine étant l'angle supérieur gauche. X spécifie la coordonnée horizontale du point et Y la coordonnée verticale. CaretPos indique la position X et Y relative à l'origine client du mémo.

Afin de déterminer la position du signe insertion en termes de caractères de texte uniquement (plutôt qu'en emplacement X/Y), utilisez la propriété SelStart."

Si les autres codes sources utilisent les messages Windows, ce n'est pas pour se faire plaisir mais pour obtenir directement les coordonnées du curseur en ligne et colonnes de Texte au lieu de les obtenir en coordonnées graphiques.

Commentaire de bazole le 28/07/2003 19:43:48

Salut Delphiprog

Pourtant, si tu fait le test, tu verra que l'on obtient bien le numéro de ligne et de colonne du curseur.

Commentaire de bazole le 28/07/2003 22:59:04

Je rajoute un petit fichier zip pour le test.

Commentaire de Delphiprog le 29/07/2003 09:54:48 administrateur CS

Tu as effectivement raison et l'aide en ligne au sujet de la propriété CaretPos est donc erronnée.
Remarque : lors de la création de la fiche, tu passes à PosCurseur le paramètre Sender reçu par la méthode Create. C'est dangereux et heureusement que tu ne l'utilises pas dans ta procédure.

Suggestions :
procedure PosCurseur(Memo: TCustomMemo; Panel: TStatusPanel);
var
  ligne, colonne : integer;
  Affichage : string;
begin
  //Récupère la position de la colonne
  colonne := Memo.CaretPos.X + 1 ;

  //Récupère la position de la ligne
  ligne := Memo.CaretPos.Y + 1 ;

  //Ajoute le texte "lig" et "col" pour l'affichage dans le Panel d'un StatusBar
  Affichage := 'Lig ' + IntToStr(ligne) + ' : Col ' +  IntToStr(colonne);

  //Affiche le texte finale dans le Panel d'un StatusBar
  Panel.Text := Affichage;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  PosCurseur(RichEdit1, StatusBar1.Panels.Items[0]);
end;

procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
  PosCurseur(Sender as TCustomMemo, StatusBar1.Panels.Items[0]);
end;

Ceci permet de rendre la procédure PosCurseur indépendante, facilement réutilisable et de ne pas lui passer n'importe quoi comme arguments. En transmettant un TCustomMemo comme premier argument, tu couvres donc aussi bien le TMemo que le type TRichEdit puisqu'il s'agit de leur ancêtre commun.

En tous cas, merci de ne nous avoir révélé cette astuce.

Commentaire de bazole le 29/07/2003 21:55:39

Merci Delphiprog pour la correction et à l'amélioration de ce code.

J'ai apporté les modifications nécessaires dans le code affiché.

Dans le zip j'y ai mis ton code en modifiant les noms des arguments, qui sont trop proche des noms de composants existants (risque de confusion pour les débutants).

et merci aussi à crazyjoke pour son commentaire.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales