Sélection dans un textbox

Signaler
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
22 mai 2017
-
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
22 mai 2017
-
Bonjour

j'ai un textbox, dans lequel il y a évidemment du texte, et 4 boutons G, D, H et B qui sont censés sélectionner des portions de texte. Si je n'ai pas de difficulté à me déplacer horizontalement et à sélectionner ce que je veux, en revanche je ne sais pas comment obtenir ce résultat dans le plan vertical. En d'autres termes, si je sais me déplacer dans le texte via les boutons G et D, que j'aie cliqué ou non auparavant dans le texte, je ne sais pas comment faire lorsque j'utilise les boutons H et B : le selstart m'indique toujours la position active avant le clic... Le setfocus place bien le curseur là où il faut, juste au-dessus ou au-dessous de la position précédente du curseur mais après, c'est le trou : comment récupérer la valeur de la position que le curseur indique?

Quelqu'un aurait-il la réponse à ce (cruel) problème?


jacques-antoine

16 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
1) Ce que tu appelle "curseur" n'est pas un curseur, mais un "caret" (et c'est très différent)
2) je n'ai pas vraiment compris ce que tu cherches à exprimer.


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
22 mai 2017

ce que je cherche à faire, c'est de substituer les boutons G, D, H et B du programme à leur équivalent d'un clavier réel, à savoir shift + flèche G, D, H et B, pour obtenir le même résultat : la sélection d'une partie de texte... Donc, je me positionne quelque part dans le texte et, à l'aide des boutons, je sélectionne ce qui m'intéresse. Le but du jeu, c'est de produire un clavier virtuel, avec les mêmes fonctionnalités qu'un vrai : c'est fait à 99% mais il me manque cette fonction de sélection. Ensuite, et si une solution est trouvée à ce problème, les fichiers sources seront mis en ligne sur le site VbFrance : avec une petite modification de l'environnement, ça pourrait, par exemple, aider des personnes handicapées qui ne peuvent pas utiliser un clavier physique mais seulement une souris ou tout autre équipement produisant le même effet.

Ok pour le caret, mais ça ne change rien : il est bien à la bonne position. Il ne reste plus qu'à le convertir en curseur... Finalement, la vraie question, c'est ça.

jacques-antoine
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Le selstart correspond à une position en nombre de caractères et détermine :
- la position du caret dans le texte et non des coordonnées géographiques sur le contrôle.

Tu me dis :
ça pourrait, par exemple, aider des personnes handicapées qui ne peuvent pas utiliser un clavier physique mais seulement une souris ou tout autre équipement produisant le même effet.

- si elles peuvent utiliser une souris, elle suffit si l'on affiche les scrollbars de la textbox (propriété ScrollBars de la textbox)
- et la souris sert aussi, seule, à se positionner et à sélectionner.

Bien que je voie dans ces condtions mal l'utilité réelle de ce que tu veux mettre en place, il nous faudrait, pour bien comprendre la difficulté rencontrée, voir le code utilisé pour l'un quelconque de tes boutons.
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
22 mai 2017

je sais bien ce que renvoie le SelStart mais je ne sais pas, en arrivant à positionner le caret au bon endroit, comment récupérer le point où il se trouve.

L'utilité? D'abord pour moi un exercice de style, pour "garder la main" (et surtout la cervelle : je suis en retraite). Cependant, cet exercice peut déboucher sur quelque chose d'utile parce que, si on réfléchit à leur problème, certains handicapés ont des mouvements très limités, de l'ordre du cm ou guère plus et il n'est pas question pour eux de déplacer une souris (ou un stylet) ou un ascenseur. À partir de là, développer un clavier virtuel n'est pas forcément une perte de temps, et j'allais dire une lubie.

En ce qui concerne le code, il est simple :
- je récupère le SelStart (MouseDown + MouseUp),
- je clique sur le bon bouton pour définir le sens et je sélectionne le texte, après modification du SelLength.

Je n'arrive tout simplement pas à en faire autant verticalement, comme on le fait avec la souris, en passant par le shift + clic maintenu et déplacement : je vois bien le caret se placer mais je ne sais pas comment faire ensuite pour réinitialiser ma sélection à partir de sa position.

Bon, un petit bout de code :

- dans MouseDown() : Deb_sel = X
- dans MouseUp() : Fin_sel = X
- ce sont les boutons qui déterminent le sens (plus tard, ce sera les flèches virtuelles).

Les boutons :

Gauche()
Sens = G
gerer_deplacement

Droite()
Sens = D
gerer_deplacement

La procédure gerer_deplacement() :

