Página 1 de 2

usar vetor no tsbrowse

Enviado: 02 Jan 2012 08:49
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

usar vetor no tsbrowse

Enviado: 02 Jan 2012 09:19
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 )

usar vetor no tsbrowse

Enviado: 02 Jan 2012 13:45
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

usar vetor no tsbrowse

Enviado: 02 Jan 2012 14:02
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

usar vetor no tsbrowse

Enviado: 02 Jan 2012 14:07
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) ?

usar vetor no tsbrowse

Enviado: 03 Jan 2012 11:31
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

usar vetor no tsbrowse

Enviado: 03 Jan 2012 11:45
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.

usar vetor no tsbrowse

Enviado: 03 Jan 2012 12:30
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

usar vetor no tsbrowse

Enviado: 03 Jan 2012 13:47
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

usar vetor no tsbrowse

Enviado: 03 Jan 2012 15:45
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.

usar vetor no tsbrowse

Enviado: 03 Jan 2012 17:48
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

usar vetor no tsbrowse

Enviado: 03 Jan 2012 18:16
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

usar vetor no tsbrowse

Enviado: 03 Jan 2012 18:25
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

usar vetor no tsbrowse

Enviado: 03 Jan 2012 19:35
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í ?

usar vetor no tsbrowse

Enviado: 04 Jan 2012 07:34
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...