usar vetor no tsbrowse

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

usar vetor no tsbrowse

Mensagem por Amparo »

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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

usar vetor no tsbrowse

Mensagem por Pablo César »

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 )
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.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

usar vetor no tsbrowse

Mensagem por Amparo »

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
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

usar vetor no tsbrowse

Mensagem por Amparo »

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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

usar vetor no tsbrowse

Mensagem por Pablo César »

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.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

usar vetor no tsbrowse

Mensagem por Amparo »

ola amigos

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
muito bem, usei a seguinte linha de comando e funciona normal usei a MACRO como o amigo Pablo sugeriu.

Código: Selecionar todos

      BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
      COR_VERMELHA , COR_BRANCA ) }, COR_AZULCLARO }, W )
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.

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 )   
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)

Código: Selecionar todos

      BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
      "RGB("+&(SGC020101AFUNC[14,NUMCOR,13])+")" , COR_BRANCA ) }, COR_AZULCLARO }, W )   
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

Código: Selecionar todos

      BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
      '"'+&(SGC020101AFUNC[14,NUMCOR,13])+'"' , COR_VERDE ) }, COR_AZULCLARO }, W )   
to quebrando a cabeça, se achar a solução pastarei aqui
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

usar vetor no tsbrowse

Mensagem por Pablo César »

Caracas... rapaz ! Esse seu código é de matar... Gostaria de ver um printscreen para ver tudo isso funcionando...
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)
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 ?

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.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

usar vetor no tsbrowse

Mensagem por Amparo »

ola amigos,

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
estou anexando dois arquivos um com o printscreen pintado de preto e o outro normal
Anexos
tsbrowse correto.rar
tela pintada de vermelha
(92.08 KiB) Baixado 451 vezes
tsbrowse errado.rar
tela pintada de preto
(87.75 KiB) Baixado 393 vezes
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

usar vetor no tsbrowse

Mensagem por Pablo César »

Legal seu código e muito caprichado, parabéns !
fiz um teste com o comando abaixo, onde o vetor SGC020101AFUNC[14,NUMCOR,13] recebe a variavel COR_VERMELHA
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 ?

Outra eu não entendí o por quê de:

Código: Selecionar todos

IF NUMCOR = 0
   NUMCOR := W
ENDIF
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
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.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

usar vetor no tsbrowse

Mensagem por Amparo »

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

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.
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
eu estou dando preferencia para a variavel COR_VERMELHA COR_AMARELA e assim por diante, porque estas variaveis estão definidas no F_SISTEMA.CH

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;
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.
Anexos
TSBROWSE VARIAS CORES.rar
(86.45 KiB) Baixado 239 vezes
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

usar vetor no tsbrowse

Mensagem por Pablo César »

o vetor SGC020101AFUNC[14,NUMCOR,13] é guardado o valor de D:
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.

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.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

usar vetor no tsbrowse

Mensagem por Amparo »

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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

usar vetor no tsbrowse

Mensagem por Pablo César »

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"
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 ?

Não podemos confundir, CONSTANTE com string (conteúdo de um elemento) nem muito menos Hexadecimal como String.
ainda me sobraram alguns fions de cabelo (RSRSRS)
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... rsrs
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.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

usar vetor no tsbrowse

Mensagem por Pablo César »

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:

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]:=cCor
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í ?
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.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

usar vetor no tsbrowse

Mensagem por Amparo »

ola amigos,

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 )
coloquei a linha assim e deu certo

Código: Selecionar todos

BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
      C_VERMELHA, COR_BRANCA ) }, COR_AZULCLARO }, W )   
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

Código: Selecionar todos

BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
      &(SGC020101AFUNC[14,NUMCOR,13]) , COR_BRANCA ) }, COR_AZULCLARO }, W )
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

Código: Selecionar todos

      IF NUMCOR = 0
         NUMCOR := W
         SGC020101AFUNC[14,NUMCOR,13] := &(SGC020101AFUNC[14,NUMCOR,13])
      ENDIF
na linha onde aplico o setcolor fiz assim:

Código: Selecionar todos

BROW020101:SetColor( { 1, 2, 5 }, { COR_PRETA, { || IF( &(SGC020101BLOCO[NUMCOR]), ;
      &(SGC020101AFUNC[14,NUMCOR,13]) , (COR_BRANCA) ) }, COR_AZULCLARO }, W )
ai deu Error base/1001 Funcao indefinida RGB

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 )
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...
Responder