Ja Tentei de tudo e com todos !

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

Ja Tentei de tudo e com todos !

Mensagem por managercorp »

Bom Antes de mais nada Feliz dia dos Amigos, que foi ontem.
Um abraço a todos que fazem este Forum.
O Problema e o seguinte:
tenho um browse na tela, que pode ser dbedit, tbrowse, ou outro qualquer. o importante e que resulte na solucao.
Bom ai vai a questao:
o Browse e tipo assim:
--------------------------------------------------------------------------
Nome do Salao: : Dia 01 : Dia 02 : Dia 03 : Dia 04 : Dia 05 : ->>>>
--------------------------------------------------------------------------
salao recife : 105020: 0 : 0 : 105130 : 105130:
salao itamaraca : 0: 213541 : 0 : 0 : 0:
salao pe : 0: 0 : 0 : 0 : 0:
--------------------------------------------------------------------------
Pra voces entenderem melhor o meu cursor vai passeando
nos dias para a direita passando varias telas a direita, e para baixo
percorrendo os saloes.
Ex: o salao recife esta com uma reserva dia 01
dia 2 esta desocupado e volta a ficar ocupado dia 4 e 5

Gostaria que estes numeros de reservas fossem de outra cor
pois neles estao contidos os status dessa reserva, ex: se a reserva esta
garantida esta coluna dessa linha ficara verde, se o status desta
reserva estiver em pendencia, ela ficara azul, etc etc etc
as reservas com numero 0, ou seja nao contem reserva ficaria preto.
* Consegui com a ajuda de varios amigos deste forum, mudar a cor da linha, mas nao serve pois na mesma linha tem varios dados de varios status, entao a selecao das cores tinham de ser pela linha+coluna
tanto assim que abre o browse, como tambem na navegacao.
Aqui vai a estrutura do meu dbf:
-------------------
(salao) -caractere de 30
(dia01) -date
(status1) - caractere de 1
(dia02)
(status2)
(dia03)
(status3)
-------------------
e assim por diante ate o dia 30
para mudar a cor a funcao teria de se basear na variavel status
ex:
1=azul
2=vermelho
0=preto
----------------------------------------
ATENCAO AS CORES TEM DE MUDAR DE ACORDO COM A COLUNA E NAO DE ACORDO COM A LINHA. E NAO MUDAR TODA A COLUNA, NEM TODA A LINHA, APENAS O CAMPO PERTINENTE.

----------------------------------------
Se Alguem aceitar este desafio e conseguir me ajudar, ficarei muito grato, e como trabalho com hotelaria, o heroi sera muito bem vindo quando vier a Recife-PE
------------------------------------------
Alexandre Pessoa - 81-96152319 (Pode ligar a Cobrar)
solucoeshotel@hotmail.com
alexandre@managercorp.com.br
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

este exemplo e para controle de preço
se a mercadoria e velha no estoque se tem mais de 30 dias fica amarela
60 dias azul mais de 90 dias vermelho o preço de vendas

Código: Selecionar todos

***************************
Function NvDBEdit1(arg,arg1,arg2,arg3,arg4,arg5)
Local Save1

   #include "inkey.ch"
   #include "dbedit.ch"
   #include "setcurs.ch"
   #define     COLSEP     CHR(32)  + CHR(179) + CHR(32)
   #define     HEADSEP    CHR(196) + CHR(194) + CHR(196)
   #define     FOOTSEP    CHR(196) + CHR(194) + CHR(196)
*   #define     MYCOLORS   "B+/N,W+/G+,W+*/G,N,B+/N,N/BG,W+*/N,GR+/BG"
   #define     MYCOLORS   "N/BG,W+/B,GR+*/B,B/BG,N/BG,W+/B,GR+*/BG,GR+/BG,R+/B"

   LOCAL b, column, nKey, cScreen
   LOCAL nRecno, nCnt, nTemp
   LOCAL nCursor, cSearch
   LOCAL GetList := {}
   cScreen := SaveScreen()
   SET CONFIRM ON
   SETCURSOR(SC_NONE)
   SetColor("N/BG")
   @  2, 0 Clear To 7, 79
   @  3, 0 TO 23,79 COLOR "N/BG"
   barra_e("Novo Altera Busca eXclui Entrada Saida exTrato Opcoes etIqueta Muda ESC-retorna","N")
   b := TBrowseDB( arg+1, arg1+1, arg2-1, arg3-1)
   b:colorSpec := MYCOLORS
   b:colSep    := COLSEP
   b:headSep   := HEADSEP
   column := TBColumnNew( arg4[1], {|| ref} )
   b:addColumn( column )
   column := TBColumnNew( arg4[2], {|| SubStr(descricao,1,42)} )
   b:addColumn( column )
   column := TBColumnNew( arg4[3], {|| TransForm(venda, "@e 99999.99")} )
   b:addColumn( column )
   column:colorBlock := {|| IF(Date()-dt_atual <= 30, { 5, 2 }, IF(Date()-dt_atual > 30 .And. Date()-dt_atual <= 90, { 7, 3 }, IF(Date()-dt_atual > 90, { 4, 9},{5,2})))} // aki ele verifica a data de entrada da mercadoria
	If libera_senha[1,4] == 88
	   column := TBColumnNew( arg4[4], {|| TransForm(custo, "@e 99999.99")} )
   	b:addColumn( column )
	   column := TBColumnNew( arg4[5], {|| TransForm(margem, "@e 999.99 %")} )
   	b:addColumn( column )
	   column := TBColumnNew( arg4[6], {|| dt_atual} )
      b:addColumn( column )
	EndIf         b:refreshAll()
         ForceStable( b )
         if w3tecla == 27 .And. op1 != 1
            SetCursor(1)
            Set Confirm Off
            If op1 != 1
	            vbusca:= "F"
   	      EndIf
            Exit
         endif
         if w3tecla == 27 .And. op1 == 1   // se chamado pelo orcamento, entao retorna
            SetCursor(1)
            Set Confirm Off
            Exit
         endif
      EndIf
   End
   RestScreen(,,,,cScreen)
   RETURN (.t.)

