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 :

GetCursorPos alors que je suis DANS la cellule d'une StringGrid


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 222
    Par défaut GetCursorPos alors que je suis DANS la cellule d'une StringGrid
    Bonjour à tous,
    J'ai besoin de connaitre la position de mon curseur de souris alors que je suis en saisie DANS une cellule d'une StringGrid.
    L’évènement GetCursorPos ne fonctionne que quand on survole un composant, mais là, j'ai besoin de savoir, en étant dans une cellule et en mettant le curseur de ma souris dans la cellule où elle est par rapport au bord.
    Bon ... on schéma valant 1000 mots ...
    Nom : CopieEcran.jpg
Affichages : 177
Taille : 4,1 Ko
    mon curseur de saisie est après le z, mon curseur de souris est dans la partie droite de la cellule, ce sont les coordonnées du curseur de la souris par rapport au bord de ma cellule qui m’intéresse ... c'est faisable ?

  2. #2
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 505
    Par défaut
    https://docwiki.embarcadero.com/Libr....InplaceEditor

    Exemple :

    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
    47
    const
      WM_MESSAGE = WM_USER + 1;
     
    type
      TSG_InplaceEditor = class helper for TStringGrid
     
      public
        { Déclarations publiques }
        function GetInplaceEditor(): TInplaceEdit;
      end;
     
    type
      TForm1 = class(TForm)
        StringGrid: TStringGrid;
        procedure StringGridGetEditText(Sender: TObject; ACol, ARow: Integer; var Value: string);
     
      private
        { Déclarations privées }
        procedure OnMyMessage(var Msg: TMessage); message WM_MESSAGE;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    function TSG_InplaceEditor.GetInplaceEditor: TInplaceEdit;
    begin
      Result := InplaceEditor;
    end;
     
    procedure TForm1.OnMyMessage(var Msg: TMessage);
    var
      InplaceEdit: TInplaceEdit;
    begin
      InplaceEdit := StringGrid.GetInplaceEditor();
     
      if Assigned(InplaceEdit) then // Exemple :
        InplaceEdit.SelStart := InplaceEdit.GetTextLen;
    end;
     
    procedure TForm1.StringGridGetEditText(Sender: TObject; ACol, ARow: Integer; var Value: string);
    begin
      PostMessage(Handle, WM_MESSAGE, 0, 0);
    end;
    Maintenant récupéré la position de la souri GetCursorPos dans le InplaceEdit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.OnMyMessage(var Msg: TMessage);
    var
      InplaceEdit: TInplaceEdit;
      PointXY : TPoint;
    begin
      InplaceEdit := StringGrid.GetInplaceEditor();
     
      if Assigned(InplaceEdit) then
      begin
        InplaceEdit.SelStart := InplaceEdit.GetTextLen;
        GetCursorPos(PointXY);
        Form1.Caption := 'X = '+IntToStr(PointXY.x)+', Y = '+IntToStr(PointXY.y);
      end;
    end;
    Faudrait pouvoir récupéré la position du curseur ( | ) dans le InplaceEdit et récupéré les coordonnés X & Y du curseur.

    Peut-être de cette façon la
    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
    function GetCursorPosToControl(AControl: TWinControl): TPoint;
    var
      P: TPoint;
    begin
      GetCursorPos(P);
      ScreenToClient(AControl.Handle, P);
      Result := P;
    end;
     
    procedure TForm1.OnMyMessage(var Msg: TMessage);
    var
      InplaceEdit: TInplaceEdit;
      PointXY : TPoint;
    begin
      InplaceEdit := StringGrid.GetInplaceEditor();
     
      if Assigned(InplaceEdit) then
      begin
        InplaceEdit.SelStart := InplaceEdit.GetTextLen;
        PointXY := GetCursorPosToControl(InplaceEdit);
        Form1.Caption := 'X = '+IntToStr(PointXY.x)+', Y = '+IntToStr(PointXY.y);
      end;
    end;

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/02/2010, 20h15
  2. [AC-2007] Création d'un BdD, est ce que je suis dans la bonne voie
    Par Hitman_11 dans le forum Modélisation
    Réponses: 2
    Dernier message: 01/11/2009, 17h38
  3. permission denied alors que je suis en root?
    Par Balbuzard dans le forum Administration système
    Réponses: 7
    Dernier message: 01/04/2009, 05h28
  4. interdire plus que 24:00 dans la cellule
    Par joeyd dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/02/2008, 09h46
  5. Réponses: 4
    Dernier message: 13/08/2005, 10h20

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