Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

inserer du texte dans une zone de saisie, au niveau du curseur

7 réponses
Avatar
Antoine Moreau
Bonjour,

J'ai un petit module qui comporte une zone de saisie de texte et des
boutons. Quand j'appuie sur un bouton, ça met du texte dans la zone de
saisie (un peu comme la calculatrice Windows avec la zone d'affichage et les
chiffres)
Je voudrais pouvoir cliquer a un endroit dans le texte, et que les
prochaines insertion se fasse à cette endroit.

Par exemple, j'ai "123456" dans ma zone de saisie. Je met mon curseur
entre le '3' et le '4', et je clique sur le bouton '9', je veux alors avoir
"1239456" dans ma zone de saisie

Mais je ne sais pas comment récupérer la position du curseur dans la
zone de saisie. Je cherche donc soit une fonction qui me fournis ça, soit
une idée pour récupérer l'endroit ou j'ai cliquer / déplacer le curseur (en
cas d'utilisation de la tabulation et/ou des flèches de directions)


Pour info c'est dans une appli Acces en VBA


Merci d'avance


Antoine

7 réponses

Avatar
Fred
Dans son message
Antoine Moreau nous dit :

Bonjour,

J'ai un petit module qui comporte une zone de saisie de texte et
des boutons. Quand j'appuie sur un bouton, ça met du texte dans la
zone de saisie (un peu comme la calculatrice Windows avec la zone
d'affichage et les chiffres)
Je voudrais pouvoir cliquer a un endroit dans le texte, et que les
prochaines insertion se fasse à cette endroit.

Par exemple, j'ai "123456" dans ma zone de saisie. Je met mon
curseur entre le '3' et le '4', et je clique sur le bouton '9', je
veux alors avoir "1239456" dans ma zone de saisie

Mais je ne sais pas comment récupérer la position du curseur dans
la zone de saisie. Je cherche donc soit une fonction qui me fournis
ça, soit une idée pour récupérer l'endroit ou j'ai cliquer / déplacer
le curseur (en cas d'utilisation de la tabulation et/ou des flèches
de directions)

Pour info c'est dans une appli Acces en VBA


Merci d'avance



Bonsoir,
Y a-t-il une propriété SelStart sur le TextBox utilisé dans les formulaires
Access ?
Si oui, tu as ta réponse.


--
Fred
Avatar
ng
Salut,

Par exemple, j'ai "123456" dans ma zone de saisie. Je met mon curseur
entre le '3' et le '4', et je clique sur le bouton '9', je veux alors
avoir "1239456" dans ma zone de saisie

Pour info c'est dans une appli Acces en VBA



Si c'est comme en VB, regarde la propriété SelText :

MonTextBox.SelText = "9"

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
Fred
Dans son message
ng nous dit :

Salut,

Par exemple, j'ai "123456" dans ma zone de saisie. Je met mon
curseur entre le '3' et le '4', et je clique sur le bouton '9', je
veux alors avoir "1239456" dans ma zone de saisie

Pour info c'est dans une appli Acces en VBA



Si c'est comme en VB, regarde la propriété SelText :

MonTextBox.SelText = "9"



Bonjour,
SelText renvoie du texte sélectionné. Ce qui n'est pas le cas. Il veut la
position du curseur.

--
Fred
Avatar
Michel
Fred a écrit :
Dans son message
ng nous dit :


Salut,


Par exemple, j'ai "123456" dans ma zone de saisie. Je met mon
curseur entre le '3' et le '4', et je clique sur le bouton '9', je
veux alors avoir "1239456" dans ma zone de saisie

Pour info c'est dans une appli Acces en VBA



Si c'est comme en VB, regarde la propriété SelText :

MonTextBox.SelText = "9"




Bonjour,
SelText renvoie du texte sélectionné. Ce qui n'est pas le cas. Il veut la
position du curseur.



Il te reste donc les Api's

'API function declarations
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As
Long, ByVal wParam As Long, lParam As Any) As Long

'Window messages sent to the textbox
Private Const EM_CANUNDO = &HC6
Private Const EM_GETFIRSTVISIBLELINE = &HCE
Private Const EM_GETLINE = &HC4
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_GETMODIFY = &HB8
Private Const EM_LINEFROMCHAR = &HC9
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Const EM_SETMODIFY = &HB9
Private Const EM_UNDO = &HC7
Avatar
Fred
Dans son message HFgoe.68800$
Michel nous dit :

Fred a écrit :
Dans son message
ng nous dit :


Salut,


Par exemple, j'ai "123456" dans ma zone de saisie. Je met mon
curseur entre le '3' et le '4', et je clique sur le bouton '9', je
veux alors avoir "1239456" dans ma zone de saisie

Pour info c'est dans une appli Acces en VBA



Si c'est comme en VB, regarde la propriété SelText :

MonTextBox.SelText = "9"




Bonjour,
SelText renvoie du texte sélectionné. Ce qui n'est pas le cas. Il
veut la position du curseur.



Il te reste donc les Api's

'API function declarations
Private Declare Function SendMessage Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam
As Long, lParam As Any) As Long
'Window messages sent to the textbox
Private Const EM_CANUNDO = &HC6
Private Const EM_GETFIRSTVISIBLELINE = &HCE
Private Const EM_GETLINE = &HC4
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_GETMODIFY = &HB8
Private Const EM_LINEFROMCHAR = &HC9
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Const EM_SETMODIFY = &HB9
Private Const EM_UNDO = &HC7



