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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

[Delphi7 - RichEdit] Comment déplacer le curseur à une position donnée ?


Sujet :

Composants VCL Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Delphi7 - RichEdit] Comment déplacer le curseur à une position donnée ?
    Bonjour,
    Pourriez vous m'aider à trouver le code nécessaire en Delphi 7pour positionner le curseur à un endroit donné dans un texte RichEdit ? Est il par exemple possible lorsqu'on affiche un richedit, de mettre le curseur directement sur la ligne 5 colonne 28 ?
    Mon problème en quelques mots:
    Je charge un fichier texte enrichi dans un composant RichEdit.
    Ce fichier comporte des balises de la forme [balise].
    Le but est de remplacer les balises par les valeurs des variables d'un écran de saisie.
    je parcours chaque ligne du richedit pour trouver une balise.
    une fois trouvée, je connais le n° de ligne, la position dans la ligne et la longueur de la balise (ex: [service] ou [modepaiement]).
    Je voudrai donc positionner le curseur au début de la balise.
    Je ferai ainsi une sélection partant de la balise et couvrant celle ci.
    Au préalable, j'aurai mis dans le presse papier le texte ou les lignes de substitution et je n'aurai qu'à mettre le contenu du presse papier dans la sélection.Cela efface la mention de la balise et insère le texte souhaité.

  2. #2
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    Avec la propriété SelStart

    tu devrais pouvoir t'en sortir

    RichEdit1.SelStart := taposition;

    cantador

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    et Bienvenue sur Developpez.com,

    Tout ce que tu as besoins se trouve dans la FAQ

    Bon courage

  4. #4
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    ou l'aide de delphi :

    L'exemple suivant illustre l'utilisation de la méthode Perform pour envoyer un message de fenêtre. Le message EM_SCROLLCARET rend visible le curseur d'édition dans le contrôle éditeur de texte formaté. La position du curseur de saisie est déterminé relativement au contenu du masque de saisie avant d'appeler Perform.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
     
    begin
    with RichEdit1 do
      Begin
        SelStart := StrToInt(MaskEdit1.Text);
        RichEdit1.Perform(EM_SCROLLCARET, 0, 0);
      end;
    end;
    cantador

  5. #5
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    merci ero-sennin pour la balise.

    cantador

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Je vous remercie pour vos réponses.
    Voici le listing (expurgé) du code de mon application qui résoud mon problème
    Cela pourra aider certains
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    const LR:byte=50;         // longueur de recherche pour le texte de balise : à priori 50c sont suffisants
    var
     PositionCurseur:Integer; // localisation du curseur pour délimiteur balise trouvé
     DEBRECH,FINRECH:Integer; // début et fin recherche
     FinB           :Integer; // position du caractere [ de fin de balise
    begin
      With EditeurMAPA.FormVisuMapa DO
      begin
       NomFichier:=DirInit+'MAPAConvention.rtf';
       NfEdition:=FormPlasma.Repertoire.Caption+'\'+'Convention MAPA.rtf';
       With ViewMAPA do
        begin
         ReadOnly:=false;
         Lines.LoadFromFile(NomFichier);
         DebRech:=0;
         FinRech:=Length(Text);
         Repeat
          PositionCurseur:=FindText('[',DebRech,FinRech,[]);
          If PositionCurseur<>-1 Then // balise trouvée mais laquelle ?
             begin
              If PositionCurseur+LR>FinRech
                 Then FinB:=FindText(']',PositionCurseur,FinRech,[])
                 Else FinB:=FindText(']',PositionCurseur,PositionCurseur+LR,[]);  // recherche etendue 50car
              If FinB=-1 Then
                 Begin
                  Showmessage('Erreur: caractère de fin de balise [ absent ou à plus de 50 caractères de ]');
                  Exit;
                 End;
              SelStart:=PositionCurseur;
              SelLength:=FinB-PositionCurseur+1;  // longeur de la balise
              TraiteBalise(SelText); // je remplace la balise par un texte différent
              DebRech:=PositionCurseur+1;
              FinRech:=Length(Text);
             end;
         Until PositionCurseur=-1; // balise non trouvée
         Lines.SaveToFile(NfEdition);
         SelStart:=0; // on se positionne au début du fichier
         ReadOnly:=true;
        end; // With EditeurMAPA.FormEditMapa.SaisieMAPA
       // fin des modifications
       If FormPlasma.Apercu.checked
          then ShowModal
          else ShowMessage('Rédaction de la convention effectuée dans le fichier:'+#13#10+NfEdition);
      end; // With EditeurMAPA.FormEditMapa
    end; // TFormPLASMA.ButtonCONVENTIONClick
    Voici également une portion de code de la procedure traitant la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Procedure traitebalise(Balise:string);
    const CR:string[2]=#13#10;
    var
     S:string;
     i:integer;
    Procedure CopieRTF(RTF:TRichEdit);
    begin
     RTF.SelectAll;RTF.CopyToClipboard;
     EditeurMAPA.FormVisuMapa.ViewMAPA.PasteFromClipBoard;
    end;
    //
    begin
     With  EditeurMAPA.FormVisuMapa.ViewMAPA DO
      begin
       SelText:=''; // suppression de la balise [] dans le texte
       if balise='[direction]' then SelText:=Direction.Items[Direction.ItemIndex];
       if balise='[service]' then SelText:=service.Items[service.itemIndex];
       if balise='[affaire]' then Seltext:=Affaire.text;
       if balise='[titremapa]' then CopieRTF(Titremapa);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/09/2009, 16h02
  2. [XP][batch] comment déplacer à partir d'une date ?
    Par floriaan60 dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 04/06/2008, 17h04
  3. [newton] Déplacer un body à une position définie ?
    Par supergrey dans le forum Newton
    Réponses: 3
    Dernier message: 28/05/2008, 21h13
  4. Déplacer le curseur à une position voulue dans un textarea avec IE
    Par spirou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/08/2006, 14h23
  5. Réponses: 1
    Dernier message: 18/01/2006, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo