Estimado Mister Nao
Después de un montón de pruebas con el ejemplo xbincflt.prg y una vez adaptado a mi programa, sin que los fallos que a mi me dan se produjesen, miro en ambos .prgs las diferencias que hay, y sólo encuentro una : En el ejemplo xbincflt.prg hay dos includes que yo no tengo, son ord.ch y hbcompat.ch.
Coloco en el módulo que me da el error esos dos includes y como dicen los franceses "et voila" el programa funciona correctamente sin problemas y además con el tercer parámetro del setcheck(arraybitmaps, lEdit, ArrayCaracteres).
No ha sido necesario tocar las líneas que usted me indica, no obstante haré los cambios oportunos por si de esa manera funcionara igualmente.
De todas formas le digo que ahora mismo está funcionando correctamente con tan solo adicionar al inicio esos includes.
Modulo original que no funciona
Code: Select all | Expand
#Include "Fivewin.ch"
#Include "Xbrowse.CH"
#Include "ADODEF.CH"
#define ID_ALT 1 // Alta
#define ID_MOD 3 // Modificar
Static oFontCli, oRsClien
*------------------------------------------------------------------------------
function Clientes(oBarMain)
*------------------------------------------------------------------------------
Local oWChild, oBar, oBrw
Local oError
Local aRowGrad,aSelGrad ,aCampos
oBarMain:Disable()
oRsClien := FW_OpenRecordSet( oConex, "SELECT * FROM CLIENTES ORDER BY CODIGO", 3 )
* If oConex <> nil
* oRsClien := TOLEAUTO():NEW("ADODB.RecordSet")
* oRsClien:Activeconnection(oConex)
* oRsClien:Locktype := adLockOptimistic
* oRsClien:CursorType := adOpenDynamic
* oRsClien:CursorLocation := adUseClient
* oRsClien:Source := "SELECT * FROM CLIENTES ORDER BY CODIGO"
*
* TRY
* oRsClien:Open()
* CATCH
* FOR EACH oError IN oCone:Errors
* ShowError(oError)
* NEXT
* END
* //--------------------------------------------------------------//
* Else
* MsgStop("No hay conexión con la base de datos","ATENCION")
* oBarMain:Enable()
* Return nil
* EndIf
aRowGrad := { { .5, RGB( 232, 241, 252 ), RGB( 232, 241, 252 ) }, ;
{ .5, RGB( 210, 225, 244 ), RGB( 235, 243, 253 ) } }
aSelGrad := { { .5, RGB( 255, 255, 251 ), RGB( 255, 237, 178 ) }, ;
{ .5, RGB( 255, 218, 103 ), RGB( 255, 233, 162 ) } }
* Info(oRsClien)
DEFINE FONT oFontCli NAME "VERDANA" SIZE 0, -11
DEFINE WINDOW oWChild MDICHILD NOSYSMENU;
TITLE "Fichero de Clientes" OF oWMain
SET FONT OF oWChild TO oFontCli
DEFINE BUTTONBAR oBar SIZE 70,60 OF oWChild 2007
DEFINE BUTTON NAME "Crear" OF oBar ;
PROMPT "NUEVO";
ACTION CtrCliente( ID_ALT,oWChild,oBrw) TOOLTIP "Nuevos Clientes"
DEFINE BUTTON NAME "Editar" OF oBar ;
PROMPT "EDITAR";
ACTION CtrCliente( ID_MOD,oWchild,oBrw ) TOOLTIP "Editar Clientes"
DEFINE BUTTON NAME "Borrar" OF oBar ;
PROMPT "BORRAR";
ACTION BorraCliente(oBrw ) TOOLTIP "Borrar Clientes"
DEFINE BUTTON NAME "Buscar" ;
PROMPT "BUSCAR";
OF oBar TOOLTIP "Busca un Registro";
ACTION BuscaTbrw( oRsClien,oBrw,cBusca )
DEFINE BUTTON NAME "Salir" ;
PROMPT "SALIR";
OF oBar TOOLTIP "Salir de esta pantalla";
ACTION oWChild:End()
oBrw := TXBrowse():New( oWChild )
oBrw:SetAdo( oRsClien, .T.,.T.)
WITH OBJECT oBrw
:lColDividerComplete := .t.
:nMarqueeStyle := 3
:nColDividerStyle := 1
:nHeaderLines := 2
:lFooter := .t.
:nStretchCol := 1
:bClrSelFocus := { || { CLR_BLACK, aSelGrad } }
:bClrRowFocus := { || { CLR_BLACK, aRowGrad } }
:bClrStd := {|| IIF(oRsClien:AbsolutePosition % 2 == 0,{ CLR_BLACK, RGB( 224, 236, 255 ) }, { CLR_BLACK, RGB( 189, 211, 253 ) } )}
:CreateFromCode()
:Adjust()
:l2007 := .t.
END
For nFor := 1 to len( oBrw:aCols )
oCol := oBrw:aCols[ nFor ]
oCol:nEditType := 0
If oCol:Value = nil
oCol:cEditPicture := Space(10)
EndIf
oCol:blDClickData := {|| CtrCliente(ID_MOD,oWChild,oBrw),oBrw:Refresh() }
next
* oBrw:aCols[13]:SetCheck ({"CHECKON","CHECKOFF"},.F.,{"Si","No",""} )
* oBrw:aCols[14]:SetCheck ({"CHECKON","CHECKOFF"},.F.,{"Si","No",""} )
oBrw:aCols[13]:SetCheck ( nil,.T.,{"Si","No",""} )
oBrw:aCols[14]:SetCheck ( nil,.T.,{"Si","No",""} )
@ 11,460 SAY oBrw:oSeek PROMPT oBrw:cSeek SIZE 200,12 PIXEL BORDER;
OF oWChild COLOR CLR_BLACK,CLR_YELLOW PICTURE '@!'
oWChild:oClient := oBrw
ACTIVATE WINDOW oWChild MAXIMIZED ;
ON INIT oBrw:SetFocus();
VALID( oBarMain:Enable(),oRsClien:Close(),oRsClien := "Nothing",.t. )
SysRefresh()
RELEASE FONT oFontCli
return( nil )
Módulo modificado que si funciona correctamente
Code: Select all | Expand
#Include "Fivewin.ch"
#include 'ord.ch'
#Include "Xbrowse.CH"
#include 'hbcompat.ch'
#Include "ADODEF.CH"
#define ID_ALT 1 // Alta
#define ID_MOD 3 // Modificar
Static oFontCli, oRsClien
*------------------------------------------------------------------------------
function Clientes(oBarMain)
*------------------------------------------------------------------------------
Local oWChild, oBar, oBrw
Local oError
Local aRowGrad,aSelGrad ,aCampos
oBarMain:Disable()
oRsClien := FW_OpenRecordSet( oConex, "SELECT * FROM CLIENTES ORDER BY CODIGO", 3 )
* If oConex <> nil
* oRsClien := TOLEAUTO():NEW("ADODB.RecordSet")
* oRsClien:Activeconnection(oConex)
* oRsClien:Locktype := adLockOptimistic
* oRsClien:CursorType := adOpenDynamic
* oRsClien:CursorLocation := adUseClient
* oRsClien:Source := "SELECT * FROM CLIENTES ORDER BY CODIGO"
*
* TRY
* oRsClien:Open()
* CATCH
* FOR EACH oError IN oCone:Errors
* ShowError(oError)
* NEXT
* END
* //--------------------------------------------------------------//
* Else
* MsgStop("No hay conexión con la base de datos","ATENCION")
* oBarMain:Enable()
* Return nil
* EndIf
aRowGrad := { { .5, RGB( 232, 241, 252 ), RGB( 232, 241, 252 ) }, ;
{ .5, RGB( 210, 225, 244 ), RGB( 235, 243, 253 ) } }
aSelGrad := { { .5, RGB( 255, 255, 251 ), RGB( 255, 237, 178 ) }, ;
{ .5, RGB( 255, 218, 103 ), RGB( 255, 233, 162 ) } }
* Info(oRsClien)
DEFINE FONT oFontCli NAME "VERDANA" SIZE 0, -11
DEFINE WINDOW oWChild MDICHILD NOSYSMENU;
TITLE "Fichero de Clientes" OF oWMain
SET FONT OF oWChild TO oFontCli
DEFINE BUTTONBAR oBar SIZE 70,60 OF oWChild 2007
DEFINE BUTTON NAME "Crear" OF oBar ;
PROMPT "NUEVO";
ACTION CtrCliente( ID_ALT,oWChild,oBrw) TOOLTIP "Nuevos Clientes"
DEFINE BUTTON NAME "Editar" OF oBar ;
PROMPT "EDITAR";
ACTION CtrCliente( ID_MOD,oWchild,oBrw ) TOOLTIP "Editar Clientes"
DEFINE BUTTON NAME "Borrar" OF oBar ;
PROMPT "BORRAR";
ACTION BorraCliente(oBrw ) TOOLTIP "Borrar Clientes"
DEFINE BUTTON NAME "Buscar" ;
PROMPT "BUSCAR";
OF oBar TOOLTIP "Busca un Registro";
ACTION BuscaTbrw( oRsClien,oBrw,cBusca )
DEFINE BUTTON NAME "Salir" ;
PROMPT "SALIR";
OF oBar TOOLTIP "Salir de esta pantalla";
ACTION oWChild:End()
oBrw := TXBrowse():New( oWChild )
oBrw:SetAdo( oRsClien, .T.,.T.)
WITH OBJECT oBrw
:lColDividerComplete := .t.
:nMarqueeStyle := 3
:nColDividerStyle := 1
:nHeaderLines := 2
:lFooter := .t.
:nStretchCol := 1
:bClrSelFocus := { || { CLR_BLACK, aSelGrad } }
:bClrRowFocus := { || { CLR_BLACK, aRowGrad } }
:bClrStd := {|| IIF(oRsClien:AbsolutePosition % 2 == 0,{ CLR_BLACK, RGB( 224, 236, 255 ) }, { CLR_BLACK, RGB( 189, 211, 253 ) } )}
:CreateFromCode()
:Adjust()
:l2007 := .t.
END
For nFor := 1 to len( oBrw:aCols )
oCol := oBrw:aCols[ nFor ]
oCol:nEditType := 0
If oCol:Value = nil
oCol:cEditPicture := Space(10)
EndIf
oCol:blDClickData := {|| CtrCliente(ID_MOD,oWChild,oBrw),oBrw:Refresh() }
next
* oBrw:aCols[13]:SetCheck ({"CHECKON","CHECKOFF"},.F.,{"Si","No",""} )
* oBrw:aCols[14]:SetCheck ({"CHECKON","CHECKOFF"},.F.,{"Si","No",""} )
oBrw:aCols[13]:SetCheck ( nil,.T.,{"Si","No",""} )
oBrw:aCols[14]:SetCheck ( nil,.T.,{"Si","No",""} )
@ 11,460 SAY oBrw:oSeek PROMPT oBrw:cSeek SIZE 200,12 PIXEL BORDER;
OF oWChild COLOR CLR_BLACK,CLR_YELLOW PICTURE '@!'
oWChild:oClient := oBrw
ACTIVATE WINDOW oWChild MAXIMIZED ;
ON INIT oBrw:SetFocus();
VALID( oBarMain:Enable(),oRsClien:Close(),oRsClien := "Nothing",.t. )
SysRefresh()
RELEASE FONT oFontCli
return( nil )
No obstante probaré como me indica y le diré si funciona o no.