Alguém já Colocou de 40000 linhas em ListView
20/01/2006
0
so que meu sistema tranca uso da seguinte forma
while not eof
Items.BegimUpdate;
...
...
...
...
Items.EndUpdate;
Next;
end;
alguém saberia uma solução para o ListView não consumir tanto memória e ser um pouco mais rápido para carregar....
Valeu
Gm.gui
Posts
20/01/2006
Massuda
Items.BeginUpdate; while not eof ... ... Next; end; Items.EndUpdate;
Com relação à memória consumida, se você puder manter o resultado da query enquanto estiver com o listview visível, você poderia usar o listview em modo virtual; dê uma olhada na ajuda do Delphi sobre o evento OnData do TListView.
20/01/2006
Gm.gui
valeu
20/01/2006
Massuda
21/01/2006
Gm.gui
21/01/2006
Massuda
Basicamente, no evento OnData você recebe um Item para você preencher as propriedades dele (por exemplo, o Caption); para saber quais dados por no Item, use o valor Item.Index que te dá qual a ordem do item no ListView.
O problema é que esse evento é gerado para um mesmo item sempre que esse item é exibido pois o ListView não guarda os dados. Por exemplo, vamos supor que o item 0 esteja visível; o ListView gera o evento OnData para pedir os dados do item 0, os exibe e em seguida os descarta; se o usuário rolar o listview de modo que o item 0 suma e depois apareça, novamente será gerado um OnData para o item 0. Logo, não basta abrir a query uma vez e depois fechar, ela tem que ficar aberta o tempo todo que o list view estiver visível.
Note que o listview não guarda os dados nele, ele apenas gera o evento OnData, pega os dados e os exibe e em seguida descarta esses dados. Desse modo, ele não consome memória.
Sinceramente, eu usaria o modo virtual apenas se o consumo de memória for realmente problema, pois muitos recursos automáticos do listview são desabilitados nesse modo; por exemplo, a ordenação do itens tem que ser feita por você pois o listview não tem todos os dados para gerar a ordenação. Se for o seu caso, estude bastante o exemplo e leia atentamente a Ajuda do Delphi sobre esse assunto.
Clique aqui para fazer login e interagir na Comunidade :)