********************************
STATIC FUNCTION TBMoveCursor( o, nKey )

   LOCAL nFound
   STATIC aKeys := ;
       { K_DOWN      , {|obj| obj:down()},;
         K_UP        , {|obj| obj:up()},;
         K_PGDN      , {|obj| obj:pageDown()},;
         K_PGUP      , {|obj| obj:pageUp()},;
         K_CTRL_PGUP , {|obj| obj:goTop()},;
         K_CTRL_PGDN , {|obj| obj:goBottom()},;
         K_RIGHT     , {|obj| obj:right()},;
         K_LEFT      , {|obj| obj:left()},;
         K_HOME      , {|obj| obj:home()},;
         K_END       , {|obj| obj:end()},;
         K_CTRL_LEFT , {|obj| obj:panLeft()},;
         K_CTRL_RIGHT, {|obj| obj:panRight()},;
         K_CTRL_HOME , {|obj| obj:panHome()},;
         K_CTRL_END  , {|obj| obj:panEnd()} }
   nFound := ASCAN( aKeys, nKey )
   IF (nFound != 0)
      EVAL( aKeys[++nFound], o )
   ENDIF
   RETURN (nFound != 0)

***************************
Function ForceStable( oObj )

   While !oObj:stabilize()
   End
   Return (.T.)
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

NAO DEU CERTO

Mensagem por managercorp »

Seu prg de exemplo, esta cheio de bugs ex: if faltando endif, enddo sem do while.
Voce pode mandar o prg certinhoi pro meu email e um exe de demo por favor, estou precisando mesmo.
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

e que o prg que faz parte do codigo que eu mandei erra muito grande
so mandei a parte que faz o que vc queria

ja mandei um exemplo no seu email com exe e prg

e so mudar ao seu gosto
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

Valeu Cara, Mas nao era isto.

Mensagem por managercorp »

Do jeito que voce me mandou eu agradeco muito pela boa vontade, mas desse jeito eu ja tinha conseguido, ou seja voce muda a linha conforme algum parametro, mas nao e isto que to precisando.
O que eu preciso e que mude apenas a coluna, pois na mesma linha
tem situacoes diferentes, mudando toda a linha nao adianta.
tem de ser pela coluna, o que deve mudar e a cor da coluna e nao da linha.
Se voce puder continuar me ajudando eu agradeço.
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Se você utilizar um tbrowse, basta criar um codeblock para alterar a cor dos dados conforme o seu conteúdo.
É importante que você defina os pares de cores a serem utilizados no método tbrowse:colorspec .

OTBC:COLORBLOCK:={|X|IF(Field(2) == "ok",{1,2},{3,4})}

Se o campo 2 contiver "ok", os pares de cores 1 e 2 serão utilizados e, caso contrário, os partes 3 e 4.

Espero ter ajudado.

MGS
managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

Retorno para MarceloG

Mensagem por managercorp »

Cara, Gostei da rapidez no atendimento, nem tinha terminado a pergunta ja estava recebendo a resposta, Parabens.
So que preciso que voce me mande um prg e um demo para mim poder entender melho, tem condição de voce fazer isto por mim ?
eu agradeço.
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Caro amigo,
embora baseada na mesma, esta não é a função que eu uso, mas dá para entender o princípio.
A propósito, e foi uma dica muito importante quando eu comecei, você deve iniciar com coisas pequenas e ir aumentando, aumentando, etc.

Código: Selecionar todos

FUNCTION TBR()
LOCAL OTBR,OTBC

USE ARQTESTE (o arquivo teste tem três campos)

OTBR:=TBROWSEDB(0,0,24,79)

OTBR:COLORSPEC:= "W+/B,N/W,R+/B,R/W," (Cores do tbrowse)
___________________1       2      3      4  
___________________1º PAR      2º PAR 

OTBR:HEADSEP  := "ÍÍÍ" (Divisor do cabeçalho)

(Coluna 1)
OTBC:=TBCOLUMNNEW(CAMPO1,FIELDWBLOCK(FIELD(1),SELECT())) 
OTBR:ADDCOLUMN(OTBC)

(Coluna 2)
OTBC:=TBCOLUMNNEW(CAMPO2,FIELDWBLOCK(FIELD(2),SELECT())) 
OTBR:ADDCOLUMN(OTBC)

(Coluna 3)
OTBC:=TBCOLUMNNEW(CAMPO3,FIELDWBLOCK(FIELD(3),SELECT())) 
(Define a cor do dado conforme situação)
OTBC:COLORBLOCK:={|X|IF(CAMPO1 == "X",{1,2},{3,4})} 

(Você poderia usar qualquer combinação, desde que a mesma esteja definida em :COLORSPEC - Atenção, tem limite!!) 

OTBR:ADDCOLUMN(OTBC)

DO WHILE ....
      (Estabilizar/exibir tbrowse e testar teclas)
ENDDO

RETURN
Espero ter ajudado.

MGS

PS: colorblock define a cor do dado, sendo que o primeiro par de cores refere-se ao item ativo e o segundo, ao inativo.
Editado pela última vez por Pablo César em 10 Abr 2012 09:15, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Responder