Obtient les coordonnées XY d'une position inter-caractères
#include <GuiRichEdit.au3>
_GUICtrlRichEdit_GetXYFromCharPos ( $hWnd, $iCharPos )
$hWnd | Handle du contrôle |
$iCharPos | La position inter-caractères |
Succès: | Retourne un tableau [x,y] - Coordonnées de la position inter-caractère, par rapport à l'angle supérieur gauche de la zone cliente. |
Échec: | Définit @error <> 0. |
@error: | 101 - $hWnd n'est pas une handle 1021 - $iCharPos n'est ni un nombre positif ni zéro 1022 - $iCharPos est supérieur au nombre de caractères du contrôle |
La première position inter-caractères est numéroté 0.
Avec un contrôle multi-ligne, les coordonnées sont retournés même pour des position inter-caractères qui ne sont pas visibles.
_GUICtrlRichEdit_GetCharPosFromXY
Consultez EM_POSFROMCHAR dans la librairie MSDN.
#include <GUIConstantsEx.au3> #include <GuiRichEdit.au3> #include <WindowsConstants.au3> Global $g_idLblMsg Example() Func Example() Local $hGui, $hRichEdit, $iMsg, $aiPos, $idBtnNext, $iStep = 0 $hGui = GUICreate("Exemple (" & StringTrimRight(@ScriptName, 4) & ")", 320, 350, -1, -1) $hRichEdit = _GUICtrlRichEdit_Create($hGui, "Ceci est un test.", 10, 10, 300, 220, _ BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL)) $g_idLblMsg = GUICtrlCreateLabel("", 10, 235, 300, 60) $idBtnNext = GUICtrlCreateButton("Suivant", 270, 310, 40, 30) GUISetState(@SW_SHOW) _GUICtrlRichEdit_AppendText($hRichEdit, @CRLF & "Ceci est du texte ajouté.") $iMsg = GUIGetMsg() While $iMsg <> $GUI_EVENT_CLOSE If $iMsg = $idBtnNext Then $iStep += 1 Switch $iStep Case 1 $aiPos = _GUICtrlRichEdit_GetXYFromCharPos($hRichEdit, 20) Report("1.Les coordonnées de la position inter-caractères 20 sont (" & $aiPos[0] & "," & $aiPos[1] & ")") Case 2 Report("2.La position inter-caractères la plus proche des coordonnées (" & $aiPos[0] & "," & $aiPos[1] & ") est " & _ _GUICtrlRichEdit_GetCharPosFromXY($hRichEdit, $aiPos[0], $aiPos[1])) GUICtrlSetState($idBtnNext, $GUI_DISABLE) EndSwitch EndIf $iMsg = GUIGetMsg() WEnd _GUICtrlRichEdit_Destroy($hRichEdit) ; Nécessaire sauf si le script se bloque ; GUIDelete(); est OK aussi EndFunc ;==>Example Func Report($sMsg) GUICtrlSetData($g_idLblMsg, $sMsg) EndFunc ;==>Report