Hola,
A mi se me producia ese problema cuando el get contenia espacios.
Por ejemplo, lo tengo inicializado a 60 espacios e intento pegar cualquier cosa en él.
Para probar si es eso, selecciona todo el contenido del get (los espacios) antes de pegar, de esa forma se pegará el contenido sin tener en cuenta los espacios.
Para evitar tener que seleccionar el campo antes de pegar he realizado los siguientes cambios en la clase tget:
He redefinido la clase RButtonDown para que no llame a las opciones por defecto (mis clientes usan botón derecho para copiar/pegar):
Code: Select all
METHOD RButtonDown( nRow, nCol, nFlags ) CLASS TGGet
local oMenu, oClp, cText
if GetFocus() != ::hWnd
::SetFocus()
SysRefresh() // In case there is a VALID somewhere
if GetFocus() != ::hWnd
return nil
endif
endif
if ::bRClicked != nil
return Eval( ::bRClicked, nRow, nCol, nFlags )
endif
DEFINE CLIPBOARD oClp OF Self FORMAT TEXT
MENU oMenu POPUP
if ::SendMsg( EM_UNDO ) != 0
#ifndef __XPP__
MENUITEM "Deshacer" ACTION ::UnDo()
#else
MENUITEM "Deshacer" ACTION ::TGet:UnDo()
#endif
else
#ifndef __XPP__
MENUITEM "Deshacer" ACTION ::UnDo() DISABLED
#else
MENUITEM "Deshacer" ACTION ::TGet:UnDo() DISABLED
#endif
endif
SEPARATOR
if ! Empty( ::GetSel() ) .and. !::lReadOnly
#ifndef __XPP__
MENUITEM "Cortar" ACTION ::Cut()
#else
MENUITEM "Cortar" ACTION ::TGet:Cut()
#endif
else
#ifndef __XPP__
MENUITEM "Cortar" ACTION ::Cut() DISABLED
#else
MENUITEM "Cortar" ACTION ::TGet:Cut() DISABLED
#endif
endif
if ! Empty( ::GetSel() )
#ifndef __XPP__
MENUITEM "Copiar" ACTION ::Copy()
#else
MENUITEM "Copiar" ACTION ::TGet:Copy()
#endif
else
#ifndef __XPP__
MENUITEM "Copiar" ACTION ::Copy() DISABLED
#else
MENUITEM "Copiar" ACTION ::TGet:Copy() DISABLED
#endif
endif
if ! Empty( oClp:GetText() ) .and. !::lReadOnly
#ifndef __XPP__
MENUITEM "Pegar" ACTION ::Paste()
#else
MENUITEM "Pegar" ACTION ::TGet:Paste()
#endif
else
#ifndef __XPP__
MENUITEM "Pegar" ACTION ::Paste() DISABLED
#else
MENUITEM "Pegar" ACTION ::TGet:Paste() DISABLED
#endif
endif
if ! Empty( ::GetSel() ) .and. !::lReadOnly
#ifndef __XPP__
MENUITEM "Borrar" ACTION ::Del()
#else
MENUITEM "Borrar" ACTION ::TGet:Del()
#endif
else
#ifndef __XPP__
MENUITEM "Borrar" ACTION ::Del() DISABLED
#else
MENUITEM "Borrar" ACTION ::TGet:Del() DISABLED
#endif
endif
SEPARATOR
#ifndef __XPP__
MENUITEM "Imprimir" ACTION ::Print()
#else
MENUITEM "Imprimir" ACTION ::TGet:Print()
#endif
SEPARATOR
#ifndef __XPP__
MENUITEM "Seleccionar todo" ACTION ::SelectAll()
#else
MENUITEM "Seleccionar todo" ACTION ::TGet:SelectAll()
#endif
ENDMENU
ACTIVATE POPUP oMenu AT nRow, nCol OF Self
return 0
Y lo mas importante he cambiado en el método Paste la siguiente instrucción
cTemp = ::GetText()
por
cTemp = Alltrim(::GetText())
Code: Select all
METHOD Paste( cText ) CLASS TGet
local oClp
local cTemp
DEFINE CLIPBOARD oClp OF Self FORMAT TEXT
if cText == nil
if oClp:Open()
cText = oClp:GetText()
oClp:Close()
else
MsgAlert( "The clipboard is not available!" )
endif
endif
if ! Empty( cText )
cTemp = Alltrim(::GetText()) //... fgondi
do case
case ValType( cTemp ) == "C"
::oGet:Buffer = SubStr( cTemp, 1, ::nPos - 1 ) + Trim( cText ) + ;
SubStr( cTemp, ::nPos )
case ValType( cTemp ) == "N"
cTemp = cValToChar( cTemp )
::oGet:Buffer = Val( SubStr( cTemp, 1, ::nPos - 1 ) + Trim( cText ) + ;
SubStr( cTemp, ::nPos ) )
case ValType( cTemp ) == "D"
cTemp = cValToChar( cTemp )
::oGet:Buffer = CToD( SubStr( cTemp, 1, ::nPos - 1 ) + Trim( cText ) + ;
SubStr( cTemp, ::nPos ) )
endcase
::DispText() // from buffer to screen
// EMW - the text has been changed!
if ::bChange != nil
Eval( ::bChange,,, Self )
endif
endif
return nil