22 de octubre de 2007

Cómo obtener la palabra bajo el cursor en un control editbox

Ejemplo de cómo obtener la palabra bajo el cursor en un control editbox.

PUBLIC oForm1

oForm1 = NEWOBJECT("Form1")
oForm1.SHOW
RETURN

DEFINE CLASS Form1 AS FORM
  TOP = 0
  LEFT = 0
  HEIGHT = 276
  WIDTH = 419
  DOCREATE = .T.
  CAPTION = "Form1"
  ALLOWOUTPUT = .F.
  NAME = "Form1"

  ADD OBJECT Edit1 AS EDITBOX WITH ;
    FONTNAME = "Tahoma", FONTSIZE = 8, NAME = "Edit1", ;
    ANCHOR = 15, HEIGHT = 217, LEFT = 12, TOP = 12, WIDTH = 397, ;
    VALUE = [In Windows© XP®, {owner/draw} menus show icons, but Windows Vista® uses ] ;
    + [alpha-blended bitmaps instead.] + CHR(13) + CHR(10) ;
    + [Windows Vista "provides" menus are (part of) the 'visual schema'. ] ;
    + CHR(13) + CHR(10) ;
    + [Using a destroyed menu handle] + CHR(13) + CHR(10)

  ADD OBJECT Timer1 AS TIMER WITH ;
    TOP = 216, LEFT = 0, HEIGHT = 23, WIDTH = 23, ;
    INTERVAL = 100, NAME = "Timer1"

  ADD OBJECT Text1 AS TEXTBOX WITH ;
    FONTNAME = "Tahoma", FONTSIZE = 8, ;
    HEIGHT = 23, LEFT = 12, TOP = 240, WIDTH = 396, ;
    ANCHOR = 14, READONLY = .T., NAME = "Text1"

  PROCEDURE Edit1.KEYPRESS
    LPARAMETERS nKeyCode, nShiftAltCtrl
    *!* We have to use a timer to get out of the KeyPress event loop
    *!* because Selstart and SelLength get updated AFTER pressing
    *!* the left/right arrow keys, but does NOT get updated
    *!* after pressing up/down arrow keys
    THISFORM.Timer1.ENABLED = .T.
  ENDPROC

  PROCEDURE Edit1.MOUSEUP
    LPARAMETERS nButton, nShift, nXCoord, nYCoord
    THISFORM.Timer1.ENABLED = .T.
  ENDPROC

  PROCEDURE Timer1.TIMER
    THIS.ENABLED = .F.
    m.loEdit = THISFORM.edit1
    m.charfilter = " ,;.:[]{}()/\'®©<>" + '"' + CHR(13) + CHR(0)
    m.lcWord = ""
    m.lcChar = ""
    *!* 25 arbitrary limit for search, just in case
    FOR m.lnx = 0 TO 25
      m.lcWord = m.lcChar + m.lcWord
      m.lcChar = SUBSTR(m.loEdit.TEXT, m.loEdit.SELSTART + m.loEdit.SELLENGTH - m.lnx, 1)
      IF m.lcChar $ m.charfilter
        EXIT
      ENDIF
    ENDFOR
    m.lcChar = ""
    FOR m.lnx = 1 TO 25
      m.lcWord = m.lcWord + m.lcChar
      m.lcChar = SUBSTR(m.loEdit.TEXT, m.loEdit.SELSTART + m.loEdit.SELLENGTH + m.lnx, 1)
      IF m.lcChar $ m.charfilter
        EXIT
      ENDIF
    ENDFOR
    THISFORM.text1.VALUE = m.lcWord
    m.loEdit = NULL
  ENDPROC

ENDDEFINE

Carlos Alloatti

No hay comentarios. :

Publicar un comentario