Clipper On Line • Ver Tópico - Posicionar na primeira linha do Grid

Posicionar na primeira linha do Grid

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Posicionar na primeira linha do Grid

Mensagempor rubens » 08 Jan 2017 09:06

Olá Bom dia...

Tive que trocar um browse por um grid para poder usar a pesquisa com wildseek. Eu Leio o dbf na matriz aItems e indico essa matriz no grid. Daí na pesquisa letra a letra eu pesquiso na Matriz e retorno a linha para o grid. Muito rápido e eficiente só que se a tela do grid estiver preenchida ele sempre posiciona a linha encontrada na ultima linha do grid. Daí que ir na barra de rolagem para ver os restante dos itens. Preciso posicionar a linha encontrada na primeira linha do grid. Eu consigo fazer isso com o comando
SetProperty('PesqPro','Grid_1','Value', {1,1} )

Mas só posiciona a linha e não os dados.
Na figura abaixo mostra exatamente o que acontece... Digito MA e ele encontra o primeiro MA, mas só mostra ele na última linha do grid. Eu quero que ele mostre o primeiro item encontrado na primeira linha do grid. Como disse acima se mandar ir para a primeira linha só vai a linha não rola os itens para cima.
Erro PesqPro.png


Formulário
*HMGS-MINIGUI-IDE Two-Way Form Designer Generated Code
*OPEN SOURCE PROJECT 2005-2016 Walter Formigoni http://sourceforge.net/projects/hmgs-minigui/

DEFINE WINDOW TEMPLATE AT 190 , 331 WIDTH 1160 HEIGHT 574 VIRTUAL WIDTH NIL VIRTUAL HEIGHT NIL TITLE NIL ICON NIL MODAL CURSOR NIL ON INIT NIL ON RELEASE NIL ON INTERACTIVECLOSE NIL ON MOUSECLICK NIL ON MOUSEDRAG NIL ON MOUSEMOVE NIL ON MOVE NIL ON DROPFILES NIL ON SIZE NIL ON PAINT NIL BACKCOLOR NIL ON GOTFOCUS NIL ON LOSTFOCUS NIL ON SCROLLUP NIL ON SCROLLDOWN NIL ON SCROLLLEFT NIL ON SCROLLRIGHT NIL ON HSCROLLBOX NIL ON VSCROLLBOX NIL

     DEFINE TEXTBOX Text_1
            ROW    10
            COL    10
            WIDTH  1043
            HEIGHT 44
            FONTNAME 'Arial'
            FONTSIZE 24
            TOOLTIP ""
            ONCHANGE Pesq_Pro( Alltrim( This.Value) )
            ONGOTFOCUS NIL
            ONLOSTFOCUS NIL
            FONTBOLD .T.
            FONTITALIC .F.
            FONTUNDERLINE .F.
            FONTSTRIKEOUT .F.
            ONENTER NIL
            HELPID NIL
            TABSTOP .T.
            VISIBLE .T.
            READONLY .F.
            RIGHTALIGN .F.
            UPPERCASE .T.
            MAXLENGTH 40
            BACKCOLOR {{255,255,255},,{187,255,255}}
            FONTCOLOR {{0,0,255},,{0,64,128}}
            INPUTMASK NIL
            FORMAT NIL
            VALUE ""
     END TEXTBOX

     DEFINE LABEL Label_1
            ROW    495
            COL    10
            WIDTH  1121
            HEIGHT 32
            VALUE "Label_1"
            FONTNAME "Arial"
            FONTSIZE 20
            TOOLTIP ""
            FONTBOLD .T.
            FONTITALIC .F.
            FONTUNDERLINE .F.
            FONTSTRIKEOUT .F.
            HELPID NIL
            VISIBLE .T.
            TRANSPARENT .F.
            ACTION NIL
            ONMOUSEHOVER NIL
            ONMOUSELEAVE NIL
            AUTOSIZE .F.
            BACKCOLOR NIL
            FONTCOLOR {255,0,0}
     END LABEL 

     DEFINE GRID Grid_1
            ROW    60
            COL    10
            WIDTH  1120
            HEIGHT 423
            HEADERS {'Codigo','Descrição','Un','Estoque','PrCusto','PrVenda','NCM','Gru'}
            WIDTHS {150,450,40,80,100,100,120,50}
            ITEMS aItems
            VALUE 0
            FONTNAME "Arial"
            FONTSIZE 12
            FONTBOLD .T.
            FONTITALIC .F.
            FONTUNDERLINE .F.
            FONTSTRIKEOUT .F.
            TOOLTIP ""
            BACKCOLOR NIL
            FONTCOLOR NIL
            DYNAMICBACKCOLOR { bColor, bColor,bColor,bColor,bColor,bColor,bColor,bColor }
            DYNAMICFORECOLOR { fColor, fColor,fColor,fColor,fColor,fColor,fColor,fColor }
            ONGOTFOCUS NIL
            ONCHANGE NIL
            ONLOSTFOCUS NIL
            ONDBLCLICK NIL
            ALLOWEDIT .F.
            ONHEADCLICK NIL
            ONCHECKBOXCLICKED NIL
            INPLACEEDIT ""
            CELLNAVIGATION .F.
            COLUMNCONTROLS NIL
            COLUMNVALID NIL
            COLUMNWHEN NIL
            VALIDMESSAGES NIL
            VIRTUAL .F.
            ITEMCOUNT NIL
            ONQUERYDATA NIL
            MULTISELECT .F.
            NOLINES .F.
            SHOWHEADERS .T.
            NOSORTHEADERS .F.
            IMAGE NIL
            JUSTIFY NIL
            HELPID NIL
            BREAK .F.
            HEADERIMAGE ""
            NOTABSTOP .T.
            CHECKBOXES .F.
            LOCKCOLUMNS NIL
            PAINTDOUBLEBUFFER .F.
     END GRID 

