[R] Récupérer la position du curseur dans un edit control

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[R] Récupérer la position du curseur dans un edit control

#1

Message par jpascal »

Bonjour,

Il est possible de modifier le texte d'un edit control d'une ComboBox avec la fonction _GUICtrlComboBox_SetEditSel()

Je souhaite, lorsque je clique sur un bouton, pouvoir ajouter du texte à cet edit control.
C'est plutôt simple :
$sAdd = 'NouveauTexte'
$sData = _GUICtrlComboBox_GetEditText($idCombo_Pattern)
_GUICtrlComboBox_SetEditText($idCombo_Pattern, $sData & $sAdd)

Là où cela se corse, c'est que je souhaite insérer le texte à la dernière position connue du curseur de cet edit control.

Je m'explique.
- Je tape "RiriLoulou" dans l'edit control.
- Je me positionne entre Riri et Loulou.
- Je clique sur un bouton.
- "Fifi" est inséré entre Riri et Loulou.

J'ai donc juste besoin de la fonction qui me donne la position du curseur que je stockerai dans une variable à chaque clic/modif dans/de l'edit control.

Je souhaite vraiment utiliser une ComboBox (ou autre liste comme ListView) et nom un simple contrôle Input.
Modifié en dernier par jpascal le mer. 28 juin 2023 12:18, modifié 1 fois.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [..] Récupérer la position du curseur dans un edit control

#2

Message par jl56 »

Bonjour,

j'avais réalisé des choses assez particulière sur un edit comme coloriser des portions de texte

j'avais utilisé les fonctions 'Editeur enrichi"

Pour votre demande je pense que
vous sera utile ça vous donne le début d'une sélection et la fin et si vous n'avez rien sélectionné c'est la position du curseur


Regardez les exemples dans l'aide

Cordialement,

Jean-Luc
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 104
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: [..] Récupérer la position du curseur dans un edit control

#3

Message par Nine »

Voici un exemple simple pour émuler ce que tu veux obtenir. Évidemment, il y a encore du boulot, mais je voulais simplement te faire voir cette possibilité.

Code : Tout sélectionner

#include <GUIConstants.au3>
#include <Constants.au3>

Example()

Func Example()
  Local $hGUI = GUICreate("Example", 400, 300)
  Local $idList = GUICtrlCreateList("", 2, 22, 394, 100)
  Local $idEdit = GUICtrlCreateInput("", 2, 2, 394, 20)
  Local $idButton = GUICtrlCreateButton("Add", 20, 120, 100, 20)
  GUISetState(@SW_SHOW)

  For $x = 0 To 8
    GUICtrlSetData($idList, StringFormat("%03d : string", $x))
  Next

  While True
    Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
        Exit
      Case $idButton
        GUICtrlSetData($idEdit, " Test ", "1")
      Case $idList
        GUICtrlSetData($idEdit, GUICtrlRead($idList))
    EndSwitch
  WEnd
EndFunc   ;==>Example
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2087
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer la position du curseur dans un edit control

#4

Message par TommyDDR »

Merci Nine, je ne connaissais pas la feature avec le flag à "1" sur un edit !
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Récupérer la position du curseur dans un edit control

#5

Message par jpascal »

Merci pour vos réponses.
J'ai cru un instant ne pas réussir à obtenir le résultat escompté mais finalement le but est atteint. :D

La solution

Définir une variable globale $g_iPosAddPattern = 0 correspondant à la position du curseur dans l'edit control de la ComboBox.

Utiliser une fonction WM_COMMAND() où l'on testera la "perte" de focus de la ComboBox.
On récupèrera alors la position du curseur :
Func WM_COMMAND($hwnd, $iMsg, $wParam, $lParam)
   #forceref $hwnd, $iMsg, $lParam
   Local $iIDFrom, $iCode
   $iIDFrom = BitAND($wParam, 0xFFFF) ; Low Word
   $iCode = BitShift($wParam, 16) ; Hi Word

   Switch $iIDFrom
      Case $idCombo_Pattern
         Switch $iCode
            Case $CBN_SELENDCANCEL ; Sent when the user selects an item, but then selects another control or closes the dialog box
               Local $aSel = _GUICtrlComboBox_GetEditSel($idCombo_Pattern)
               If @error = 0 Then $g_iPosAddPattern = $aSel[0]
         EndSwitch
   EndSwitch
   Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Le clic sur un ou plusieurs boutons déclenchera l'exécution de la fonction ClickButton().
Le texte correspondant sera inséré à la position enregistrée g_iPosAddPattern
Func ClickButton()
   Local $sAdd = ''

   Switch @GUI_CtrlId
      Case $idButton_Toto
         $sAdd = '{Toto}'
      Case $idButton_Titi
         $sAdd = '{Titi}'
   EndSwitch

   Local $sData = _GUICtrlComboBox_GetEditText($idCombo)
   _GUICtrlComboBox_SetEditText($idCombo, StringMid($sData, 1, $g_iPosAddPattern) & $sAdd & StringTrimLeft($sData, $g_iPosAddPattern))
EndFunc   ;==>ClickButton
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Répondre