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
#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
#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.