para mostrar mi problema, he modificado el ejemplo xbrabln.prg
- Code: Select all Expand view
- #include "fivewin.ch"
#include "xbrowse.ch"
function main()
local aData := {}
local oWnd, oBrw, oBar
define window oWnd
define buttonbar oBar size 100,32 of oWnd 2007
define button of oBar prompt 'AddRow' action AddRow( oBrw )
define button of oBar prompt 'DeleteRow' action DelRow( oBrw )
@ 0,0 xbrowse oBrw of oWnd ;
header 'one','two','three' ;
columns 1, 2, 3 ;
colsizes 50,70,50 ;
pictures '999','mmm dd, yyyy', '!!!!!!' ;
array aData lines cell fastedit
AEval( oBrw:aCols, { |o| o:nEditType := EDIT_GET } )
oBrw:bPastEof := { || AddRow( oBrw ) }
oBrw:bKeyDown := {| nKey | If( nKey == VK_DELETE, DelRow( oBrw ), ) }
oBrw:aCols[3]:bOnPostEdit := {|o,v,nkey| valid( o, v, nkey, oBrw ) }
oBrw:CreateFromCode()
oWnd:oClient := oBrw
activate window oWnd
return nil
static function valid( o,v,nkey,oBrw)
IF AT( ALLTRIM(v), "######" ) != 0
o:value := ALLTRIM(v)
ELSE
IF oBrw:nArrayAt = LEN( oBrw:aArrayData )
DelRow( oBrw )
ENDIF
ENDIF
RETURN NIL
static function AddRow( oBrw )
static n := 0
AAdd( oBrw:aArrayData, { n, date()+n, "###" } )
n++
oBrw:GoBottom()
oBrw:Refresh()
oBrw:SetFocus()
oBrw:SetPos( , 3 )
oBrw:SelectedCol():edit()
return nil
static function DelRow( oBrw )
if oBrw:nLen > 0
ADel( oBrw:aArrayData, oBrw:nArrayAt )
ASize( oBrw:aArrayData, oBrw:nLen - 1 )
oBrw:Refresh()
endif
oBrw:SetFocus()
return nil
1.- Describo las operaciones que hago para tener el comportamiento raro
1 .- Añadir 4 elemento con el boton "AddRow" de manera seguida
2 .- sin hacer nada digitar por ejmplo "123" en el cuarto elemento preparado para la edicion
3 .- regresar con el cursor (oprimir continuamente) hacia arriba
4 .- EL cursor no se posiciona en la primera fila del xBrowse, se queda en la segunda, pero si con el mouse se puede posicionar el cursor en la primera fila
2.- Siendo que tenemos definido como FASTEDIT, como hago para que inicie la edicion con el caracter '#' ya que para pulsarlo necesito hacerlo conjuntamente con shift (mi teclado es en ingles) creo que en los teclados en español se lo realiza con Alt
3.- Deseo tener un xBrowse definido por recurso sin borde 3D, es decir quisiera que fuera como el borde de un GET (linea simple azul) aplicando temas XP
le he quitado la propiedad WS_BORDER en le recurso, pero queda ya tambien sin bordes (peor)
Ahora una pregunta de OOP
como puedo referenciar a un metodo de un objeto cuando utilizo una instancia de otro objeto dentro el por ejemplo
- Code: Select all Expand view
REDEFINE DBCOMBO ::oDbf:separador ID 14 OF ::oDlg ;
LIST {"punto","guión","espacio"} ITEMS {".","-"," "};
ON CHANGE ::crea_formato()
El DBCOMBO esta definido dentro un metodo de otra clase, el metodo crea_formato() es un metodo tambien de la clase, pero en la ejecucion, intenta ejecutar crea_formato() como si fuera metodo de DBCOMBO, como debo especificar crea_formato() para que haga referencia a la clase contenedora.
ESTO SOLUCIONADO ASI!
- Code: Select all Expand view
OBJ := SELF
REDEFINE DBCOMBO ::oDbf:separador ID 14 OF ::oDlg ;
LIST {"punto","guión","espacio"} ITEMS {".","-"," "};
ON CHANGE OBJ:crea_formato()
Espero sea clara mi exposición, estoy utilizando FWH9.06
saludos
Marcelo