Bonjour,
Je pense que le SelStart que j'ai mentionné avant-hier fera très bien
l'affaire.
A condition que cela existe dans les contrôles de Access, mais je n'en doute
pas trop.

Quelque chose du style :
8<---------
TB.Text = Left(TB.Text, TB.SelStart) & Car & Mid(TB.Text, TB.SelStart+1)
8<--------
où "TB" est le textbox et "Car" le caractère à insérer (caption du bouton je
suppose)

Enfin, je suppose qu'il a trouvé sa solution, pas de nouvelles depuis 2
jours.

--
Fred
Avatar
Zoury
> Je pense que le SelStart que j'ai mentionné avant-hier fera très bien
l'affaire.
A condition que cela existe dans les contrôles de Access, mais je n'en


doute
pas trop.



Yep SelStart existe.

Je crois que l'utilisation d'APIs demandant des handles de fenêtre (hWnd) en
VBA est assez çomplexe étant donnée que la propriété hWnd n'est pas exposée.
:OP

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Antoine Moreau
Re bonjour

Je suis désolé, j'avais complètement oublié que j'avais posé la
question. Vu que je n'y arrivais pas, j'etais passé a autre chose

Merci pour vos réponses

Et non, ça ne marche pas
Il me dit "Impossible de faire référence à une propriété ou de la
définir pour un contrôle si ce dernier n'est pas activé."

En effet, le focus est passé sur le bouton au moment ou j'appuye dessus
Si je fais un TB.SetFocus, ça ne mets pas d'erreur, mais le curseur est
revenu au début du control

(en fait je sens qu'il va falloir que je "mémorise" la position du
curseur)

Antoine


"Fred" a écrit dans le message de news:
uhBIN%
Dans son message HFgoe.68800$
Michel nous dit :

Fred a écrit :
Dans son message
ng nous dit :


Salut,


Par exemple, j'ai "123456" dans ma zone de saisie. Je met mon
curseur entre le '3' et le '4', et je clique sur le bouton '9', je
veux alors avoir "1239456" dans ma zone de saisie

Pour info c'est dans une appli Acces en VBA



Si c'est comme en VB, regarde la propriété SelText :

MonTextBox.SelText = "9"




Bonjour,
SelText renvoie du texte sélectionné. Ce qui n'est pas le cas. Il
veut la position du curseur.



Il te reste donc les Api's

'API function declarations
Private Declare Function SendMessage Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam
As Long, lParam As Any) As Long
'Window messages sent to the textbox
Private Const EM_CANUNDO = &HC6
Private Const EM_GETFIRSTVISIBLELINE = &HCE
Private Const EM_GETLINE = &HC4
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_GETMODIFY = &HB8
Private Const EM_LINEFROMCHAR = &HC9
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Const EM_SETMODIFY = &HB9
Private Const EM_UNDO = &HC7



Bonjour,
Je pense que le SelStart que j'ai mentionné avant-hier fera très bien
l'affaire.
A condition que cela existe dans les contrôles de Access, mais je n'en
doute pas trop.

Quelque chose du style :
8<---------
TB.Text = Left(TB.Text, TB.SelStart) & Car & Mid(TB.Text, TB.SelStart+1)
8<--------
où "TB" est le textbox et "Car" le caractère à insérer (caption du bouton
je suppose)

Enfin, je suppose qu'il a trouvé sa solution, pas de nouvelles depuis 2
jours.

--
Fred