EXEMPLO EXTENDENDO CLASSE QT
Código: Selecionar todos
PROCEDURE ExtendQLineEdit()
EXTEND CLASS QLineEdit WITH DATA cbGetSet //bloco de codigo para salvar e restaura variavel/campo vinculado ao controle
EXTEND CLASS QLineEdit WITH DATA VarTipo //tipo original de variavel vinculado ao controle, buffer e sempre string, recuperado de ::cbGetSet
EXTEND CLASS QLineEdit WITH DATA cbWhen
EXTEND CLASS QLineEdit WITH DATA cbValid
EXTEND CLASS QLineEdit WITH MESSAGE VarGet METHOD VarGet //retornava valor do buffer, ::Text()
EXTEND CLASS QLineEdit WITH MESSAGE VarPut METHOD VarPut //altera variavel, passando parametro para VarPut( [uSet] ), altera buffer
EXTEND CLASS QLineEdit WITH MESSAGE Refresh METHOD Refresh1 //restaura buffer, ::Text(), usando ::cbGetSet
EXTEND CLASS QLineEdit WITH MESSAGE Commit METHOD Commit1 //altera variavel vinculado ao controle, passando parametro para ::Commit( default uSet=::Text() )
EXTEND CLASS QLineEdit WITH MESSAGE Upper INLINE Upper(::Text())
EXTEND CLASS QLineEdit WITH MESSAGE Lower INLINE Lower(::Text())
EXTEND CLASS QLineEdit WITH MESSAGE SetKey(cbKey, sCtrl, nKey) INLINE addKeyPress(Self, cbKey, sCtrl, nKey)
RETURN
STATIC FUNCTION VarGet()
LOCAL Self := QSelf(), uRet
uRet := ::Text()
IF ::cbGetSet <> NIL
DEFA ::VarTipo TO ValType(Eval(::cbGetSet))
ELSE
DEFA ::VarTipo TO "C"
ENDIF
uRet := ConvertVar(uRet, ::VarTipo)
RETURN uRet
//uSet altera buffer e variavel vinculada ao controle
STATIC FUNCTION VarPut(uSet)
LOCAL Self := QSelf()
IF uSet <> NIL
::SetText( Trim( ConvertVar(uSet, 'C') ) )
ENDIF
RETURN ::Commit()
STATIC FUNCTION Refresh1()
LOCAL Self := QSelf()
LOCAL uBuffer
//::__Super:Refresh()
IF ::cbGetSet <> NIL
uBuffer := Eval(::cbGetSet)
DEFA ::VarTipo TO ValType(uBuffer)
IF ::VarTipo = 'D'
uBuffer := DToC(uBuffer)
ENDIF
::SetText( Trim( xStr( uBuffer ) ) )
ELSE
uBuffer := ::Text()
ENDIF
RETURN uBuffer
//uSet altera variavel vinculada ao controle
STATIC FUNCTION Commit1(uSet)
LOCAL Self := QSelf()
LOCAL uBuffer
//::__Super:Commit()
DEFA uSet TO ::Text()
IF ::cbGetSet <> NIL
DEFA ::VarTipo TO ValType(Eval(::cbGetSet))
uBuffer := ConvertVar(uSet, ::VarTipo)
Eval(::cbGetSet, uBuffer)
ELSE
uBuffer := uSet
ENDIF
RETURN uBuffer
PROCEDURE AddKeyPress( Obj, cbSetKey, sCtrl, nKey )
LOCAL nPos
DEFA sCtrl TO ""
DEFA nKey TO 0
IF !ValType(Obj) = 'O'
RETURN
ENDIF
IF !__objHasData(Obj, 'acbKey')
IF Empty(cbSetKey)
RETURN
ELSE
AddVar(Obj, "acbKey")
Obj:acbKey := {}
ENDIF
ELSEIF Empty(cbSetKey) .and. (Empty(Obj:acbKey) .or. Len(Obj:acbKey) = 0)
RETURN
ENDIF
IF Empty(sCtrl)
nPos := 0
ELSEIF ValType(sCtrl) = "C"
nPos := aScan({ 'SHIFT', 'CONTROL', 'ALT', 'META' , 'KEYPAD', 'GROUPSWITCH' }, Upper(sCtrl))
IF nPos > 0 .and. nPos < 7
nPos :=({Qt_ShiftModifier, Qt_ControlModifier, Qt_AltModifier, Qt_MetaModifier, Qt_KeypadModifier, Qt_GroupSwitchModifier})[nPos]
ELSE
nPos := 0
ENDIF
ELSE
nPos := sCtrl
ENDIF
IF obj:acbKey = NIL
obj:acbKey := {}
ENDIF
IF Empty(cbSetKey)
cbSetKey := AScan(Obj:acbKey, {|p| p[1] = nPos .and. p[2] = nKey})
IF cbSetKey > 0
aDelSize(Obj:acbKey, cbSetKey)
ENDIF
ELSE
AAdd(Obj:acbKey, {nPos, nKey, cbSetKey})
ENDIF
RETURN
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000