Clipper On Line • Ver Tópico - usar vetor no tsbrowse

usar vetor no tsbrowse

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

usar vetor no tsbrowse

Mensagempor Amparo » 02 Jan 2012 07:49

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 de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

usar vetor no tsbrowse

Mensagempor Pablo César » 02 Jan 2012 08:19

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

usar vetor no tsbrowse

Mensagempor Amparo » 02 Jan 2012 12:45

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 de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

usar vetor no tsbrowse

Mensagempor Amparo » 02 Jan 2012 13:02

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 de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

usar vetor no tsbrowse

Mensagempor Pablo César » 02 Jan 2012 13:07

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

usar vetor no tsbrowse

Mensagempor Amparo » 03 Jan 2012 10:31

ola amigos

tenho um arquivo chamado f_sistema.ch neste arquivo contem os seguintes dados
#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.
      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.
      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)
      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
      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 de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

usar vetor no tsbrowse

Mensagempor Pablo César » 03 Jan 2012 10:45

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

usar vetor no tsbrowse

Mensagempor Amparo » 03 Jan 2012 11:30

ola amigos,

Pablo aqui esta toda a funcao que cria 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 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 122 vezes
tsbrowse errado.rar
tela pintada de preto
(87.75 KiB) Baixado 105 vezes
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

usar vetor no tsbrowse

Mensagempor Pablo César » 03 Jan 2012 12:47

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:
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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

usar vetor no tsbrowse

Mensagempor Amparo » 03 Jan 2012 14:45

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]
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 135 vezes
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

usar vetor no tsbrowse

Mensagempor Pablo César » 03 Jan 2012 16:48

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

usar vetor no tsbrowse

Mensagempor Amparo » 03 Jan 2012 17:16

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 de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

usar vetor no tsbrowse

Mensagempor Pablo César » 03 Jan 2012 17:25

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

usar vetor no tsbrowse

Mensagempor Pablo César » 03 Jan 2012 18:35

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:
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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

usar vetor no tsbrowse

Mensagempor Amparo » 04 Jan 2012 06:34

ola amigos,

Pablo, nao sei mas, acho que é algum bug, veja voce, eu criei no inicio da function a variavel chamada:
LOCAL C_VERMELHA := RGB( 255,000,000 )

coloquei a linha assim e deu certo
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
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
      IF NUMCOR = 0
         NUMCOR := W
         SGC020101AFUNC[14,NUMCOR,13] := &(SGC020101AFUNC[14,NUMCOR,13])
      ENDIF

na linha onde aplico o setcolor fiz assim:
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
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...
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Próximo



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro