estou em fase de migração do clipper 5.3 para Harbour MiniGUI Extended Edition 2.0.7 - 2012.02.14
estou enviando alguns arquivos printscreeen do cadastro de clientes, nesta tela tenho funcionando os botoes F5 Filtro, F6 Layout, F7 Ordem, F8 Excel e F10 Propiedades ( esta ultima eu mudo o tamanho das celulas, coloco cor, acrescento uma celula, oculto e outras opçoes que tenho), estando em uma celula qualquer e der um duplo click no mouse ira marcar a linha e se estiver marcada ira desmarcar (aqui tenho problema)
os arquivos que estou passando sao:
BROWSE COM TODOS OS REGISTROS.BMP ( contem todos os registros (51356), nesta situação eu faço filtro, somo um coluna numerica e marco e desmarco um registro
BROWSE COM 20 REGISTROS.BMP ( a coluna que esta em azul é a coluna indexada, fiz uma pesquisa para achar todos os clientes começados po 1, resultou em 20 registros, ate aqui tambem esta normal )
BROWSE COM 3 REGISTROS.BMP ( fiz nova pesquisa agora com os clientes começados com 11, daqui pra frente vai bagunçar o TSBROWSE )
BROWSE COM 3 REGISTROS BAGUNÇADO.BMP ( estando o BROWSE com os 3 registro, se eu der um click semples ou um click duplo para marcar o registro vai bagunçar o TSBROWSE conforme o arquivos anexo, isso desde que nao preencha todos as linhas visiveis na tela, no caso sao visiveis 14 linhas, fiz um teste fazendo aparecer 14 clientes em tela e tudo normal, fui entao deletando registro a registro via DBUCDX e refazendo os indices e quando ficou com 7 registros começou a bagunçar, voltei um registro ficando 8 ai voltou ao normal )
abaixo estou passando parte do fonte que monto o TSBROWSE e a function que faço a pesquisa, se nao me enganho isso acontecia em clipper tambem mas acho que era com o debedit quando vc rolava a seta para baixo ou para cima duplicava a linha, mas no caso aqui é um pouco diferente
montando o TSBROWSE
*-------------------------------------------------------------------------------------------------------------------
STATIC FUNCTION TBROWSESGC020101()
LOCAL CABECALHO020101 := ''
LOCAL X := 0
LOCAL W := 0
LOCAL NOMEORDEM020101 := ''
LOCAL NUM := 0
LOCAL NUMCOR := 0
IF _ISCONTROLDEFINED("BROW020101","SGC020101FORM")
RELEASE CONTROL BROW020101 OF SGC020101FORM
ENDIF
CABECALHO020101 := ''
f := Len( SGC020101FIELDS )
FOR x := 1 TO f STEP 1
CABECALHO020101 := CABECALHO020101 + "{|| PROPRIEDADE020101( " + ALLTRIM( STR( X ) ) +" ) }"
IF X < F
CABECALHO020101 := CABECALHO020101 + " , "
ENDIF
NEXT
SET( _SET_DELETED, .T. ) // EXIBE NO BRAOWSE OS REGISTROS DELETADOS .T. = NAO .F. = EXIBE
DEFINE TBROWSE BROW020101 AT 100,005 OF SGC020101FORM ALIAS 'CLIENTES' WIDTH LARGURA020101 - 15 ;
HEIGHT ALTURA020101 - 160 FONT "Arial" SIZE 10 CELL ;
ON CHANGE QTDE_REGISTRO_BROW( 'SGC020101FORM', 'TOTREG' ) ON HEADCLICK { &CABECALHO020101. }
f := Len( SGC020101FIELDS )
IF ALLTRIM( SGC020101NOME_NOVO_LAYOUT ) == 'Layout natural (Ctrl+F6)' .AND. lAdmin
SET( _SET_DELETED, .F. )
ENDIF
FOR W := 1 TO f STEP 1
IF ALLTRIM(SGC020101NOME_NOVO_LAYOUT) == 'Layout natural (Ctrl+F6)'
ADD COLUMN TO BROW020101 HEADER SGC020101TITULO[W] SIZE SGC020101TAMANHO[W] FOOTER "" ;
3DLOOK TRUE DATA FieldWBlock( SGC020101FIELDS[W],Select( "CLIENTES" ) );
ALIGN DT_LEFT , nMakeLong( DT_CENTER, 3 )
ELSE
IF SGC020101TABELA[W] == 'Calculada'
NUM := W
bMacro:=&( "{ || IIF( " + SGC020101FIELDS[NUM]+ "," +SGC020101CONDY[NUM]+ "," +SGC020101CONDZ[NUM]+")}" )
ADD COLUMN TO BROW020101 HEADER SGC020101TITULO[W] SIZE SGC020101TAMANHO[W] FOOTER "" ;
PICTURE SGC020101PICTURE[W] 3DLOOK TRUE;
DATA bMacro ;
ALIGN IIF(SGC020101TIPO[W] == "C",DT_LEFT , IIF( SGC020101TIPO[W] == "N", DT_RIGHT , DT_CENTER ) ) , ;
nMakeLong( DT_CENTER, 3 )
ELSE
ADD COLUMN TO BROW020101 HEADER SGC020101TITULO[W] SIZE SGC020101TAMANHO[W] FOOTER "" ;
PICTURE IIF( SGC020101TIPO[W] == "N", SGC020101PICTURE[W], "@!" ) ;
DATA FieldWBlock( SGC020101FIELDS[W], Select( "CLIENTES" ) ) ;
ALIGN IIF( SGC020101TIPO[W] == "C", DT_LEFT , IIF( SGC020101TIPO[W] == "N", DT_RIGHT , DT_CENTER ) ) , ;
nMakeLong( DT_CENTER, 3 )
ENDIF
ENDIF
IF !EMPTY( SGC020101BLOCO[W] )
IF NUMCOR = 0
NUMCOR := W
ENDIF
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
VERCOR( SGC020101CONDD[NUMCOR] ) , VERCOR( SGC020101CONDE[NUMCOR] ) ) }, COR_AZULCLARO }, W )
BROW020101:Refresh()
ELSE
IF SGC020101COR[W] = 'COR_VERDE'
BROW020101:Setcolor( { 2 }, { COR_VERDE },W ) // COLOCA COR NO FUNDO DAS CELULAS (2)
ELSEIF SGC020101COR[W] = 'COR_AMARELA'
BROW020101:Setcolor( { 2 }, { COR_AMARELA },W ) // COLOCA COR NO FUNDO DAS CELULAS (2)
ELSEIF SGC020101COR[W] = 'COR_VERMELHA'
BROW020101:Setcolor( { 2 }, { COR_VERMELHA },W ) // COLOCA COR NO FUNDO DAS CELULAS (2)
ELSE
BROW020101:Setcolor( { 2 }, { COR_BRANCA },W ) // COLOCA COR NO FUNDO DAS CELULAS (2)
ENDIF
ENDIF
NEXT W
BROW020101:Setcolor( { 4 }, { COR_CINZA } ) // COLOCA COR NOS NOMES DAS COLUNAS (4)
BROW020101:nHeightCell = 25 // altura de celula do browse
BROW020101:nHeightHead = 30 // altura do texto das colunas
*aqui é onde dou um click duplo para marcar e desmarcar o registro
BROW020101:SetSelectMode( .T., { | BROW020101, nI, lSel | ;
IF( lSel,AADD( SGC020101LINHA_MARCADAS,LTRIM( STR( nI ) ) ),;
ASIZE( SGC020101LINHA_MARCADAS, LEN( SGC020101LINHA_MARCADAS ) - 1 ) ) ,;
IF( lSel,MARCA_DESMARCA_COLUNA( SGC020101LINHA_MARCADAS,'+' ),;
MARCA_DESMARCA_COLUNA( SGC020101LINHA_MARCADAS,'-' ) ) },;
SGC020101ABMP[ 2 ], 1, DT_LEFT )
FOR X = 1 TO LEN( SGC020101NOME_ORDEM )
IF SUBSTR(SGC020101NOME_ORDEM,X,1) == '+'
EXIT
ENDIF
NOMEORDEM020101 += SUBSTR(SGC020101NOME_ORDEM,X,1)
NEXT
FOR X = 1 TO LEN( SGC020101TAMANHO )
IF ALLTRIM( NOMEORDEM020101 ) = ALLTRIM( SGC020101FIELDS[X] )
BROW020101:HiliteCell(X) //POSICIONA O CURSOR NA COLUNA X
BROW020101:SetColor( { 2,4,14 }, { { COR_AZULCLARO, COR_AZULCLARO }, { COR_AZULCLARO, COR_AZULCLARO }, { COR_AZULCLARO, COR_AZULCLARO } } ,X ) // PINTA O TEXTO E A COLUNA X QUE INDICA UMA ORDEM DE INDICES
SGC020101COLUNA_PINTADA := X
SetProperty ( "SGC020101FORM", 'PESQUISA', 'CAPTION' , SGC020101FIELDS[X] + '.:' )
ENDIF
NEXT
BROW020101:lNoResetPos := .F. // this is very important when working with the same database
END TBROWSE
SETFOCUS TXTPESQUISA020101 OF SGC020101FORM
RETURN
*------------------------------------------------------------------------------------------------------------------
PROCEDURE MARCA_DESMARCA_COLUNA( LINHA_MARCADAS,SOMA_SUBTRAI )
LOCAL SVREC020101 := RecNo()
IF LEN( LINHA_MARCADAS ) > 0
IF Alias() == "CONTAS"
CONTAS->( DBSEEK( LINHA_MARCADAS[ LEN( LINHA_MARCADAS ) ] ) )
IF SOMA_SUBTRAI = "+"
n += ( CONTAS->VALDUP + CONTAS->ACRESCIMO + CONTAS->JUROS - CONTAS->DESCONTO )
ELSE
n -= ( CONTAS->VALDUP + CONTAS->ACRESCIMO + CONTAS->JUROS - CONTAS->DESCONTO )
ENDIF
SetProperty( "Form_0","StatusBar","ITEM",1, "Mensagem: Total das contas selecionadas ( " +;
STRZERO( LEN( LINHA_MARCADAS ),4 ) + " ) = " + Transform( n, "@E 9,999,999.99" ) )
ELSE
SetProperty( "Form_0","StatusBar","ITEM",1, "Mensagem: Qtde Marcada = "+STRZERO( LEN( LINHA_MARCADAS ),4 ) )
ENDIF
ELSE
SetProperty( "Form_0","StatusBar","ITEM",1, "Mensagem: " )
ENDIF
( Alias() )->( DBGoTo( SVREC020101 ) )
RETURN
function para pesquisa no campo indexado
*-------------------------------------------------------------------------------------------------------------------
STATIC FUNCTION PESQUISA020101( PESQUISA_FILTRO, CFILTRO, CTEXTO, RADIOEOU, RADIOACAO )
LOCAL S,C,I,Q, pesq, OFILTRO, cKey1
LOCAL EOU := IIF( RADIOEOU = 1,' .AND. ',' .OR. ')
LOCAL CAMPOS_TIPO := CLIENTES->( FieldType( FieldPos( SGC020101FIELDS[BROW020101:ncell] ) ) )
DBSELECTAREA("CLIENTES")
CLIENTES->( DBSetOrder( SGC020101NUMORDEM ) )
cKey1 := ALLTRIM( UPPER( GetProperty( 'SGC020101FORM' , 'TXTPESQUISA020101' , 'VALUE') ) )
CLIENTES->( OrdScope( TOPSCOPE, cKey1 ) )
CLIENTES->( OrdScope( BOTTOMSCOPE, cKey1 ) )
IF PESQUISA_FILTRO $ 'A_F'
IF ALLTRIM( UPPER( ALIAS() ) ) <> ALLTRIM( UPPER ( SGC020101TABELA[ BROW020101:ncell ] ) )
MSGINFO(PADC('A T E N Ç Ã O',50)+QUEBRA+;
PADC("",50)+QUEBRA+;
PADC("A coluna " + SGC020101TITULO[BROW020101:ncell ] + " selecionada, não pertence",50)+QUEBRA+;
PADC("a tabela de CLIENTES e sim da tabela " + ALLTRIM( UPPER ( SGC020101TABELA[ BROW020101:ncell ] ) ) ,50)+QUEBRA+;
PADC("relacionada nesta ficha.",50) +QUEBRA+;
PADC("Impossivél filtrar esta coluna. ",50),MSIST)
RETURN
ENDIF
IF IsWIndowDefined(CRIA_FILTRO)
RELEASE WINDOW CRIA_FILTRO
ENDIF
IF CAMPOS_TIPO = 'N' .AND. PESQUISA_FILTRO = 'A'
CTEXTO := ALLTRIM( STR( CTEXTO,10,2 ) )
ENDIF
IF CFILTRO = 1
IF CAMPOS_TIPO = 'N'
OFILTRO := 'CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' = ' + CTEXTO
ELSE
IF PESQUISA_FILTRO = 'A'
IF EMPTY(CTEXTO)
OFILTRO := 'EMPTY( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ')'
ELSE
OFILTRO := 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ')) == "' + ALLTRIM( UPPER( CTEXTO ) ) + '"'
ENDIF
ELSE
OFILTRO := 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ')) = "' + ALLTRIM( UPPER( CTEXTO ) ) + '"'
ENDIF
ENDIF
ELSEIF CFILTRO = 2
IF CAMPOS_TIPO = 'N'
OFILTRO := 'CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' == ' + CTEXTO
ELSE
OFILTRO := 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' ) ) == "' + ALLTRIM( UPPER( CTEXTO ) ) +'"'
ENDIF
ELSEIF CFILTRO = 3
IF CAMPOS_TIPO = 'N'
OFILTRO := 'CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' <> ' + CTEXTO
ELSE
OFILTRO := 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' ) ) <> "' + ALLTRIM( UPPER( CTEXTO ) ) +'"'
ENDIF
ELSEIF CFILTRO = 4
IF CAMPOS_TIPO = 'N'
OFILTRO := 'CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' > ' + CTEXTO
ELSE
OFILTRO := 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' ) ) > "' + ALLTRIM( UPPER( CTEXTO ) ) +'"'
ENDIF
ELSEIF CFILTRO = 5
IF CAMPOS_TIPO = 'N'
OFILTRO := 'CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' >= ' + CTEXTO
ELSE
OFILTRO := 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' ) ) >= "' + ALLTRIM( UPPER( CTEXTO ) ) +'"'
ENDIF
ELSEIF CFILTRO = 6
IF CAMPOS_TIPO = 'N'
OFILTRO := 'CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' < ' + CTEXTO
ELSE
OFILTRO := 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' ) ) < "' + ALLTRIM( UPPER( CTEXTO ) ) +'"'
ENDIF
ELSEIF CFILTRO = 7
IF CAMPOS_TIPO = 'N'
OFILTRO := 'CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' <= ' + CTEXTO
ELSE
OFILTRO := 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' ) ) <= "' + ALLTRIM( UPPER( CTEXTO ) ) +'"'
ENDIF
ELSEIF CFILTRO = 8
IF CAMPOS_TIPO = 'N'
OFILTRO := 'CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] + ' = 0'
ELSE
OFILTRO := "EMPTY( CLIENTES->" + SGC020101FIELDS[BROW020101:ncell] + ")"
ENDIF
ELSEIF CFILTRO = 9
IF CAMPOS_TIPO = 'N'
OFILTRO := 'FORNECS->' + SGC020101FIELDS[BROW020101:ncell] + ' > 0'
ELSE
OFILTRO := "!EMPTY( CLIENTES->" + SGC020101FIELDS[BROW020101:ncell] + ")"
ENDIF
ELSEIF CFILTRO = 10
IF CAMPOS_TIPO = 'N'
OFILTRO := ''
ELSE
OFILTRO := '"' + ALLTRIM( UPPER( CTEXTO ) ) + '" $ ' + 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] +' ) )'
ENDIF
ELSE
IF CAMPOS_TIPO = 'N'
OFILTRO := ''
ELSE
OFILTRO := '!"' + ALLTRIM( UPPER( CTEXTO ) ) + '" $ ' + 'ALLTRIM( UPPER( CLIENTES->' + SGC020101FIELDS[BROW020101:ncell] +' ) )'
ENDIF
ENDIF
IF EMPTY(SGC020101FILTRAR) .OR. RADIOACAO = 2
SGC020101FILTRAR := OFILTRO
ELSE
IF RADIOACAO = 2
SGC020101FILTRAR := OFILTRO
ELSE
SET FILTER TO
SGC020101FILTRAR += EOU + OFILTRO
ENDIF
ENDIF
IF PESQUISA_FILTRO = 'F'
SGC020101FORM.FRFILTRA.VISIBLE := .T.
SGC020101FORM.LBFILTRO.VISIBLE := .T.
SGC020101FORM.LBFILTRO.VALUE := 'Aguarde...'
ENDIF
DO EVENTS
SET FILTER TO &SGC020101FILTRAR.
IF PESQUISA_FILTRO $ 'F'
SGC020101FORM.LBFILTRO.VISIBLE := .F.
ENDIF
ENDIF
BROW020101:GODOWN()
BROW020101:GOUP()
BROW020101:REFRESH(.T.)
BROW020101:UPSTABLE( )
BROW020101:lNoResetPos := .t.
BROW020101:SETFOCUS( .T.)
BROW020101:DRAWSELECT( )
BROW020101:lHasChanged := .T.
SetProperty ( 'SGC020101FORM', 'BROW020101', 'VALUE' , CLIENTES->(RECNO()) ) && dispensável
QTDE_REGISTRO_BROW( 'SGC020101FORM', 'TOTREG' )
s := ALLTRIM( GetProperty( 'SGC020101FORM' , 'TXTPESQUISA020101' , 'VALUE') )
c := GetProperty( 'SGC020101FORM' , 'TXTPESQUISA020101' , 'CARETPOS')
q := 0
FOR I := 1 TO C
IF SUBSTR( S , I , 1 ) == CHR(13)
SETFOCUS BROW020101 OF SGC020101FORM
E++
Q := 0
ELSE
Q++
ENDIF
NEXT I
IF SGC020101TOTAL[BROW020101:ncell]
SGC020101TOTAL[BROW020101:ncell] := .F.
PROPACAO020101(SGC020101COLUNA_TOTAL,5)
ENDIF
BROW020101: GOTOP()
IF PESQUISA_FILTRO $ 'A_F'
IF _ISCONTROLDEFINED("BROW020101","SGC020101FORM")
SHOW CONTROL BROW020101 OF SGC020101FORM
SETFOCUS BROW020101 OF SGC020101FORM
ENDIF
ELSE
SETFOCUS TXTPESQUISA020101 OF SGC020101FORM
ENDIF
SetProperty ( 'SGC020101FORM', 'TXTPESQUISA020101', 'CARETPOS' , Q )
IF PESQUISA_FILTRO $ 'A_F'
SGC020101FORM.FRFILTRA.VISIBLE := .T.
SGC020101FORM.LBFILTRA.VISIBLE := .T.
SGC020101JAFILTRADO := 'S'
SGC020101FORM.LBFILTRA.VALUE := SGC020101FORM.LBFILTRA.VALUE + " / " + SGC020101TITULO[BROW020101:ncell ]
ENDIF
RETURN
bem é isso ai pessoal, fico grato se alguem puder ajudar
abraço a todos