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.
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