END WINDOW

Pesqpro
Static Function Pesq_Pro(cNomePro)  
Local nFirst   := 0  // Primeiro Produto Encontrado
If LEft( cNomePro,1) = '*'
   // Criar outra matriz filtrada com wildseek
   Return Nil
Else
   nFirst := Ascan( aItems,{|a|a[2] = cNomePro} )   
   If nFirst > 0
      SetProperty('PesqPro','Grid_1','Value',nFirst )
   EndIf
EndIf
*SetProperty('PesqPro','Grid_1','Value', {1,1} )
Return nil

Daí fui para o plano B, filtrar os dados porque aí a primeira linha sempre vai ser o primeiro item encontrado. Só que acontece o problema da lentidão no preenchimento do grid.Quando você deleta os itens e adiciona novamente até uns 20 itens fica quase imperceptível a velocidade mas acima disso fica extremamente lento. Para o wildseek dá porque tem que filtrar e apresentar os dados filtrados mesmo, mas letra a letra não...

Pensei em filtrar os dados em uma outra matriz e setar ela no grid, porque ao invés de adicionar item por item trocaria a matriz toda... mas não funcionou ...
Alguém sabe como posicionar na primeira linha do grid, dados e a linha?

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Posicionar na primeira linha do Grid

Mensagempor Nascimento » 12 Jan 2017 10:11

rubens vc poderia postar o dbf para poder-mos efetuar os testes?
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

Posicionar na primeira linha do Grid

Mensagempor rubens » 12 Jan 2017 14:51

Nascimento, segue em anexo o projeto com um dbf e um executável... Foi implementado pela IDE da Minigui Extends.
Tá isolado e simples de compilar.

