Clipper On Line • Ver Tópico - MiniGui Grid

MiniGui Grid

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

MiniGui Grid

Mensagempor Hasse » 08 Set 2015 19:19

Boa noite colegas.

Na GRID abaixo:
   DEFINE WINDOW Principal ; 
      AT                   0,0 ;
      WIDTH                getdesktopwidth() * 0.8 ;
      HEIGHT               getdesktopheight() * 0.8 ;
      TITLE                '** ==   PACIENTES == ** == Odonto Hasse Cl¡nica Integrada Ltda   == **'  ;
      MAIN                 NOMAXIMIZE ;
      ON INTERACTIVECLOSE  NaoSai() ;                                  &&RELEASE  FechaTudo()
      ON INIT              ( OpenTable() , LerDados( 1, '' ) )
      *
      wLin        := 05
      wCol        := 05
      wAlt        := 35
      wLarg       := 10 * 09
      wSize       := 9
      wIni        := 14 * wSize
      *
      c_Browse    := 'Atualizar'
      c_Pesquisa  := 'Pesq. Paciente'
      c_Seleciona := 'Ficha Paciente'
      c_NtPromis  := 'QueryTest'
      c_Sair      := 'Sait <ESC>'
      c_Versao    := 'Versao'
      *
      @ wLin,wCol    BUTTON BT1     CAPTION c_Browse                 ;
                                    ACTION  { LerDados( 1, '' ) }    ;
                                    WIDTH wIni                       ;
                                    HEIGHT wAlt
      wCol += Principal.bt1.width + 10
      @ wLin,wCol    BUTTON BT2     CAPTION c_Pesquisa               ;
                                    ACTION  { PesqNome() }           ;
                                    WIDTH 15 * wSize                 ;
                                    HEIGHT wAlt
      wCol += Principal.bt2.width + 10
      @ wLin,wCol    BUTTON BT3     CAPTION c_Seleciona              ;
                                    ACTION  { Ficha_Pac() }           ;
                                    WIDTH 15 * wSize                 ;
                                    HEIGHT wAlt
      wCol += Principal.bt3.width + 10
      @ wLin,wCol    BUTTON BT4     CAPTION c_NtPromis               ;
                                    ACTION  { QueryTest() }          ;
                                    WIDTH 15 * wSize                 ;
                                    HEIGHT wAlt
      wCol += Principal.bt4.width + 10
      @ wLin,wCol    BUTTON BT5     CAPTION c_Sair                   ;
                                    ACTION  { FechaTudo() }          ;
                                    WIDTH 15 * wSize                 ;
                                    HEIGHT wAlt
      wCol += Principal.bt5.width + 10
      @ wLin,wCol    BUTTON BT6     CAPTION c_Versao                 ;
                                    ACTION  { Versao() }             ;
                                    WIDTH 15 * wSize                 ;
                                    HEIGHT wAlt
      *
      DEFINE GRID Grid_1
         ROW            80
         COL            10
         WIDTH          nBrwWidth
         HEIGHT         nBrwHeight - 50
         HEADERS        { 'Nome', 'Identidade', 'CPF', 'Nascimento', 'Endereço', 'Bairro', 'Cidade', 'Estado', 'CEP', 'Naturalidade' }
         WIDTHS         { 300,     150,          200,   150,          300,        200,      200,      50,       60,    250 }
         FONTNAME       'Arial'
         FONTSIZE       12
         ALLOWEDIT      .F.
         CELLNAVIGATION .T.
         ONCHANGE       QueryTest()
         MULTISELECT    .T.
      END GRID
      *
   END WINDOW
   *
   Principal.Grid_1.setfocus
   *
   CENTER WINDOW Principal
   *
   ACTIVATE WINDOW Principal
   *

Os dados são inseridos na GRID a partir de um ARRAY, via função abaixo:
FUNCTION RequeryShow()
   *
   DELETE ITEM ALL FROM Grid_1 OF Principal
   *
   FOR n_Conta = 1 TO Len( aRowsTB )
      *
      Principal.Grid_1.AddItem( { aRowsTB[n_Conta][1], aRowsTB[n_Conta][2], aRowsTB[n_Conta][3], aRowsTB[n_Conta][4], ;
                                  aRowsTB[n_Conta][5], aRowsTB[n_Conta][6], aRowsTB[n_Conta][7], aRowsTB[n_Conta][8], ;
                                  aRowsTB[n_Conta][9], aRowsTB[n_Conta][10]  } )
      *
   NEXT n_Conta
   *
RETURN( NIL )