Select Case (Sens)
Case G
If Pos_fin <= Pos_deb Then
If Pos_fin - 1 >= 0 Then
Pos_fin = Pos_fin - 1
Lgr_sel = Pos_deb - Pos_fin
Text_a_traiter.SelStart = Pos_fin
Text_a_traiter.SelLength = Lgr_sel
End If
Else
Pos_fin = Pos_fin - 1
Lgr_sel = Pos_fin - Pos_deb
Text_a_traiter.SelStart = Pos_deb
Text_a_traiter.SelLength = Lgr_sel
End If
Case D
If Pos_fin <= Pos_deb Then
If Pos_fin < Lgr_text - 1 Then
Pos_fin = Pos_fin + 1
If Pos_fin > Pos_deb Then
Lgr_sel = Pos_fin - Pos_deb
Text_a_traiter.SelStart = Pos_deb
Else
Lgr_sel = Pos_deb - Pos_fin
Text_a_traiter.SelStart = Pos_fin
End If
Text_a_traiter.SelLength = Lgr_sel
End If
Else
If Pos_fin < Lgr_text Then
Pos_fin = Pos_fin + 1
Lgr_sel = Pos_fin - Pos_deb
Text_a_traiter.SelStart = Pos_deb
Text_a_traiter.SelLength = Lgr_sel
End If
End If
End Select

Ca fonctionne parfaitement et la procédure pour le déplacement vertical devrait être plus beaucoup plus simple, puisqu'il n'y a aucun calcul de position à faire : il y a juste un SelStart "spécial" à récupérer pour refaire la sélection, les autres paramètres étant inchangés.

Si on arrive à faire ça avec la souris ou le clavier, pourquoi est-ce qu'on n'y arriverait pas avec du code?

jacques-antoine
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Il se peut que tu te compliques beaucoup la vie.

Regarde ce que fait ceci (exemple)

avec un bouton shiftadroite qui simule Shift + flêche droite
Private Sub shiftadroite_Click()
 SendKeys "+{RIGHT}"
 Text1.SetFocus ' ===>>> important
End Sub




____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Et regarde maintenant ce que tu peux faire plus adroitement, puisque tu es sous VB6 (tu es bien sous VB6 ?) et que VB6 gère les groupoes de contrôles indexés
Un petit projet nouveau
Tu mets sur un Form, où tu veux :
- un commandbutton nommé Bouton. Mets la valeur 0 à sa propriété index (important)
- Une textbox nommée Text1
- un bouton de commande Command1

Lance ===> clique sur Command1 (juste pour remplir un peu la textbox)
Puis joue avec les petits boutons en haut et à gauche ===>> tu vas vite comprendre.

Enjolive un peu en donnant au bouton "Shift" (qui fonctionne en swith une couleur différente entre un état et l'autre
Voilà. Amuse-toi

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Et zut (je deviens gâteux, moi !).
J'ai oublié le code !
le voici
Private Sub Bouton_Click(Index As Integer)
  If Index = 4 Then
     If Bouton(Index).Tag "+" Then Bouton(Index).Tag "" Else Bouton(Index).Tag = "+"
  Else
    SendKeys Bouton(4).Tag & "{" & Bouton(Index).Tag & "}"
    Text1.SetFocus
  End If
End Sub
'==============================================================
'tu peux faire tout ce qui suit en mode création
  ' et en donnant les captions et positions qui te plaisent
  ' je ne le fais ici dynamiquement que pour que tu comprennes
Private Sub Form_Activate()
  Me.ScaleMode = vbTwips
  Text1.Move 0, 300, 2000, 2000
  Bouton(0).Move 0, 0, 500, 300
  Bouton(0).Caption = "H"
  Bouton(0).Tag = "UP"
  For i = 1 To 4
    Load Bouton(i)
    With Bouton(i)
      Select Case i
        Case 1: .Caption "B": .Tag "DOWN"
        Case 2: .Caption "G": .Tag "LEFT"
        Case 3: .Caption "D": .Tag "RIGHT"
        Case 4: .Caption "Shift": .Tag ""
      End Select
      .Move Bouton(0).Width * i, 0
      .Visible = True
    End With
  Next
End Sub

Private Sub Command1_Click() ' juste pour avoir un "terrain d'essai"
  For i = 1 To 100
    Text1.Text = Text1.Text & "aaaaaaa " & i
  Next
End Sub




____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Tu pourrais d'ailleurs appliquer la même méthode à la totalité des touches de ton "clavier".
Il sera dans ce cas judicieux de "séparer" les groupes (clavier alpha - clavier numérique, etc ..)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Ou en est-tu ?

Je vais maintenant te faire une confession : je ne t'aide dans ta démarche que pour son aspect "entretien des neurones".
Car pour le reste (aide aux handicapés) : Démarrer ===>> programmes ===>> Accessoires ===>> Accessibilité ===>> Clavier virtuel
et voilà (tout beau, tout propre et fait par MicroSoft

Mais continue car c'est bon pour les méninges et j'approuve donc.
La méthode que je t'ai recommandée (mon code) te libère totalement de traiter différemment en fonction des contrôles concernés. Elle se contente en effet de simuler les touches ===>> et le résultat sera le même que celui qui aurait été atteint par emploi physique des touches.
Amitiés


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
22 mai 2017

Salut,

je te remercie infiniment pour ton aide plus que précieuse : c'est limpide ... et évident, une fois qu'on a pigé le principe. Finalement, je me suis emm... pour pas grand chose, à essayer de développer un code qui existe déjà et qui se résume à une seule instruction : Sendkeys, précédé ou non du signe + !!! Mais je suis furax après moi, parce que, ce Sendkeys, je l'utilise pour simuler toutes les touches et il ne me manquait que ce fameux signe + qui simule le Shift. Je n'ai donc pas lu toute la doc : autant pour moi.

Ceci étant dit, mes neurones, j'en prends grand soin parce que, mine de rien, si on ne les utilise pas, ils foutent le camp à vitesse grand V et je m'en suis aperçu dans les premiers mois de ma retraite où je glandais voluptueusement : j'oubliais tout, même ce que je savais depuis des années. C'est rentré dans l'ordre à partir du moment où je me suis remis à programmer régulièrement : j'ai toute une panoplie de programmes utiles pour moi et probablement pour d'autres, comme par exemple la surveillance de la glycémie (eh, oui! c'est de mon âge!) ou encore un répertoire personnel, que je vais placer dès que possible sur ce site. Si toutefois j'y arrive : j'ai plusieurs fois essayé de le faire, mais la procédure de transfert est à chaque fois partie dans les limbes et, au bout d'une demi-heure d'attente de réponse, j'ai tout stoppé. Peut-être un problème sur ma bécane? C'était à un moment où j'avais des problèmes de connexion, résolus depuis. Je vais voir ça de près.

Merci encore

Amicalement

jacques-antoine
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
C'est bien et je te félicite.
Si, maintenant, tu veux utiliser dynamiquement le clavier virtuel de Microsoft, voilà comment :
Private Sub Command1_Click()
 Shell ("osk.exe")
End Sub

Amitiés d'un autre papy.


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
22 mai 2017

je me demandais aussi comment intégrer le clavier virtuel dans une appli... Je vais essayer ça dès que j'aurai fini la mise au point du mien.

On se fonde un club de papets?

jacques-antoine
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
On se fonde un club de papets?
/code

NON !
A te lire, d'ailleurs, je t'estime plus alerte et intéressant que de nombreux "apprentis sorciers" qui se contentent d'attendre "la becquetée", de copier-coller, de ne rien comprendre, etc... (cela m'épuise).
Je ne répugnerais par contre pas à la création d'un club de "vrais travailleurs", quel que soit leur âge et leur niveau.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
22 mai 2017

