usar vetor no tsbrowse
Moderador: Moderadores
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
usar vetor no tsbrowse
ola amigos
filiz ano novo a todos
tenho tsbrowse com 9 colunas, em um arquivo dbf guardo as informacoes destas colunas
como por exemplo CAMPO, TAMANHO, SE É NUMERICO OU CARCTER e um campo de CONDIÇAO, ou seja +- assim
IIF( CLIENTES->CONCEITO = "RETIDO", COR_VERMELHA, COR_BRANCA)
esta situaçao é para pintar o fundo da coluna no TSBROWSE cujo conceito = retido
tenho um vetor que grava estas informações
na unha se eu digitar a linha abaixo funciona normalmente:
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( CLIENTES->CONCEITO='Retido', ;
COR_VERMELHA, COR_BRANCA ) }, COR_AZULCLARO }, X )
agora, como eu faço para colocar o vetor nesta linha, se eu colocar assim da erro
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || coltsbrow[8] }, COR_AZULCLARO }, X )
o vetor coltsbrow contem:
coltsbrow[1] = NOME CAMPO FANTASIA
coltsbrow[2] = NOME CAMPO RAZ_SOCIAL
...
coltsbrow[8]= IIF( CLIENTES->CONCEITO = "RETIDO", COR_VERMELHA, COR_BRANCA) ( CAMPO CONDIÇÃO )
uso Harbour MiniGUI Extended Edition 2.0.5 - 2011.12.14
filiz ano novo a todos
tenho tsbrowse com 9 colunas, em um arquivo dbf guardo as informacoes destas colunas
como por exemplo CAMPO, TAMANHO, SE É NUMERICO OU CARCTER e um campo de CONDIÇAO, ou seja +- assim
IIF( CLIENTES->CONCEITO = "RETIDO", COR_VERMELHA, COR_BRANCA)
esta situaçao é para pintar o fundo da coluna no TSBROWSE cujo conceito = retido
tenho um vetor que grava estas informações
na unha se eu digitar a linha abaixo funciona normalmente:
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( CLIENTES->CONCEITO='Retido', ;
COR_VERMELHA, COR_BRANCA ) }, COR_AZULCLARO }, X )
agora, como eu faço para colocar o vetor nesta linha, se eu colocar assim da erro
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || coltsbrow[8] }, COR_AZULCLARO }, X )
o vetor coltsbrow contem:
coltsbrow[1] = NOME CAMPO FANTASIA
coltsbrow[2] = NOME CAMPO RAZ_SOCIAL
...
coltsbrow[8]= IIF( CLIENTES->CONCEITO = "RETIDO", COR_VERMELHA, COR_BRANCA) ( CAMPO CONDIÇÃO )
uso Harbour MiniGUI Extended Edition 2.0.5 - 2011.12.14
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
usar vetor no tsbrowse
Para quem não viu o código completo, fica mais difícil de entender, mas eu posso te dizer que no coltsbrow[8] eu colocaria uma função que retorne a posição do vetor de cores, então ficaria mais limpo e seguro do que guardar os valores na elemento. Seguro digo, porque numa rede pode vir a mudar o conteúdo dos registros e portanto a sua condição.
Outra coisa que chamou a minha atenção que você está utilizando o SetColor() na definição do objeto cor:
BROW020101:SetColor(
E quando você designa a cor nesta sua sequência, você não define a cor para o segundo sentença para verificação (ver em cor vermelha) que deveria ser em cor. Mas se você adicionar a função, talvez ajude a clarear mais.
coltsbrow[8]= IIF( CLIENTES->CONCEITO = "RETIDO", COR_VERMELHA, COR_BRANCA) ( CAMPO CONDIÇÃO )
Eu faria assim:
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || VQCOR( CLIENTES->CONCEITO ) }, COR_AZULCLARO }, X )
Outra coisa que chamou a minha atenção que você está utilizando o SetColor() na definição do objeto cor:
BROW020101:SetColor(
E quando você designa a cor nesta sua sequência, você não define a cor para o segundo sentença para verificação (ver em cor vermelha) que deveria ser em cor. Mas se você adicionar a função, talvez ajude a clarear mais.
coltsbrow[8]= IIF( CLIENTES->CONCEITO = "RETIDO", COR_VERMELHA, COR_BRANCA) ( CAMPO CONDIÇÃO )
Eu faria assim:
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || VQCOR( CLIENTES->CONCEITO ) }, COR_AZULCLARO }, X )
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
usar vetor no tsbrowse
ola amigos,
Pablo, mais uma vez obrigado pela sua ajuda.
eu pensei em fazer desta forma, colocar uma funcao onde retorne e cor, achei que tivesse uma forma mais direta.
bem meu sistema é um pouco complicado mesmo, acontece que o usuario pode criar a tela de cliente como ele bem entender ou melhor dizendo com os campos que ele mais utiliza, entao um usuario tem um browse com as seguintes colunas:
CODIGO NOME LIMITE CREDITO ULTIMA COMPRA
outro usuario ja tem um BROWSE desta forma
CODIGO NOME ENDERECO BAIRRO CIDADE CEP VENDEDOR ULTIMA COMPRA LIMITE CREDITO
o primeiro usuario coloca a seguinte condicao IIF( clientes->lim_credit > 1500.00, cor_verde,cor_vermelha)
o segundo usuario coloca a seguinte condicao IIF( clientes->conceito="RETIDO",cor_vermelha,cor_branca)
em um dbf guardo todos o browse de cada usuario ( eles mesmo colocam um nome para depois executa lo) os campos que ele selecionou mais o campo de condicao este campo de condicao fica gravado no arquivo iguazinho como esta escrito com IF ( " , ) o que eu nao estou coseguindo fazer e passar este valor para a execucao ou seja, se eu fizer desta forma
digamos que eu carregeui no vetor coltsbrow[8]= t_ables->condicao que nada mais é o IIF(... que o usuario digitou
na linha:
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || VQCOR( coltsbrow[8] ) }, COR_AZULCLARO }, X )
abaixo na funcao VQCOR como interpretar este valor
function VQCOR( condicao )
eu nao posso colocar assim que vai gerar erro porque condicao nao é uma variavel logica
if condicao
se eu colocar if (CONDICAO) tambem da erro, nao testei mas na logica ficaria
if IIF(...
aqui é que eu estou perdido? nao sei se me entendeu.
abraços
Pablo, mais uma vez obrigado pela sua ajuda.
eu pensei em fazer desta forma, colocar uma funcao onde retorne e cor, achei que tivesse uma forma mais direta.
bem meu sistema é um pouco complicado mesmo, acontece que o usuario pode criar a tela de cliente como ele bem entender ou melhor dizendo com os campos que ele mais utiliza, entao um usuario tem um browse com as seguintes colunas:
CODIGO NOME LIMITE CREDITO ULTIMA COMPRA
outro usuario ja tem um BROWSE desta forma
CODIGO NOME ENDERECO BAIRRO CIDADE CEP VENDEDOR ULTIMA COMPRA LIMITE CREDITO
o primeiro usuario coloca a seguinte condicao IIF( clientes->lim_credit > 1500.00, cor_verde,cor_vermelha)
o segundo usuario coloca a seguinte condicao IIF( clientes->conceito="RETIDO",cor_vermelha,cor_branca)
em um dbf guardo todos o browse de cada usuario ( eles mesmo colocam um nome para depois executa lo) os campos que ele selecionou mais o campo de condicao este campo de condicao fica gravado no arquivo iguazinho como esta escrito com IF ( " , ) o que eu nao estou coseguindo fazer e passar este valor para a execucao ou seja, se eu fizer desta forma
digamos que eu carregeui no vetor coltsbrow[8]= t_ables->condicao que nada mais é o IIF(... que o usuario digitou
na linha:
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || VQCOR( coltsbrow[8] ) }, COR_AZULCLARO }, X )
abaixo na funcao VQCOR como interpretar este valor
function VQCOR( condicao )
eu nao posso colocar assim que vai gerar erro porque condicao nao é uma variavel logica
if condicao
se eu colocar if (CONDICAO) tambem da erro, nao testei mas na logica ficaria
if IIF(...
aqui é que eu estou perdido? nao sei se me entendeu.
abraços
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
usar vetor no tsbrowse
ola amigos
ha, esqueci de informar que o usuario tambem pode montar uma condição desta forma:
IIF( CLIENTES->CONCEITO="RETIDO" .AND. CLIENTES->LIM_CREDIT>2000.00, COR_AMARELA,COR_BRANCA)
enfim na condicao o usuario podera usar varias instruções.
abraços
ha, esqueci de informar que o usuario tambem pode montar uma condição desta forma:
IIF( CLIENTES->CONCEITO="RETIDO" .AND. CLIENTES->LIM_CREDIT>2000.00, COR_AMARELA,COR_BRANCA)
enfim na condicao o usuario podera usar varias instruções.
abraços
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
usar vetor no tsbrowse
Entendí +/- é que sem o código todo, não dá pra ter uma visão global. Mas entendí que no coltsbrow[8] você guardaria a condição e que o programa não está sabendo interpretar. Não seria uma questão de você guardar no coltsbrow[8] a senteça em modo caracter (entre aspas) e depois executá-la com & (macro) ?
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
usar vetor no tsbrowse
ola amigos
tenho um arquivo chamado f_sistema.ch neste arquivo contem os seguintes dados
muito bem, usei a seguinte linha de comando e funciona normal usei a MACRO como o amigo Pablo sugeriu.
na linha acima o vetor nada mais é que CLIENTES->CONCEITO="RETIDO" a variavel COR_VERMELHA e COR_BRANCA esta declarada no arquivo F_SISTEMA.CH
ate aqui funciona legal, mais eu defini no PRG as cores que devem pegar, e eu preciso pegar a cor que esta em outro vetor ou seja SGC020101AFUNC[14,NUMCOR,13] este vetor pode ser carregado com a variavel COR_VERDE, COR_VERMELHA, COR_AMARELA ou qualquer outra cor carregada no F_SISTENA.CH
fiz um teste com o comando abaixo, onde o vetor SGC020101AFUNC[14,NUMCOR,13] recebe a variavel COR_VERMELHA neste caso pinta todos os clientes RETIDOS de PRETO (ERRADO deveria pintar de vermelho) e os outros de BRANCO (CERTO) coloquei o vetor tambem em MACRO e teve o mesmo efeito.
ja tentei mudar o vetor para receber apenas os numeros da cor exemplo 255,000,000 montei o codigo desta forma, so que da ERRO DE SINTAXE: & (macro)
tentei tambem passar para o vetor desta forma RGB(255,000,000) e montei o codigo assim, mais da erro BASE/1001 FUNÇÂO INDEFINIDA RGB
to quebrando a cabeça, se achar a solução pastarei aqui
tenho um arquivo chamado f_sistema.ch neste arquivo contem os seguintes dados
Código: Selecionar todos
#DEFINE SISTEMA " MICROAMP INFORMATICA V.01"
#DEFINE TRUE .T.
#DEFINE FALSE .F.
#DEFINE QUEBRA Chr(13)+Chr(10)
#DEFINE DRIVER "DBFCDX"
#DEFINE COR_BRANCA RGB( 255,255,255 )
#DEFINE COR_AMARELA RGB( 255,255,000 )
#DEFINE COR_AZUL RGB( 000,000,255 )
#DEFINE COR_AZULCLARO RGB( 121,188,255 )
#DEFINE COR_VERDE RGB( 000,255,000 )
#DEFINE COR_VERDEESCU RGB( 000,128,000 )
#DEFINE COR_VERMELHA RGB( 255,000,000 )
#DEFINE COR_ROSA RGB( 255,128,255 )
#DEFINE COR_LARANJA RGB( 255,128,000 )
#DEFINE COR_LILAS RGB( 128,000,128 )
#DEFINE COR_PRETA RGB( 000,000,000 )
#DEFINE COR_CINZA RGB( 128,128,128 )
#define NTrim( x ) LTrim( Str( x ) )
#define NTRIM( x ) LTrim( Str( x ) )
#define TOPSCOPE 0
#define BOTTOMSCOPE 1
Código: Selecionar todos
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
COR_VERMELHA , COR_BRANCA ) }, COR_AZULCLARO }, W )ate aqui funciona legal, mais eu defini no PRG as cores que devem pegar, e eu preciso pegar a cor que esta em outro vetor ou seja SGC020101AFUNC[14,NUMCOR,13] este vetor pode ser carregado com a variavel COR_VERDE, COR_VERMELHA, COR_AMARELA ou qualquer outra cor carregada no F_SISTENA.CH
fiz um teste com o comando abaixo, onde o vetor SGC020101AFUNC[14,NUMCOR,13] recebe a variavel COR_VERMELHA neste caso pinta todos os clientes RETIDOS de PRETO (ERRADO deveria pintar de vermelho) e os outros de BRANCO (CERTO) coloquei o vetor tambem em MACRO e teve o mesmo efeito.
Código: Selecionar todos
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
SGC020101AFUNC[14,NUMCOR,13] , COR_BRANCA ) }, COR_AZULCLARO }, W )
ou
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
&(SGC020101AFUNC[14,NUMCOR,13]) , COR_BRANCA ) }, COR_AZULCLARO }, W )
Código: Selecionar todos
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
"RGB("+&(SGC020101AFUNC[14,NUMCOR,13])+")" , COR_BRANCA ) }, COR_AZULCLARO }, W ) Código: Selecionar todos
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
'"'+&(SGC020101AFUNC[14,NUMCOR,13])+'"' , COR_VERDE ) }, COR_AZULCLARO }, W ) - Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
usar vetor no tsbrowse
Caracas... rapaz ! Esse seu código é de matar... Gostaria de ver um printscreen para ver tudo isso funcionando...
Eu também faço com que o usuário possa mudar as cores dos sistema e também faço através de APENAS um vetor. Claro que eu se fosse você, esse arquivo de configuração por usuário, manteria a mesma estrutura para todos e o que iria mudar apenas o conteúdo, isto é a cor que o usuário escolheu. Mas gravaria um arquivo de configuração para cada usuário ou até mesmo na pasta diferenciada como o Windows faz: C:\Documents and Settings\nome_do_usuário.
Fica dificil analisar sem o código completo, mas vou arriscar um chute: talvez o NUMCOR está sendo mudado em algum lugar, portanto ganhando um novo valor que não corresponde a um vetor de cores. Por isso a cor que recebe não é bem interpretado e fica em cor preta. Ou por acaso tem essa cor designada no vetor ?fiz um teste com o comando abaixo, onde o vetor SGC020101AFUNC[14,NUMCOR,13] recebe a variavel COR_VERMELHA neste caso pinta todos os clientes RETIDOS de PRETO (ERRADO deveria pintar de vermelho)
Eu também faço com que o usuário possa mudar as cores dos sistema e também faço através de APENAS um vetor. Claro que eu se fosse você, esse arquivo de configuração por usuário, manteria a mesma estrutura para todos e o que iria mudar apenas o conteúdo, isto é a cor que o usuário escolheu. Mas gravaria um arquivo de configuração para cada usuário ou até mesmo na pasta diferenciada como o Windows faz: C:\Documents and Settings\nome_do_usuário.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
usar vetor no tsbrowse
ola amigos,
Pablo aqui esta toda a funcao que cria o TSBROWSE
estou anexando dois arquivos um com o printscreen pintado de preto e o outro normal
Pablo aqui esta toda a funcao que cria o TSBROWSE
Código: Selecionar todos
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 NUMERO_RECNO020101() 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
IF EMPTY(SGC020101CONDY)
IF !EMPTY(SGC020101AFUNC[14,NUM,11])
SGC020101CONDY := SGC020101AFUNC[14,NUM,11]
ENDIF
ENDIF
IF EMPTY(SGC020101CONDZ)
IF !EMPTY(SGC020101AFUNC[14,NUM,12])
SGC020101CONDZ := SGC020101AFUNC[14,NUM,12]
ENDIF
ENDIF
*MSGINFO( SGC020101CONDY + " XXX "+ SGC020101CONDZ )
ADD COLUMN TO BROW020101 HEADER SGC020101TITULO[W] SIZE SGC020101TAMANHO[W] FOOTER "" ;
PICTURE SGC020101PICTURE[W] 3DLOOK TRUE;
DATA RESULTADO( SGC020101FIELDS[NUM], SGC020101CONDY, SGC020101CONDZ ) ;
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
*esta linha é a que pinta de preto mesmo usando o & MACRO
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
SGC020101AFUNC[14,NUMCOR,13] , COR_VERDE ) }, COR_AZULCLARO }, W )
*esta linha pinta de acordo com a condicao estabeleciada
*BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
*COR_VERMELHA, COR_BRANCA ) }, 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
BROW020101:SetSelectMode( .T., { | BROW020101, nI, lSel | IF( lSel,AADD(SGC020101LINHA_MARCADAS,LTRIM(STR(nI))),ADEL(SGC020101LINHA_MARCADAS,ASCAN(SGC020101LINHA_MARCADAS,LTRIM(STR(nI)))) ) , IF( lSel,ASOMA020101(SGC020101LINHA_MARCADAS,'+'),ASOMA020101(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
RETURN- Anexos
-
tsbrowse correto.rar- tela pintada de vermelha
- (92.08 KiB) Baixado 452 vezes
-
tsbrowse errado.rar- tela pintada de preto
- (87.75 KiB) Baixado 394 vezes
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
usar vetor no tsbrowse
Legal seu código e muito caprichado, parabéns !
Outra eu não entendí o por quê de:
Quer dizer que se não for zero fica com o valor antigo ?
Eu também não sei como é composto e qual é a dimensão da matriz SGC020101AFUNC[14,NUMCOR,13]. Se NUMCOR seria um ponteiro, por quê você não passa a utilizar SGC020101AFUNC[ 14, W , 13] ?
Qual é o valor de SGC020101AFUNC[14,NUMCOR,13] ? Se for 255,000,000 está errado. Deveria ser o mesmo valor retornado de RGB( 255,000,000 ) creio que deveria ser igual a #FF0000
Você tem certeza que está recebendo esse valor o SGC020101AFUNC[14,NUMCOR,13] ? Ja colocou no MsgInfo() por exemplo ou já utilizou o ALTD() ? Para analizar as variáveis ?fiz um teste com o comando abaixo, onde o vetor SGC020101AFUNC[14,NUMCOR,13] recebe a variavel COR_VERMELHA
Outra eu não entendí o por quê de:
Código: Selecionar todos
IF NUMCOR = 0
NUMCOR := W
ENDIFEu também não sei como é composto e qual é a dimensão da matriz SGC020101AFUNC[14,NUMCOR,13]. Se NUMCOR seria um ponteiro, por quê você não passa a utilizar SGC020101AFUNC[ 14, W , 13] ?
Qual é o valor de SGC020101AFUNC[14,NUMCOR,13] ? Se for 255,000,000 está errado. Deveria ser o mesmo valor retornado de RGB( 255,000,000 ) creio que deveria ser igual a #FF0000
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
usar vetor no tsbrowse
ola amigos
Pablo, repare que no printscreen que anexei tem uma coluna que a cor é sempre azul claro, toda coluna que esta com esta cor significa que o banco de dados esta indexado por esta coluna, tambem podera colocar cor em qualquer coluna, uma pode ser azul outra pode verde outra amarela e por ai vai, so que existe um campo chamado CONDICAO este campo por sua vez se tiver valor sera carregado no vetor SGC020101BLOCO[W] quer dizer que um bloco inteiro sofrera as masmas condicoes exeto a coluna de indice.
eu criei a variavel NUMCOR porque todas as colunas vao receber a mesma informação entao nao preciso mudar o vetor,
veja que eu verifico se existe informação no vetor de bolco SGC020101BLOCO[W] se existir ele pega o numero representado por W e vai pegar os dados do vetor SGC020101AFUNC[14,NUMCOR,13] e fazer isto para todas as colunas.
abaixo vou passar um pedaço do arquivo INI que guardo algumas informações onde carrego o vetor SGC020101AFUNC[14,NUMCOR,13]
A: é o arquivo DBF
F: é o campo do DBF
H: é a descricao que vai sair no TSBROWSE
L: é o tamanho da coluna
C: é a cor que o usuario quer para aquela coluna especifica
B: é o bloco de codigo ou seja a condicao
D: é a primeira condição a ser satisfeita
E: é a segunda condição a ser satisfeita
Y: é a primeira condição para uma coluna calculada ( em fase de implementação )
Z: é a segunda condicao para uma colna calculada ( em fase de implementação )
T: é o tipo de campo N=numerico C=caracter D=data
P: é a picture que vai aparecer
o vetor SGC020101AFUNC[14,NUMCOR,13] é guardado o valor de D: o vetor SGC020101AFUNC[14,NUMCOR,14] e guardado o valor de E: este vetor ainda nao estou usando por que o primeiro nao deu certo ate agora.
é isso ai.
Pablo, repare que no printscreen que anexei tem uma coluna que a cor é sempre azul claro, toda coluna que esta com esta cor significa que o banco de dados esta indexado por esta coluna, tambem podera colocar cor em qualquer coluna, uma pode ser azul outra pode verde outra amarela e por ai vai, so que existe um campo chamado CONDICAO este campo por sua vez se tiver valor sera carregado no vetor SGC020101BLOCO[W] quer dizer que um bloco inteiro sofrera as masmas condicoes exeto a coluna de indice.
colocando MSGINFO(SGC020101AFUNC[14,NUMCOR,13] ) resulta em tela COR_VERMELHA ou outra que o usuario definiu, este vetor eu utilizo para outras funçoes, ainda nao testei ALTD() porque o msginfo() sempre mostrou o que eu preciso.Você tem certeza que está recebendo esse valor o SGC020101AFUNC[14,NUMCOR,13] ? Ja colocou no MsgInfo() por exemplo ou já utilizou o ALTD() ? Para analizar as variáveis ?
eu criei a variavel NUMCOR porque todas as colunas vao receber a mesma informação entao nao preciso mudar o vetor,
veja que eu verifico se existe informação no vetor de bolco SGC020101BLOCO[W] se existir ele pega o numero representado por W e vai pegar os dados do vetor SGC020101AFUNC[14,NUMCOR,13] e fazer isto para todas as colunas.
eu estou dando preferencia para a variavel COR_VERMELHA COR_AMARELA e assim por diante, porque estas variaveis estão definidas no F_SISTEMA.CHQual é o valor de SGC020101AFUNC[14,NUMCOR,13] ? Se for 255,000,000 está errado. Deveria ser o mesmo valor retornado de RGB( 255,000,000 ) creio que deveria ser igual a #FF0000
abaixo vou passar um pedaço do arquivo INI que guardo algumas informações onde carrego o vetor SGC020101AFUNC[14,NUMCOR,13]
Código: Selecionar todos
A:CLIENTES;F:CODIGO; H:Codigo; L:15;C:;B:ALLTRIM(UPPER(CLIENTES->CONCEITO))="RETIDO";D:COR_VERMELHA;E:"COR_VERDE";Y:;Z:;T:C;P:;
A:CLIENTES;F:NOME; H:Nome; L:20;C:;B:ALLTRIM(UPPER(CLIENTES->CONCEITO))="RETIDO";D:COR_VERMELHA;E:"COR_VERDE";Y:;Z:;T:C;P:;
A:CLIENTES;F:CEP; H:Cep; L:9; C:;B:ALLTRIM(UPPER(CLIENTES->CONCEITO))="RETIDO";D:COR_VERMELHA;E:"COR_VERDE";Y:;Z:;T:C;P:;
A:CLIENTES;F:CONTATO; H:Contato; L:10;C:;B:ALLTRIM(UPPER(CLIENTES->CONCEITO))="RETIDO";D:COR_VERMELHA;E:"COR_VERDE";Y:;Z:;T:C;P:;
A:CLIENTES;F:TELEFONE_1;H:Fone 1; L:14;C:;B:ALLTRIM(UPPER(CLIENTES->CONCEITO))="RETIDO";D:COR_VERMELHA;E:"COR_VERDE";Y:;Z:;T:C;P:;
A:CLIENTES;F:TELEFONE_2;H:Fone 2; L:14;C:;B:ALLTRIM(UPPER(CLIENTES->CONCEITO))="RETIDO";D:COR_VERMELHA;E:"COR_VERDE";Y:;Z:;T:C;P:;
A:CLIENTES;F:FAX; H:Fax; L:15;C:;B:ALLTRIM(UPPER(CLIENTES->CONCEITO))="RETIDO";D:COR_VERMELHA;E:"COR_VERDE";Y:;Z:;T:C;P:;
A:CLIENTES;F:CONCEITO; H:Conceito; L:10;C:;B:ALLTRIM(UPPER(CLIENTES->CONCEITO))="RETIDO";D:COR_VERMELHA;E:"COR_VERDE";Y:;Z:;T:C;P:;
A:CLIENTES;F:LIM_CREDIT;H:Limite Credito;L:14;C:;B:ALLTRIM(UPPER(CLIENTES->CONCEITO))="RETIDO";D:COR_VERMELHA;E:"COR_VERDE";Y:;Z:;T:N;P:@E 999,999.99;
F: é o campo do DBF
H: é a descricao que vai sair no TSBROWSE
L: é o tamanho da coluna
C: é a cor que o usuario quer para aquela coluna especifica
B: é o bloco de codigo ou seja a condicao
D: é a primeira condição a ser satisfeita
E: é a segunda condição a ser satisfeita
Y: é a primeira condição para uma coluna calculada ( em fase de implementação )
Z: é a segunda condicao para uma colna calculada ( em fase de implementação )
T: é o tipo de campo N=numerico C=caracter D=data
P: é a picture que vai aparecer
o vetor SGC020101AFUNC[14,NUMCOR,13] é guardado o valor de D: o vetor SGC020101AFUNC[14,NUMCOR,14] e guardado o valor de E: este vetor ainda nao estou usando por que o primeiro nao deu certo ate agora.
é isso ai.
- Anexos
-
TSBROWSE VARIAS CORES.rar- (86.45 KiB) Baixado 239 vezes
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
usar vetor no tsbrowse
Estou entendendo, mas na hora de você ler o arquivo de configuração .INI, você como está assignando o valor de D: ? Como caracter ou como hexadecimal ? O Valor "#FF0000" não é igual a #FF0000. Desculpe, se eu estiver falando demais, talvez você ja tenha calculado isso. Mas estou achando que o problema é no conteúdo e não na lógica. Pois se na unha funciona porque não funcionaria com o conteúdo da matriz ? Por isso, eu gosto de utilizar o debugger. Veja também o tipo da variavel.o vetor SGC020101AFUNC[14,NUMCOR,13] é guardado o valor de D:
Se precisa converter esse valor do tipo string para hexa, acredito que terá que converter para de decimal para hexa. Aqui tem uma rotina no velho Oasis: http://www.the-oasis.net/files/general/baseco.zip
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
usar vetor no tsbrowse
ola amigos
Pablo, no meu arquivo INI ja coloquei o D: tipo assim
D:COR_VERMELHA
D:"COR_VERMELHA"
D:RGB( 255,000,000 )
D:"RGB( 255,000,000 )"
D: 255,000,000
D:"255,000,000"
e fiz algumas mudanças no prg, vou ver o arquivo que vc passou e fazer mais alguns testes.
ainda me sobraram alguns fions de cabelo (RSRSRS)
abraços
Pablo, no meu arquivo INI ja coloquei o D: tipo assim
D:COR_VERMELHA
D:"COR_VERMELHA"
D:RGB( 255,000,000 )
D:"RGB( 255,000,000 )"
D: 255,000,000
D:"255,000,000"
e fiz algumas mudanças no prg, vou ver o arquivo que vc passou e fazer mais alguns testes.
ainda me sobraram alguns fions de cabelo (RSRSRS)
abraços
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
usar vetor no tsbrowse
Imagino que você ja tentou tudo isso mesmo ! Mas você entendeu ? Na minha opinião você estaria apenas lendo o INI e atribuindo o valor da cor simplesmente como do tipo decimal, isto é, como texto. E essa variável tem que ser transformada em Hexadecimal para que o SetColor funcione. Entendeu ?no meu arquivo INI ja coloquei o D: tipo assim
D:COR_VERMELHA
D:"COR_VERMELHA"
D:RGB( 255,000,000 )
D:"RGB( 255,000,000 )"
D: 255,000,000
D:"255,000,000"
Não podemos confundir, CONSTANTE com string (conteúdo de um elemento) nem muito menos Hexadecimal como String.
kkkk não sei a tuaidade, você não colocou a data de nascimento no seu perfil, mas se contente se ainda tiver alguns... Eu também estou ficando com menos cabelos, mas é questão de idade... rsrsainda me sobraram alguns fions de cabelo (RSRSRS)
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
usar vetor no tsbrowse
Eu estava te postando as funções para converter de texto para hexadecimals e caiu a minha ficha...
Você não vai precisar converter o conteúdo do elemento e sim assigná-lo conforme a CONSTANTE declarada no CH.
No momento de ler o INI no mesmo ato que vai assignar o valor para SGC020101AFUNC[14,NUMCOR,13] por exemplo, ao invés de colocar o valor lido, você pode fazer assim:Acredito que tem outra forma, mas essa que fizemos dará o mesmo resultado. Talvez utilizando-se do & (macro): SGC020101AFUNC[14,NUMCOR,13]:=(&(SGC020101AFUNC[14,NUMCOR,13])) ?? Quer testar aí ?
Você não vai precisar converter o conteúdo do elemento e sim assigná-lo conforme a CONSTANTE declarada no CH.
No momento de ler o INI no mesmo ato que vai assignar o valor para SGC020101AFUNC[14,NUMCOR,13] por exemplo, ao invés de colocar o valor lido, você pode fazer assim:
Código: Selecionar todos
cCor:="COR_VERMELHA" // digamos que este seria o valor lido do arquivo INI
Do Case
Case cCor:="COR_VERMELHA"
cCor:=COR_VERMELHA
Case cCor:="COR_BRANCA"
cCor:=COR_BRANCA
Case cCor:="COR_AMARELA"
cCor:=COR_AMARELA
Case cCor:="COR_AZUL"
cCor:=COR_AZUL
Case cCor:="COR_AZULCLARO"
cCor:=COR_AZULCLARO
Case cCor:="COR_VERDE"
cCor:=COR_VERDE
Case cCor:="COR_VERDEESCU"
cCor:=COR_VERDEESCU
Case cCor:="COR_ROSA"
cCor:=COR_ROSA
Case cCor:="COR_LARANJA"
cCor:=COR_LARANJA
Case cCor:="COR_LILAS"
cCor:=COR_LILAS
Case cCor:="COR_PRETA"
cCor:=COR_PRETA
Case cCor:="COR_CINZA"
cCor:=COR_CINZA
Endcase
SGC020101AFUNC[14,NUMCOR,13]:=cCorUm clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
usar vetor no tsbrowse
ola amigos,
Pablo, nao sei mas, acho que é algum bug, veja voce, eu criei no inicio da function a variavel chamada:
coloquei a linha assim e deu certo
ai gravei no INI como C_VEMELHA no lugar de COR_VERMELHA, troquei a linha para esta e deu Error BASE/1003 Variavel não existe: C_VERMELHA
fiz outro teste, no arquivo INI gravei RGB( 255,000,000 )
na linha que defino a variavel NUMCOR defini a variavel SGC020101AFUNC[14,NUMCOR,13] assim
na linha onde aplico o setcolor fiz assim:
ai deu Error base/1001 Funcao indefinida RGB
troquei a linha por esta tirei a macro
e deu o mesmo erro que deu com a macro
se for realmente um bug somente nossos colegas idealizadores da minigui podera me ajudar. ai vai ficar bem mais dificil minha situação, primeiro pq nao tenho contato com eles e segundo meu ingles é fraco demais para me comunicar.
mas tudo bem como diz o amigo Rochinha... sou vazo ruim de quebrar...nao desisto nunca...
Pablo, nao sei mas, acho que é algum bug, veja voce, eu criei no inicio da function a variavel chamada:
Código: Selecionar todos
LOCAL C_VERMELHA := RGB( 255,000,000 )Código: Selecionar todos
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
C_VERMELHA, COR_BRANCA ) }, COR_AZULCLARO }, W )
Código: Selecionar todos
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
&(SGC020101AFUNC[14,NUMCOR,13]) , COR_BRANCA ) }, COR_AZULCLARO }, W )
na linha que defino a variavel NUMCOR defini a variavel SGC020101AFUNC[14,NUMCOR,13] assim
Código: Selecionar todos
IF NUMCOR = 0
NUMCOR := W
SGC020101AFUNC[14,NUMCOR,13] := &(SGC020101AFUNC[14,NUMCOR,13])
ENDIF
Código: Selecionar todos
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
&(SGC020101AFUNC[14,NUMCOR,13]) , (COR_BRANCA) ) }, COR_AZULCLARO }, W )troquei a linha por esta tirei a macro
Código: Selecionar todos
BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
SGC020101AFUNC[14,NUMCOR,13] , (COR_BRANCA) ) }, COR_AZULCLARO }, W )se for realmente um bug somente nossos colegas idealizadores da minigui podera me ajudar. ai vai ficar bem mais dificil minha situação, primeiro pq nao tenho contato com eles e segundo meu ingles é fraco demais para me comunicar.
mas tudo bem como diz o amigo Rochinha... sou vazo ruim de quebrar...nao desisto nunca...