Clipper On Line • Ver Tópico - Ler dados da dbf e imprimir na tela com minigui

Ler dados da dbf e imprimir na tela com minigui

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Ler dados da dbf e imprimir na tela com minigui

Mensagempor Toledo » 07 Abr 2014 09:54

Josivan, segue um exemplo do que você pode fazer:

# include 'minigui.ch'
static v_cor
Func Main()
local cButton,k
public sit
Private aApto:={}
use aptos
If !File("aptos1.ntx")
   Index on strzero(val(apt),3) to aptos1
Endif
Set index to aptos1
set delete on
define window Form_1 ;
    at 0,0;
    width 1024;
    height 768;
    main;
    backcolor {0,0,0}   

    janela()

end window
Form_1.Center
Form_1.Activate
Return Nil

*******************************************************************************
func janela()
goto top
totap:= LastRec() - 1
lin := 10
for i= 1 to 10
   col  := 0
   do while (!EOF())
     if (col >488)
       exit
     endif
     do case
       case sit =="LI"
         v_cor:= GREEN
       case sit== "OC"
         v_cor:= RED
       case sit == "CL" .or. sit =="AR"
         v_cor:= WHITE
       case sit== "IT"         
         v_cor:= PURPLE
       case sit== "EC"
         v_cor:= YELLOW
       otherwise
         v_cor:= YELLOW
     end case
     cButton := ltrim(apt)
     @ lin,col LABEL &cButton;
         VALUE cButton CENTERALIGN WIDTH 40 HEIGHT 20;
         FONT "verdana" SIZE 8 BOLD;
         FONTCOLOR BLACK BACKCOLOR v_cor TOOLTIP 'A Suite Esta '+cButton + sit;
         ACTION {|| clicou(this.caption)}

     AADD(aApto,{ltrim(apt),sit})
     skip
     col += 50
   enddo
   if (EOF())
     exit
   endif
   lin += 40
next i
Return

return Nil

**********************************
Func Clicou(cCap)
nAp:=ASCAN(aApto,{|e| e[1]==cCap})
cCor:=This.BackColor
If aApto[nAp,2] =="LI"
  If msgyesno('deseja mudar a situaçao?','Apto: '+cCap+' Sit: '+aApto[nAp,2])
    Go Top
    Seek StrZero(Val(cCap),3)
    Replace sit with "OC"
    aApto[nAp,2] := "OC"
    This.BackColor := RED
  Endif
Endif
Return Nil

Utilizei as cores já definidas na MiniGui, assim evita algumas linhas de programação. Para ver outras opções de cores, veja o arquivo \INCLUDE\I_COLOR.CH

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Ler dados da dbf e imprimir na tela com minigui

Mensagempor Nascimento » 07 Abr 2014 10:02

Amigo Toledo eu so tenho a te agradecer acho que vc olhou o email que te mandei mostrando em que eu trabalhava mais devido as complicaçoes das nossas leis vigentes resolvi abandonar
e peguei este primeiro projeto no qual sou marinheiro de primeira viajem, eu nem tenho palavras pra te agradecer, so dizer que em que for preciso e tiver no meu alcance pra que este forum seja cada vez mais fortalecido, estarei aqui , abraços a todos os integrantes deste bendito forum
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Ler dados da dbf e imprimir na tela com minigui

Mensagempor Pablo César » 07 Abr 2014 12:28

Oi Josivan,

Você tem sorte de termos um tempinho e paciência. Não falo porque você não tem experiência. Mas queira entender, que a lógica que você empregou estava muito complicada. Eu fiz ao meu jeito e com certeza cada um tem o seu. O importante é você entender que o processamento de banco de dados, isso não muda em absolutamente nada, ao contrário, você em Harbour tem mais opções como de escolher diferentes tipos de banco de dados, diferentes drivers, e outras funções que antes tínhamos com o Clipper na biblioteca externa da CT. Mas o que tem de diferente, é apenas a interface com o usuário que em modo gráfico o programador precisa tratar de forma diferente que era em modo console, mas isso se dá pela biblioteca gráfica e não pelo Harbour. Por isso que estranhei a sua expressão "que não consiga gravar no dbf". Isso soa um tanto absurdo (desculpe a minha sinceridade). Eu não quis explicar esse motivo, porque como vi que você estava ansioso, frustrado e até com uma certa irritação pelo que eu tinha falado, deixei de lado para não virar nada pessoal. Agora você entende ? O seu problema não era gravar no dbf como você o colocou. E sim a obtenção do resultado correto da interface com relação com o que você tem gravado no dbf. Expressar-se mal, dá lugar a maus entendimentos e muita perda de tempo também.