O que ocorre: Quando executa e vai pressionando as teclas para pesquisar o produto (letra a letra) ele pesquisa na matriz aItens a posição e seta no grid aquela posição encontrada na matriz. Encontra tudo beleza e rápido, só que a sempre posiciona no grid na última linha. Daí para o cliente ver os itens encontrados tem que clicar no grid e rolar manualmente. Queria que quando encontrasse um item ele fosse posicionado na primeira linha do grid.
Aqui no fórum tem uma consultacdx que a cada tecla pressionada limpa o grid e adiciona os itens filtrados. Seria o Ideal, mas nos meus testes fica muito lento assim. Existe uma condição para mostra somente 60 registros. Nos testes que fiz aqui para ficar satisfatório tem que deixar somente 20 registros. Daí não vai funcionar. Tenho que tentar resolver pesquisando a primeira ocorrência.

Tá funcionando com Browse e muito rápido ele vai fazendo um seek e movimentando no dbf e o browse acompanhando, mas aí na hora wildseek como que faz não tem de jeito de filtrar no dbf. Daí uso o SetFilter, se for local e até rápido, mas quando é e um terminal a consulta, já viu a lentidão né..

Do jeito que tá tá ótimo mas preciso posiciona o grid na primeira linha sempre que pressionar uma tecla... isso que não estou conseguindo fazer....

Obrigado
Rubens

PESQUISA.rar
(708.09 KiB) Baixado 112 vezes
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Posicionar na primeira linha do Grid

Mensagempor Daniel » 12 Jan 2017 16:51

altera esta linha para

SetProperty('Main','Grid_1','Value',nFirst + 13) //13 total de linha do grid
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

Posicionar na primeira linha do Grid

Mensagempor rubens » 12 Jan 2017 17:18

Essa é uma daquelas questões que você acha a solução mas parece que ficou faltando um algo mais, né...
No Browse tem as funções _Home(), _End().
Eu tava procurando como levar a barra para cima e na realidade teve que empurrar os dados para cima...

Obrigado Daniel..

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Posicionar na primeira linha do Grid

Mensagempor Daniel » 13 Jan 2017 11:40

E para colocar a barra azul no local
ponha esta linha
SetProperty('Main','Grid_1','Value', nFirst + 13)
SetProperty('Main','Grid_1','Value', (GetProperty('Main','Grid_1','Value') - 13))
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

Posicionar na primeira linha do Grid

Mensagempor Nascimento » 15 Jan 2017 11:41

dê uma olhaa na seção dowloads tem um exemplo feito por toledo com o nome ConsultaCdx eu acho que é isso que vc precisa

http://www.pctoledo.com.br/forum/filebase.php?f=203&search=1&searchword=&page=1
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

Posicionar na primeira linha do Grid

Mensagempor heveraldo » 16 Mai 2017 13:50

Function Localiza()
//***********************************************************
//cFormulario := thiswindow.name
//cGrid := this.focusedcontrol

IF VK_0 <= HMG_GetLastVirtualKeyDown() .AND. HMG_GetLastVirtualKeyDown() <= VK_Z .OR.;
HMG_GetLastVirtualKeyDown() = VK_SPACE .OR. HMG_GetLastVirtualKeyDown() == VK_BACK

ch := UPPER(HMG_GetLastCharacter())
if HMG_GetLastVirtualKeyDown() == VK_BACK // backspace
HMG_CleanLastVirtualKeyDown()
cLocaliza := LEFT(cLocaliza, max(0,HMG_LEN(cLocaliza)-1))
else
IF EventMsg() <> WM_CHAR
Return Nil // enable processing the current message
ENDIF
cLocaliza := cLocaliza + ch
endif

CadastroProduto.Grid_Produto.RecNo := 1 // Recurso, para mostrar registro na primeira linha do grid.

Produto->(DbSeek(cLocaliza))
nRegistro := Produto->(RecNo())
CadastroProduto.Grid_Produto.RecNo := Produto->(RecNo())
CadastroProduto.Text_Localizar.Value := cLocaliza

//HMG_PressKey ( VK_END, VK_NEXT, VK_PRIOR)

// Atualiza()
ELSE
// Atualiza()
Return Nil // enable processing the current message
ENDIF
Return 1
heveraldo
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 72
Data de registro: 16 Jun 2006 17:15
Curtiu: 0 vez
Mens.Curtidas: 0 vez




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