je déteste par-dessus tout faire quelque chose sans comprendre de quoi on cause. Donc, le copier-coller passe, chez moi, par la moulinette du désossage et de la modification, pour voir si j'ai bien percuté. Après, j'adapte en fonction des besoins. Par exemple, dans le répertoire personnel que j'ai développé, il y a une fonction téléphone, laquelle utilise un vieux modem à 56k qui fonctionne quand il le veut bien et, quand il veut, ça marche et je peux composer un numéro depuis l'application : j'ai récupéré et adapté un code trouvé ici. maintenant, je cherche le moyen de passer par la box mais il semble que peu de personnes ont essayé, même si les constructeurs proposent des choses à ce sujet, mais en tant que code propriétaire, donc un paquet cadeau particulièrement opaque : inintéressant, parce qu'ils ont bien vu qu'il y avait là un moyen de faire du fric et donc ils ne se cassent pas la nénette à fournir des infos utiles, il faut acheter le produit, ce qui ne garantit nullement un fonctionnement dans toutes les configurations, sans compter que le problème demeure en cas de distribution gratuite.

Fonder un club de "vrais travailleurs"? Pourquoi pas... Au moins mes 35 ans de métier serviront peut-être à quelque chose. J'y ai tout fait, de pupitreur de base à ingénieur développement en génie logiciel, en utilisant je ne sais plus combien de langages. Accessoirement, j'ai fait de l'assistance technique pointue (c'est quand on ignore la question à venir et le domaine dans lequel elle s'inscrit, mais où une réponse valable doit impérativement être fournie, quitte à partir soi-même à la pêche aux renseignements) ainsi que de la formation. Le PC et VB sont venus se greffer ensuite, quand j'ai eu du temps pour moi, mais ce n'est pas ma principale occupation, bien que j'y consacre parfois des semaines entières. Pour finir, j'ai une petite compétence php et une assez grosse comme administrateur de bases de données SQL sur gros systèmes : j'en ai profité pour faire plusieurs sites, dont celui-ci : http://repertoirepn.net. Je suis assez éclectique quant à mes centres d'intérêts et je suis toujours curieux de voir et de comprendre "comment ça marche", qu'il s'agisse d'une montre, d'un moteur ou d'un logiciel.


jacques-antoine
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Voilà !
Tu es super-bienvenu sur ce forum, crois-moi.
Amitiés
Jacques

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
22 mai 2017

Ok, pratiquement, je fais quoi, maintenant?

jacques-antoine