Eu mudei muita coisa no seu código, inclusive você não precisará ter arquivo de índice. Também coloquei os LABELs onde correspondem, dentro da criação do Window MAIN. E apanhei os dados em forma de vetores tridimensional, isso facilitou. Removi varias variáveis desnecessárias e com respeito a cores eu deixei como CONSTANTES. Mudei a cor da fonte para branca quando tiver fundo preto. Criei uma função Ver_Cor(cSit) que serve para vários propositos, uma de Saida para fechar o arquivo dbf adequadamente, disponibilizei em forma de DO CASE para poder tratar cada SITuação, seja com mensagem ou adicionar rotinas especificas e disponibilizei uma função DebugMSG que serve para listar o conteúdo seja de variaveis como de vetores independente do tipo que forem.

Bom aqui segue o meu código, depois que terminei, vi que o Toledo tinha apresentado a sua solução. Acho que o importante é que você APRENDA não simplesmente que resolva a sua questão em si. Estude muito, utilize sempre uma bom alinhamento e seja claro no seu código (não abrevie nada), você tem um longo caminho. Tente manter o padrão Windows, não seja tão radical com as cores e não tente adaptar nada de telas como você fazia com o Clipper. Programação GUI é vida NOVA !

#include <hmg.ch>
// # include 'minigui.ch'

#define _verde_1   {094,255,094}
#define _branco    {255,255,255}
#define _preto     {000,000,000}
#define _vermelho  {190,000,000}
#define _amarelo   {255,255,128}

Function Main()
Local cButton
Local aRegistro

Set delete on

aRegistro:=Le_Sit()
// DebugMSG(aRegistro)

define window Form_1 ;
    at 0,0;
    width 520;
    height 140;
   NOSIZE ;
   ON RELEASE Saida() ;
   NOMAXIMIZE ;
   Title "Titulo do programa" ;
    main
   
   col := 10
   lin := 10
   For i= 1 to 17
       cButton := "Apto_"+AllTrim(Str(i))
      
       @ lin, col label &cButton ;
           parent Form_1;
            width 40;
            height 20;
            value ltrim(aRegistro[i,1]) ;
            tooltip 'A Suite Esta '+aRegistro[i,1] + aRegistro[i,2];
            border;
            font 'verdana' size 8 bold;
            action {|| clicou (this.name)};
         fontcolor (If(aRegistro[i,2]="IT",_branco,_preto)) ;
            backcolor aRegistro[i,3] ;
            centeralign
      
      col += 50
      if col>500
         col:= 10
         lin += 40
      endif
   Next
   
end window
Form_1.Center
Form_1.Activate
Return Nil

Function Le_Sit()
Local aTemp:={}

Select 1
use aptos
do while (!EOF())
   AAdd(aTemp,{ltrim(apt),sit,Ver_Cor(1->Sit)})
   skip
enddo
Return aTemp

Function Clicou (cApto)
Local nRec:=Val(CharRem("Apto_",cApto))

Sele 1
Goto nRec
Do Case
   Case Upper(1->Sit) == "LI"
        If msgyesno('deseja mudar a situaçao?','Apto: '+Apt+' Sit: '+Sit)
           Replace sit with "OC"
          SetProperty("Form_1","Apto_"+AllTrim(Str(nRec)),"BackColor",Ver_Cor(1->Sit))
          SetProperty("Form_1","Apto_"+AllTrim(Str(nRec)),"FontColor",(If(1->Sit="IT",_branco,_preto)))
        Endif
   /*
   Case Upper(1->Sit) == "OC"
   Case Upper(1->Sit) == "CL" .OR. Upper(1->Sit) == "AR"
   Case Upper(1->Sit) == "IT"
   Case Upper(1->Sit) == "EC"
   */
   OtherWise
        MsgStop("Nao pode reservar !")
EndCase
Return Nil

Function Saida()
Close 1
Return Nil

Function Ver_Cor(cSit)
Local aRet

do case
    case cSit =="LI"
         aRet := _verde_1
    case cSit== "OC"
         aRet := _vermelho
     case cSit == "CL" .or. cSit =="AR"
          aRet := _branco                                   
     case cSit== "IT"         
          aRet := _preto
    case cSit== "EC"
          aRet := _amarelo
    otherwise
          aRet := _amarelo
endcase
Return aRet

Function DebugMSG
Local i, aTemp := {}
   
For i := 1 to pcount()
    aadd( aTemp, hb_PValue(i))