Como o SetFocus está na GRID, posso "navegar" com as teclas RIGHT, LEFT, UP e DOWN.
A função abaixo deveria atualizar o valor de n_Row e n_Col, mas isto não acontece.
FUNCTION QueryTest()                      && Linha e Coluna atual do Grid.
   *
   ? "This.QueryRowIndex, This.QueryColIndex" + Str ( This.QueryRowIndex )  ,  Str ( This.QueryColIndex )
   ? "This.CellRowIndex, This.CellColIndex  " + Str ( This.CellRowIndex  )  ,  Str ( This.CellColIndex  )
   ? "This.CellRow, This.CellCol            " + Str ( This.CellRow  )       ,  Str ( This.CellCol  )     
   ? "This.CellWidth, This.CellHeight       " + Str ( This.CellWidth )      ,  Str ( This.CellHeight )
   *
   Keyboard VK_RIGHT
   Keyboard VK_LEFT
   n_Row    := This.CellRowIndex
   n_Col    := This.CellColIndex
   IF n_Row > 0
      aItemArr := Principal.Grid_1.Item ( n_Row )
      ? n_Row, n_Col, aItemArr[1], aItemArr[2], aItemArr[3], aItemArr[4]
   ENDIF
   *
Return( nil )

Como devo ler os dados da GRID na linha onde está o cursor ?
Mais ou menos como no exemplo abaixo:
   n_Row       := This.CellRowIndex
   a_GridArray := Principal.Grid_1.Item ( n_Row )

   T_Nome    := a_GridArray[1]
   T_RG      := a_GridArray[2]
   T_Cpf     := a_GridArray[3]
   T_Nacism  := a_GridArray[4]
   T_Ender   := a_GridArray[5]
   T_Bairro  := a_GridArray[6]
   T_Cidade  := a_GridArray[7]
   T_Est     := a_GridArray[8]
   T_CEP     := a_GridArray[9]
   T_Natural := a_GridArray[10]

Este código acima só funciona quando, depois de navegar o cursor atá na linha desejada eu uso a tecla RIGHT ou mesmo LEFT se o cursor estiver fora da coluna 1. Neste momento o valor de n_Row é atualizado corretamente.
Já fiz de tudo que os meus conhecimentos indicam, e NADA.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

MiniGui Grid

Mensagempor Claudio Soto » 08 Set 2015 23:22

Hasse,
proba con esto:

aValue := Principal.Grid_1.VALUE
n_Row := aValue [1]
n_Col := aValue [2]
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

MiniGui Grid

Mensagempor Hasse » 09 Set 2015 09:55

Bom dia meu caro Dr. Soto.

Primeiramente, obrigado pela tua atenção.

Infelizmente não deu certo. Veja os teste que fiz.

aValue := Principal.Grid_1.VALUE
? len( aValue ) ===>>> resultado 0 (zero)
? "aValue:>", aValue ====>>> vazio
? "n_Row:>", aValue[1] ===>>> retorna erro de array.


Relatório do ErrorLog:
********************* Informações sobre o Erro - ErrorLog **********************
Tipo do erro...................: Erro
Tipo de mensagem...............: BASE
Número do Erro ................: 1132
Descrição do erro .............: Erro de limite
Objeto do Erro ................: acesso de array
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

MiniGui Grid

Mensagempor Hasse » 13 Set 2015 13:37

Boa tarde colegas.

Outro detalhe que descobri !!!!

Estando no GRID do Window PRINCIPAL:
      DEFINE GRID Grid_1
         ROW            80
         COL            10
         WIDTH          nBrwWidth
         HEIGHT         nBrwHeight - 50
         HEADERS        { 'Nome', 'Identidade', 'CPF', 'Nascimento', 'Endereço', 'Bairro', 'Cidade', 'Estado', 'CEP', 'Naturalidade' }
         WIDTHS         { 300,     150,          200,   150,          300,        200,      200,      50,       60,    250 }
         FONTNAME       'Arial'
         FONTSIZE       12
         ALLOWEDIT      .F.
         CELLNAVIGATION .T.
         ONDBLCLICK     Ficha_Pac()
         ONCHANGE       QueryTest()
         MULTISELECT    .T.
      END GRID

Ao usar o Evento ONDBLCLICK no GRID, a Função Ficha_Pac() lê os dados corretamente.
   n_Row       := This.CellRow
   a_ItemArray := Principal.Grid_1.Item ( n_Row )

Ao clicar no BUTTON -> Ficha_Pac() os dados não são lidos. Neste caso o valor "n_Row" retorna 0 (zero) e a matriz "a_ItemArray" retorna com os 10 campos vazios.

Como se faz para que no segundo caso os valores também retornem corretamente ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

MiniGui Grid

Mensagempor Toledo » 13 Set 2015 16:59

Amigo, tente o seguinte:
   n_Row       := Principal.Grid_1.Value
   a_ItemArray := Principal.Grid_1.Item ( n_Row )


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

MiniGui Grid

Mensagempor Hasse » 13 Set 2015 22:46

Boa noite Toledo.

n_Row       := Principal.Grid_1.Value

