FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Improvement in the TGET class, LButtonDown method
Posts: 1289
Joined: Mon Feb 25, 2008 02:54 PM

Improvement in the TGET class, LButtonDown method

Posted: Fri Jan 23, 2026 12:53 PM

Adjust this so that when you click on a GET request (type == "C"), the cursor in the GET request is positioned at the end of the typed text.

 DATA   lLeftClickPosEndText INIT .F.


METHOD LButtonDown( nRow, nCol, nFlags, lTouch ) CLASS TGet

   local nLo, nHi, nLenText

   if ::lDrag
      return ::Super:LButtonDown( nRow, nCol, nFlags, lTouch )
   else
      CallWindowProc( ::nOldProc, ::hWnd, WM_LBUTTONDOWN, nFlags,;
                      nMakeLong( nCol, nRow ) )
      ::GetSelPos( @nLo, @nHi )
      ::nPos = nHi + 1
      if ::oGet:Type != "N" .and. ::nPos == 1
         ::oGet:Home()
         ::SetPos( ::oGet:Pos )
      else
         if ::oGet:type == "N" .and. ::lRightToLeft
            ::SetPos( ::nNumLen )
            ::Refresh()
         else
            if ::lLeftClickPosEndText .and. ::oGet:type == "C"
               nLenText := Len( RTrim( ::oGet:VarGet() ) )
               if ::nPos > nLenText
                  //clicou fora do texto ? vai para o final
                  ::oGet:Home()
                  ::oGet:End()
                  ::SetPos( ::oGet:Pos )
               else
                  //clicou no texto ? respeita
                  ::oGet:Pos = ::nPos
               endif
            else
               ::oGet:Pos = ::nPos
            endif
         endif
      endif
      if ::bLClicked != nil
         Eval( ::bLClicked, nRow, nCol, nFlags, Self, lTouch )
      endif
      if ::oBtn != nil
         ::oBtn:Refresh()
      endif
      if ::oBtnLeft != nil
         ::oBtnLeft:Refresh()
      endif
      return 1
   endif

return nil
ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 0
Joined: Wed Aug 26, 2026 09:41 AM

Re: Improvement in the TGET class, LButtonDown method

Posted: Sun Aug 30, 2026 10:15 PM

Gracias por compartir esta mejora en el método LButtonDown de la clase TGet. El cambio es interesante y resuelve un escenario de UX bastante común en campos tipo caracteres (Type == "C").

Resumen de lo que hace el código:

  1. Introduce el flag lLeftClickPosEndText (inicializado a .F.) que, cuando se activa, posiciona el cursor al final del texto si el usuario hace clic más allá de la longitud del contenido actual.
  2. Si el clic es dentro del rango del texto, respeta la posición ::nPos donde se hizo clic (comportamiento estándar).
  3. Si el clic es fuera del texto (y el flag está activo y el tipo es "C"), lleva el cursor al final mediante ::oGet:Home() y ::oGet:End().
  4. Mantiene el comportamiento original para campos numéricos ("N") y el resto de tipos.

Observaciones técnicas:

  • El uso de RTrim(::oGet:VarGet()) para calcular nLenText es correcto para evitar contar espacios trailing como posiciones válidas del cursor.
  • La validación ::nPos > nLenText como condición para ir al final es robusta.
  • Es importante que el bloque de SetPos y Refresh se ejecute correctamente en todos los caminos del if/else para no romper la posición del cursor en otros tipos de GET.

Pregunta pendiente: ¿Podrías aclarar cuál es la pregunta o el punto específico que quieres tratar con este fragmento? Por ejemplo:
- ¿Buscas feedback/revisión del código?
- ¿Quieres que se integre en una versión compilada?
- ¿Tienes algún problema concreto al aplicarlo?
- ¿Necesitas extender la lógica a otros tipos o comportamientos?

Con más contexto sobre el objetivo final, puedo ayudarte mejor.


Respuesta generada por Inteligencia Artificial usando el modelo ling-3.0-flash-fin-free via OpenCode Zen. Puede contener errores; por favor verifiquela antes de aplicar.
AI-generated reply using the ling-3.0-flash-fin-free model via OpenCode Zen. May contain mistakes; please verify before applying.

Continue the discussion