Next i
MsgBox(hb_valtoexp(aTemp), "Helpful informations")
Return Nil
Eu coloquei HMG porque uso essa ferramenta, mas serve para a Minigui Extended também.

Espero que você goste. Boa sorte no seu aprendizado. Mas faça o que recomendo sempre: compile e estude cada exemplo que vem na Minigui ou na HMG na pasta SAMPLES !!!!
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

Ler dados da dbf e imprimir na tela com minigui

Mensagempor Nascimento » 08 Abr 2014 12:09

Amigos tudo esta funcionando as 999 maravilhas pra completar as 1000 senti necessidade de sempre atualizar a funçao janela() a cada 1 segundo

no clipper era super simples era do tascar um do while temporizando-o e era tranquilo agora na minigui eu tentei usar o define timer
mais nao ficou legal
att: Josivan Nascimento
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Ler dados da dbf e imprimir na tela com minigui

Mensagempor Pablo César » 08 Abr 2014 12:52

Josivan Nascimento escreveu:no clipper era super simples era do tascar um do while temporizando-o e era tranquilo
Imagem Muito boa essa.

Pois é, Josivan, a forma de programar era diferente. Esse Timer (deveria ter colocado o código pra ver) muitas vezes poderá sobrecarregar o sistema. Mas me explica aqui um pouco, esse programa vai rodar em rede ? Isto é, outros usuários irão mudar o status de cada Apto ? Já pensou em apenas abrir essa janela como opção de menu e não deixar sempre ativo ? Se o programa é monousuário, então não vejo necessidade de atualizar o status, não acha ?
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

Ler dados da dbf e imprimir na tela com minigui

Mensagempor Nascimento » 08 Abr 2014 13:44

hehehe , sim vai funcionar em rede e tem uma impressora pra imprimir a mudança de status tipo hora da mudança nome do cliente entre outros
o em clipper ele funciona em rede mapeada no qual por enquanto vou ver se deixo assim pois estou estudando a letodb , mais tudo é novo pra mim
eu trabalhava com games esses digamos(proibidos) o qual estava ja dando dor de cabeça ai resolvi parar ,esse é digamos meu primeiro projeto fora do jogo

este programa funciona mais ou menos assim

1 Modulo caixa (principal)
2 Modulo entrada
3 Modulo Cozinha
todos em rede
estou começando com o modulo caixa pois os outros digamos é uma divisão dele
eu compreendo que em windows é tudo diferente do que estavamos acostumados :)
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Ler dados da dbf e imprimir na tela com minigui

Mensagempor Nascimento » 11 Abr 2014 01:30

boa noite ou como sempre boa madrugada a todos tentei tentei e vou postar as tentativas que fiz
como o amigo pablo citou a cima bom segue o codigo a baixo

# include 'minigui.ch'
#include 'inkey.ch'   //           TENTEI TEMPORIZAR COM A INKEY SEM SUCESSO
static v_cor
Func Main()
local cButton,k
public sit
Private aApto:={}
use aptos
If !File("aptos1.ntx")
   Index on strzero(val(apt),3) to aptos1
Endif
Set index to aptos1
set delete on
define window Form_1 ;
    at 0,0;
    width 1024;
    height 768;
    main;
    backcolor {0,0,0}
      
*DEFINE TIMER Timer_1 INTERVAL 1000 ACTION janela()  // FICOU GERANDO LEGS NA TELA
    janela()
end window
Form_1.Center
Form_1.Activate
Return Nil

*******************************************************************************
func janela()   // PRECISO QUE ESTA FUNÇAO SEJA SEMPRE ATUALIZADA
*Set index to aptos1
goto top
totap:= LastRec() - 1
ndelay:= seconds()
lin := 10
// while .t.                        // COLOQUEI MAIS NAO DEU CERTO
* erase window Form_1               // COLOQUEI MAIS NAO DEU CERTO
for i= 1 to 10
   col  := 0
   do while (!EOF())
     if (col >488)
       exit
     endif
     do case
       case sit =="LI"
         v_cor:= GREEN
       case sit== "OC"
         v_cor:= RED
       case sit == "CL" .or. sit =="AR"
         v_cor:= WHITE
       case sit== "IT"         
         v_cor:= PURPLE
       case sit== "EC"
         v_cor:= YELLOW
       otherwise
         v_cor:= YELLOW
     end case
     cButton := ltrim(apt)
     @ lin,col LABEL &cButton;
          parent form_1;
         VALUE cButton CENTERALIGN WIDTH 40 HEIGHT 20;
         FONT "verdana" SIZE 8 BOLD;
         FONTCOLOR BLACK BACKCOLOR v_cor TOOLTIP 'A Suite Esta '+cButton + sit;
         ACTION {|| clicou(this.caption)}

     AADD(aApto,{ltrim(apt),sit})
     skip
     col += 50
   enddo
   if (EOF())
     exit
   endif
   lin += 40
