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

Delphi Discussion :

récupérer la colonne dans un TMemo


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut récupérer la colonne dans un TMemo
    Bonjour !
    J'ai un TMemo et je voudrais que quand on se déplace dedans (en clair a chaque touche pressée) je puisse récupérer la ligne et la colonne. Pour la ligne j'ai réussi en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ln := SendMessage(mo.Handle, EM_LINEFROMCHAR, mo.SelStart, 0);
    Mais impossible de récupérer la colonne.

    Paqr ailleurs je fais ça dansa la méthode onKeyPress de mon memo mais le problème c'est que le traitement n'est pas réalisé quand je presse une touche flèche. Une idée ?

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    Bien sûr c'est au moment que je poste que je trouve la solution ! ...
    La voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      ln := SendMessage(mo.Handle, EM_LINEFROMCHAR, mo.SelStart, 0);
      col := mo.Selstart - sendMessage(mo.Handle,EM_LINEINDEX,ln,0) + 1;
    Par contre j'arrive toujours pas a afficher le numéro de ligne dès que je tappe une touche flèche

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Par défaut
    Un petit RESOLU a coté du titre serait le bienvenue

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    Bah c'est pas encore tout à fait résolu. Pour l'instant le numéro des lignes et des colonnes que je rrécupère ne change que quand j'ajoute ou caractère ou un changement de ligne. Moi je voudrais qu'il change chaque fois que je déplace mon curseur, à la manière du notepad qui indique dans la status bar le numéro de la ligne et de la colonne à tout instant.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 156
    Par défaut
    Bonjour,

    En ce qui concerne les flèches de direction, essaye de les gérer dans l'évènement OnKeyDown, au lieu de OnKeyPress, qui ne prend en compte que les touches de caractères (paramètre key de type char passé à la procédure), par contre OnKeyPress prend toutes les touches (paramètre key de type word)

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    J'ai beau essayé et tourner le problème dans tous les sens, il y a toujours un problème dans les indices. Voici mon code :
    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
     
    unit test_ln_col;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;
     
    type
      TfmMain = class(TForm)
        sb: TStatusBar;
        mo: TMemo;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        procedure SetLineColumn(Sender: TObject; var Key: Word;
          Shift: TShiftState);
      end;
     
    var
      fmMain: TfmMain;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TfmMain.SetLineColumn(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
      ln, col : Integer;
    begin
      ln := SendMessage(mo.Handle, EM_LINEFROMCHAR, mo.SelStart, 0);
      col := mo.Selstart - sendMessage(mo.Handle, EM_LINEINDEX, ln, 1);
      sb.Panels[0].Text := 'Ln : ' + IntToStr(ln) + '     Col : ' + IntToStr(col);
    end;
     
    procedure TfmMain.FormCreate(Sender: TObject);
    begin
      mo.OnKeyDown := SetLineColumn;
    end;
     
    end.
    ps: c'est normal si j'attribue la méthode OnKeyDown de cette façon car en vrai mes tmemo sont crées dynamiquement.

  7. #7
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    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 TfmMain.FormCreate(Sender: TObject);
    begin
    KeyPreview:=true;
    end;
     
    procedure TfmMain.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
    var
      ln, col : Integer;
      mo:TMemo;
    begin
         if (msg.CharCode in [37..40]) and ((ActiveControl is TCustomMemo)) then 
           begin
              mo:=ActiveControl;
              ln := SendMessage(mo.Handle, EM_LINEFROMCHAR, mo.SelStart, 0);
              col := mo.Selstart - sendMessage(mo.Handle, EM_LINEINDEX, ln, 1);
              sb.Panels[0].Text := 'Ln : ' + IntToStr(ln) + '     Col : ' + IntToStr(col);
          end;
    end;

Discussions similaires

  1. [Débutant] Récupérer contenu colonne dans un dataset
    Par pitite dans le forum VB.NET
    Réponses: 8
    Dernier message: 20/04/2012, 16h23
  2. Réponses: 7
    Dernier message: 30/04/2009, 15h49
  3. Connaitre la position ligne/colonne dans un TMemo
    Par bubulemaster dans le forum Débuter
    Réponses: 4
    Dernier message: 05/04/2008, 21h15
  4. Récupérer le numéro de colonne dans un JTextPane
    Par The Rock dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 28/12/2005, 16h30
  5. Réponses: 9
    Dernier message: 19/12/2005, 14h24

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