TBrowseDB tanto de FlagShip como XHarbour muestran similitudes
31/03/2010
En manejo del TBrowseDB tanto de FlagShip como XHarbour muestran
similitudes notables salvo algunos comandos muy especificos
no trabajaron en xherbour
En el trozos de programa siguiente de FlagShip los comandos
antecedidos por [?] no funcionaron, la mecanica en este caso
es distinta, por ejemplo FlagShip requiere que se especifique
directamtne que si se desea que la base de datos es editable en
XHarbour , no existe esa opcion, simplemente se maneja a traves
de la funcion de manejo del Handler,n que en XHarbour es una funcion
sencilla que se llamada una vez configurado el TBrowse , con el
comando configure(), mientras que FlagShip, genera un bloque
ejecutable a partir de la instruccion exec(), son dos enfoques
distintos pero en general trabajan de forma similar.
*************************************************************************
store FIELDPOS("RECNO") to Col_Recno
oBr:= TbrowseDb(Y(14),X(12),Y(20),X(108), NIL, NIL,"Scrol")
[?]oBr:Handler := {|obj| MovHandle (obj) }// Manejador de Teclas
[?]oBr:ReadOnly := .T. // if editing not desired
[?]oBr:CanAppend := .F. // if append data not
[?]oBr:IncrSearch := .T. // if search desired and
[?]oBr:RowCache := 10 * oBr:RowCount
oBr:Freeze := 1 // Numero de col que giran
c[1] := TbColumnNew("FECHA" , FieldBlock("FECHA") )
c[2] := TbColumnNew("FTE" , FieldBlock("FUENTE") )
c[3] := TbColumnNew("Dcto" , FieldBlock("DOCUMENTO") )
c[4] := TbColumnNew("CUENTA" , FieldBlock("CUENTA") )
c[5] := TbColumnNew("NIT" , FieldBlock("NIT") )
FOR ii = 1 to 5 // Assign columns to TBROWSE
obr:ADDCOLUMN (c[ii])
NEXT
oBr:Exec()
*************************************************************************
El mismo codigo de programa pero XHarbour, notece que en este caso
lo unico que se hizo fue declarar los separadores tanto de cabecera
como de el cuerpo de la informacion, pero las instrucciones estan
funcionales en ambas versiones xbase.
store FIELDPOS("RECNO") to Col_Recno
do ventana with Y(13),X(0),Y(21),X(80)
oBr:= TbrowseDb(Y(14),X(1),Y(20),X(78), NIL, NIL,"Scrol")
oBr:Freeze := 1 // Numero de col que giran
oBr:ColorSpec := "W+/B,N/BG"
obr:ColSep := chr(179)
obr:HeadSep := chr(197) + chr(196)
oBr:Freeze := 1 // Numero de col que giran
c[1] := TbColumnNew("FECHA" , FieldBlock("FECHA") )
c[2] := TbColumnNew("FTE" , FieldBlock("FUENTE") )
c[3] := TbColumnNew("Dcto" , FieldBlock("DOCUMENTO") )
c[4] := TbColumnNew("CUENTA" , FieldBlock("CUENTA") )
c[5] := TbColumnNew("NIT" , FieldBlock("NIT") )
oBr:Configure()
MovHandle(oBr)
*********************************************************************
El manejador xbase que es exactamene igual en las dos funciones
y queda asi:
FUNCTION MovHandle(mybrow)
local key
do while .T.
while (!mybrow:STABLE) // (re)build screen,
mybrow:STABILIZE() // wait for stabilizing
if NEXTKEY() != 0 // optional:
exit // manage async.input
endif
enddo
key := INKEY(0) // get key pressed
do case
case key = K_ESC // escape
exit // terminates browsing
case key = K_RETURN .or. key == K_LDBLCLK // return, enter
colobj := mybrow:GETCOLUMN(Col_Recno)
block := colobj:BLOCK
reg_aux:= EVAL(block) // Retrieve data using the column block
exit
case key = K_UP .or. key = K_CTRL_E // cursor up
mybrow:UP() // = previous record
case key = K_DOWN .or. key = K_CTRL_X // cursor down
mybrow:DOWN() // = next record
case key = K_PGUP .or. key = K_CTRL_R // page-up
mybrow:PAGEUP() // = previous window
case key = K_PGDN .or. key = K_CTRL_C // page-down
mybrow:PAGEDOWN() // = next windwow
case key = K_LEFT .or. key = K_CTRL_S // cursor left
mybrow:LEFT() // = column left
case key = K_RIGHT .or. key= K_CTRL_D // cursor right
mybrow:RIGHT() // = column right
case key = K_MOUSEWHEELDN // mouse wheel down, next record
mybrow:DOWN()
case key == K_ALT_MOUSEWHEELUP // mouse wheel up + modifier, pre
mybrow:UP() // = previous record
endcase
enddo
return
************************************************************************
Notece que la deficion de las teclas de operacion como K_ESC,K_RETURN
fuieron redefinidas en XHarbour segun la notacion FlagShip, mas que
todo para evitarme el cambio de las mismas con la notacion XHarbour lo
cual introduce un error potencial si alguna me queda mal definida en
el sinnumero de llamadas a estas teclas la definicon quedo asi:
procedure KeyDefine
K_UP :=5
K_ESC :=27
K_RETURN :=13
K_LDBLCLK :=1006
K_DOWN :=24
K_LEFT :=19
K_RIGHT :=4
K_PGUP :=18
K_PGDN :=3
K_HOME :=1
K_END :=6
K_CTRL_E :=5
K_CTRL_X :=24
K_CTRL_R :=18
K_CTRL_C :=3
K_CTRL_D :=4
K_CTRL_S :=19
K_MOUSEWHEELDN :=1051
K_ALT_MOUSEWHEELDN:=1054
INKEY_ALL :=255
return
Se coloca a funcionar el mouse mediante la funcion:
SET EVENTMASK INKEY_ALL
El mouse para que funcine debe ser definido para que capture los
distintos eventos.
En este caso se define INKEY_ALL := 255 para que capture todos los
eventos de ingreso de teclado y mouse
Las funciones achice y lixbox lo manejan de forma automatica si se
define previamente como se hizo arriba .
TbrowseDB y Inkey(0) simplemente capturan el evento pero jhay que
procesarlo de forma independiente, como fue definido en la funcion
KeyDefine() , arriba.
En modo texto no he podido que el Wheel [*] funcione, todo lo demas
funciona muy bien,toda investigar como activarlo, creo que es mas un
problema de el procedimiento del gpm (manejo del mouse)de linux que
de el mismo xharbour, y mas en mi caso que estoy trabajando en una
emulacion de mouse VMWARE, pues hice ua captura del inkey(0) y no
creaba ningun evento.
En manejo del TBrowseDB tanto de FlagShip como XHarbour muestran
similitudes notables salvo algunos comandos muy especificos
no trabajaron en xherbour
En el trozos de programa siguiente de FlagShip los comandos
antecedidos por [?] no funcionaron, la mecanica en este caso
es distinta, por ejemplo FlagShip requiere que se especifique
directamtne que si se desea que la base de datos es editable en
XHarbour , no existe esa opcion, simplemente se maneja a traves
de la funcion de manejo del Handler,n que en XHarbour es una funcion
sencilla que se llamada una vez configurado el TBrowse , con el
comando configure(), mientras que FlagShip, genera un bloque
ejecutable a partir de la instruccion exec(), son dos enfoques
distintos pero en general trabajan de forma similar.
*************************************************************************
store FIELDPOS("RECNO") to Col_Recno
oBr:= TbrowseDb(Y(14),X(12),Y(20),X(108), NIL, NIL,"Scrol")
[?]oBr:Handler := {|obj| MovHandle (obj) }// Manejador de Teclas
[?]oBr:ReadOnly := .T. // if editing not desired
[?]oBr:CanAppend := .F. // if append data not
[?]oBr:IncrSearch := .T. // if search desired and
[?]oBr:RowCache := 10 * oBr:RowCount
oBr:Freeze := 1 // Numero de col que giran
c[1] := TbColumnNew("FECHA" , FieldBlock("FECHA") )
c[2] := TbColumnNew("FTE" , FieldBlock("FUENTE") )
c[3] := TbColumnNew("Dcto" , FieldBlock("DOCUMENTO") )
c[4] := TbColumnNew("CUENTA" , FieldBlock("CUENTA") )
c[5] := TbColumnNew("NIT" , FieldBlock("NIT") )
FOR ii = 1 to 5 // Assign columns to TBROWSE
obr:ADDCOLUMN (c[ii])
NEXT
oBr:Exec()
*************************************************************************
El mismo codigo de programa pero XHarbour, notece que en este caso
lo unico que se hizo fue declarar los separadores tanto de cabecera
como de el cuerpo de la informacion, pero las instrucciones estan
funcionales en ambas versiones xbase.
store FIELDPOS("RECNO") to Col_Recno
do ventana with Y(13),X(0),Y(21),X(80)
oBr:= TbrowseDb(Y(14),X(1),Y(20),X(78), NIL, NIL,"Scrol")
oBr:Freeze := 1 // Numero de col que giran
oBr:ColorSpec := "W+/B,N/BG"
obr:ColSep := chr(179)
obr:HeadSep := chr(197) + chr(196)
oBr:Freeze := 1 // Numero de col que giran
c[1] := TbColumnNew("FECHA" , FieldBlock("FECHA") )
c[2] := TbColumnNew("FTE" , FieldBlock("FUENTE") )
c[3] := TbColumnNew("Dcto" , FieldBlock("DOCUMENTO") )
c[4] := TbColumnNew("CUENTA" , FieldBlock("CUENTA") )
c[5] := TbColumnNew("NIT" , FieldBlock("NIT") )
oBr:Configure()
MovHandle(oBr)
*********************************************************************
El manejador xbase que es exactamene igual en las dos funciones
y queda asi:
FUNCTION MovHandle(mybrow)
local key
do while .T.
while (!mybrow:STABLE) // (re)build screen,
mybrow:STABILIZE() // wait for stabilizing
if NEXTKEY() != 0 // optional:
exit // manage async.input
endif
enddo
key := INKEY(0) // get key pressed
do case
case key = K_ESC // escape
exit // terminates browsing
case key = K_RETURN .or. key == K_LDBLCLK // return, enter
colobj := mybrow:GETCOLUMN(Col_Recno)
block := colobj:BLOCK
reg_aux:= EVAL(block) // Retrieve data using the column block
exit
case key = K_UP .or. key = K_CTRL_E // cursor up
mybrow:UP() // = previous record
case key = K_DOWN .or. key = K_CTRL_X // cursor down
mybrow:DOWN() // = next record
case key = K_PGUP .or. key = K_CTRL_R // page-up
mybrow:PAGEUP() // = previous window
case key = K_PGDN .or. key = K_CTRL_C // page-down
mybrow:PAGEDOWN() // = next windwow
case key = K_LEFT .or. key = K_CTRL_S // cursor left
mybrow:LEFT() // = column left
case key = K_RIGHT .or. key= K_CTRL_D // cursor right
mybrow:RIGHT() // = column right
case key = K_MOUSEWHEELDN // mouse wheel down, next record
mybrow:DOWN()
case key == K_ALT_MOUSEWHEELUP // mouse wheel up + modifier, pre
mybrow:UP() // = previous record
endcase
enddo
return
************************************************************************
Notece que la deficion de las teclas de operacion como K_ESC,K_RETURN
fuieron redefinidas en XHarbour segun la notacion FlagShip, mas que
todo para evitarme el cambio de las mismas con la notacion XHarbour lo
cual introduce un error potencial si alguna me queda mal definida en
el sinnumero de llamadas a estas teclas la definicon quedo asi:
procedure KeyDefine
K_UP :=5
K_ESC :=27
K_RETURN :=13
K_LDBLCLK :=1006
K_DOWN :=24
K_LEFT :=19
K_RIGHT :=4
K_PGUP :=18
K_PGDN :=3
K_HOME :=1
K_END :=6
K_CTRL_E :=5
K_CTRL_X :=24
K_CTRL_R :=18
K_CTRL_C :=3
K_CTRL_D :=4
K_CTRL_S :=19
K_MOUSEWHEELDN :=1051
K_ALT_MOUSEWHEELDN:=1054
INKEY_ALL :=255
return
Se coloca a funcionar el mouse mediante la funcion:
SET EVENTMASK INKEY_ALL
El mouse para que funcine debe ser definido para que capture los
distintos eventos.
En este caso se define INKEY_ALL := 255 para que capture todos los
eventos de ingreso de teclado y mouse
Las funciones achice y lixbox lo manejan de forma automatica si se
define previamente como se hizo arriba .
TbrowseDB y Inkey(0) simplemente capturan el evento pero jhay que
procesarlo de forma independiente, como fue definido en la funcion
KeyDefine() , arriba.
En modo texto no he podido que el Wheel [*] funcione, todo lo demas
funciona muy bien,toda investigar como activarlo, creo que es mas un
problema de el procedimiento del gpm (manejo del mouse)de linux que
de el mismo xharbour, y mas en mi caso que estoy trabajando en una
emulacion de mouse VMWARE, pues hice ua captura del inkey(0) y no
creaba ningun evento.
Comentarios
Publicar un comentario