next i
*  while seconds() - ndelay < .01     // NAO SURTIU EFEITO NEM UM
*  do events
*  end
  tone(300)    // COLOQUEI PRA TER UMA NOÇAO CASO CONSEGUISSE ATUALIZAR A FUNÇAO
* end
Return

**********************************
Func Clicou(cCap)
nAp:=ASCAN(aApto,{|e| e[1]==cCap})
cCor:=This.BackColor
If aApto[nAp,2] =="LI"
  If msgyesno('deseja mudar a situaçao?','Apto: '+cCap+' Sit: '+aApto[nAp,2])
    Go Top
    Seek StrZero(Val(cCap),3)
    Replace sit with "OC"
    aApto[nAp,2] := "OC"
    This.BackColor := RED
  Endif
Endif
Return Nil]


abraços a todos e agradeço antecipadamente os que poderem me ajudar
att: josivan Nascimento
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Ler dados da dbf e imprimir na tela com minigui

Mensagempor Toledo » 11 Abr 2014 07:54

Josivan, segue um exemplo:

#include 'minigui.ch'
static v_cor
Func Main()
local cButton,k
public sit
Private aApto:={}
use aptos Shared New
If !File("aptos1.ntx")
   Index on strzero(val(apt),3) to aptos1
Endif
Set index to aptos1
set delete on
define window Form_1 ;
    at 0,0;
    width 1024;
    height 768;
    main;
    backcolor {0,0,0}   

    Janela()

end window

Define Timer Timer_1 Of Form_1 Interval 1500 Action {|| janela() }

Form_1.Center
Form_1.Activate
Return Nil

*******************************************************************************
func janela()
goto top
totap:= LastRec() - 1
lin := 10
for i= 1 to 10
   col  := 0
   do while (!EOF())
     if (col >488)
       exit
     endif
     do case
       case sit =="LI"
         v_cor:= GREEN
       case sit== "OC"
         v_cor:= RED
       case sit == "CL" .or. sit =="AR"
         v_cor:= WHITE
       case sit== "IT"         
         v_cor:= PURPLE
       case sit== "EC"
         v_cor:= YELLOW
       otherwise
         v_cor:= YELLOW
     end case
     cButton := ltrim(apt)
     If _IsControlDefined (cButton,"Form_1")
       a_cor :=  GetProperty ( "Form_1", cButton, "BackColor" )
       If a_cor[1] != v_cor[1] .or. a_cor[2] != v_cor[2] .or. a_cor[3] != v_cor[3]
         SetProperty ( "Form_1", cButton, "BackColor", v_cor )
         _setToolTip ( cButton , "Form_1" , 'A Suite Esta '+cButton + sit )
       Endif
     Else
       @ lin,col LABEL &cButton;
           VALUE cButton CENTERALIGN WIDTH 40 HEIGHT 20;
           FONT "verdana" SIZE 8 BOLD;
           FONTCOLOR BLACK BACKCOLOR v_cor TOOLTIP 'A Suite Esta '+cButton + sit;
           ACTION {|| clicou(this.caption)}

       AADD(aApto,{ltrim(apt),sit})
     Endif
     skip
     col += 50
   enddo
   if (EOF())
     exit
   endif
   lin += 40
next i
return Nil

**********************************
Func Clicou(cCap)
nAp:=ASCAN(aApto,{|e| e[1]==cCap})
cCor:=This.BackColor
If aApto[nAp,2] =="LI"
  If msgyesno('deseja mudar a situaçao?','Apto: '+cCap+' Sit: '+aApto[nAp,2])
    Go Top
    Seek StrZero(Val(cCap),3)
    If RLock()
      Replace sit with "OC"
      DbUnlock()
    Else
      MsgInfo("Outro usuário usando o registro")
      Return Nil
    Endif
    aApto[nAp,2] := "OC"
    This.BackColor := RED
  Endif
Endif
Return Nil


Para testar, coloquei alguns comandos de rede no acesso ao DBF, então você poderá executar este exemplo duas vezes e colocar as janelas uma ao lado da outra e clicar em um dos aptos e ver o que acontece na outra janela.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Anterior



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


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