es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AutoHotkey: el cálculo con las coordenadas del ratón no funciona.

Suponga que al hacer clic y mantenerlo presionado, quiero mostrar una caja de color que cubra el área entre el clic y la liberación del botón izquierdo del mouse. El siguiente script sencillo rastrea la posición del mouse al hacer clic y liberar si se mantiene presionada la tecla Ctrl y muestra una sugerencia con el área cubierta. Mostrar la caja solo funciona si especifico un tamaño fijo para la caja:

caja roja y sugerencia

Sin embargo, si intento calcular el tamaño de la caja (descomenta la última línea de código), la mayoría de las veces no se muestra ninguna caja?

Ctrl & LButton::
    MouseGetPos, start<em>x, start</em>y

<pre><code>Keywait, LButton
MouseGetPos, end_x, end_y

; mostrar coordenadas para depuración
ToolTip % &quot;dx: &quot; . end_x-start_x . &quot;`ndy: &quot; . end_y-start_y

Gui, -Caption -Border +AlwaysOnTop
Gui, Color, red

; funciona con tamaño fijo ...
Gui, Show, % &quot;x&quot; start_x &quot;y&quot; start_y &quot;w&quot; 100 &quot;h&quot; 10

; ... pero lo siguiente no funciona
;Gui, Show, % &quot;x&quot; start_x &quot;y&quot; start_y &quot;w&quot; end_x-start_x &quot;h&quot; end_y-start_y
</code></pre>

Tags:  

Answer

  1. Avatar for davy.ai

    Para mostrar un cuadro de color que cubre el área entre hacer clic y soltar el botón izquierdo del mouse, el script necesita calcular el tamaño del cuadro en función de la distancia entre las posiciones de inicio y fin del mouse. Sin embargo, descomentar la última línea de código que establece el ancho y alto del cuadro en función de la diferencia entre las posiciones de inicio y fin hace que el cuadro no se muestre la mayoría de las veces. Para solucionar esto, el comando Gui, Show debe estar envuelto en un bucle que espere a que la GUI se haya creado por completo antes de establecer su tamaño. Esto se puede hacer agregando la opción +LastFound al comando Gui, Show y usando un bucle que espere a que aparezca la ventana de la GUI:

    Ctrl & LButton::
        MouseGetPos, start_x, start_y
    
        Keywait, LButton
        MouseGetPos, end_x, end_y
    
        ; mostrar coordenadas para depuración
        ToolTip "dx: " . end_x-start_x . "`ndy: " . end_y-start_y
    
        Gui, -Caption -Border +AlwaysOnTop
        Gui, Color, red
    
        ; calcular tamaño del cuadro y mostrarlo
        box_width := end_x-start_x
        box_height := end_y-start_y
        Gui, +LastFound
        Gui, Show, % "x" start_x "y" start_y "w100 h10"
        WinWaitActive, ahk_id %gui_id%
        Gui, % "+Hwnd" gui_id "w" box_width "h" box_height "+Resize"
    return
    

    Este script modificado calcula el ancho y alto del cuadro en función de la diferencia entre las posiciones de inicio y fin del mouse, y utiliza un bucle para esperar a que se cree la ventana de la GUI antes de establecer su tamaño. Esto asegura que el cuadro se muestre siempre, independientemente de la distancia entre las posiciones de inicio y fin.

Comments are closed.