A variável n_Row retorna como um array vazio. Tanto clicando no BUTTON quanto com o DBLCLICK.
? LEN( n_Row ), retorna 0 (zero)
TYPE( 'n_Row' ), retorna "a"
ou seja, n_Row é um array vazio.
Muito esquisito.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

MiniGui Grid

Mensagempor Toledo » 14 Set 2015 08:07

Amigo, agora que observei, você está usando neste Grid:

CELLNAVIGATION .T.
MULTISELECT    .T.

Bom, a propriedade VALUE ela tem retorno diferentes quando se usa CELLNAVIGATION e MULTISELECT:

No caso de CELLNAVIGATION retorna uma array com a linha (Row) e coluna (Col) onde o cursor está posicionado.

Já com MULTISELECT o retorno é uma array com as linhas (Rows) selecionadas, pois com MULTISELECT você pode selecionar várias linhas do Grid ao mesmo tempo.

Então como você está usando CELLNAVIGATION e MULTISELECT em um mesmo Grid, acho que a HMG fica sem saber o que retornar, neste caso retorna uma array vazia.

Agora resta saber se realmente é necessário o uso de CELLNAVIGATION e MULTISELECT em um mesmo Grid.

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

MiniGui Grid

Mensagempor Toledo » 14 Set 2015 08:13

Só para complementar:

A propriedade VALUE em um Grid no modo Standard, isto é, sem o uso de CELLNAVIGATION e MULTISELECT no Grid, retorna um valor numérico da linha onde o cursor está posicionado.

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

MiniGui Grid

Mensagempor Hasse » 14 Set 2015 09:08

Bom dia Toledo.

Bem, aquelas 2 linhas na realidade foram copiadas de um exemplo, nem sei de qual dos tantos que testei, e eu nem sabia exatamente este comportamento delas. Eu havia percebido o comportamento da linha CELLNAVIUGATION, durante a navegação no GRID, mas não tinha a menor idéia das suas consequências na leitura de dados.

A outra, a MULTISELECT, posso deletar sem problemas já que este não é o objetivo do resultado que desejo.

Agora, certamente, com a retirada destas 2 linhas, terei êxito na tarefa proposta.

Vou fazer os testes.

Obrigado.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

MiniGui Grid

Mensagempor Hasse » 15 Set 2015 20:36

Bingo, Toledo.

Funcionou perfeito.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

MiniGui Grid

Mensagempor asimoes » 28 Set 2015 19:21

Hasa,

Com MULTISELECT .T. você pode pegar os valores das celulas assim:

cMensagem:=""
aValue := Principal.Grid_1.VALUE
nCol:=1
FOR I:=1 TO LEN(aValue )
       cMensagem+=Principal.Grid_1.Cell(aValue [I],nCol)+hb_eol()
NEXT
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MiniGui Grid

Mensagempor Hasse » 28 Set 2015 19:46

Ah muito legal e valioso.
Obrigado.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

MiniGui Grid

Mensagempor Nascimento » 10 Out 2015 22:32

Aproveitando o topico do amigo hasse

uma duvida tem como mudar o fontcolor do grid em um prenchimento?

exemplo um documento atrazado a cor da fonte ser vermelha

documentos em dia a cor ser padrão preto mesmo
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

MiniGui Grid

Mensagempor Toledo » 11 Out 2015 09:27

Amigo, tem como mudar sim, usando a propriedade DYNAMICFORECOLOR da Grid para isto.

fColor := { || iif( VENCTO<DATE() .AND. EMPT(PAGTO) , { 255,0,0 } , { 0,0,0 } ) }

Note que no codeblock acima tem uma condição IIF() para verificar se o documento está atrasado, comparando se o campo VENCTO é menor que a data atual e se o campo PAGTO está vazio (não foi pago ainda). O segundo parâmetro do IIF(), {255,0,0}, é a cor da fonte vermelha, e o terceiro, {0,0,0}, é cor da fonte preta. O formato deste codeblock da cor é o RGB ({Red,Green,Blue}).

No Grid você coloca:
DYNAMICFORECOLOR { fColor , fColor , fColor }

Neste exemplo é para um Grid com 3 colunas, então se o seu Grid tiver mais colunas, acrescente mais o fColor.

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

MiniGui Grid

Mensagempor Toledo » 11 Out 2015 09:47

Desculpe, só uma correção... é um Grid, então:

fColor := { |val, CellRowIndex| iif( CTOD(Form_1.Grid_1.Cell(CellRowIndex,3))<DATE() .AND. EMPT(CTOD(Form_1.Grid_1.Cell(CellRowIndex,5))) , { 255,0,0 } , { 0,0,0 } ) }

Em Grid não podemos usar o campo do DBF, então esta alteração é necessária para usar os campos da array da Grid.

Não testei, mas acho que vai dar certo.

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

Próximo



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 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