28/01/2006

Application.ProcessMessage

vou tentar explica a situação.

tenho um istema de armazenamento de arquivos que funciona corretamente. so que surgiu um problema, se o arquivo a ser armazenado for muito grande o porcesso demora um pouco.
1º problema eu teria de fazer um progressBar mostrando o andamento do processo senão o usuario fica pensando que travou o sistema.
2º esse sistema tem varias msg e ações logo apos gravar o arquivo, so que nessa demora esta dando erro em tudo que vem depois do codigo de salvar

tentei usar Application.ProcessMessage so que esta dando erro
Build
[Error] Unit_Armazena.pas(184): Undeclared identifier: ´ProcessMessage´
[Fatal Error] PortaArquivos.dpr(9): Could not compile used unit ´Unit_Armazena.pas´
pessoal como posso colcar um progressbar que mostre o curso da gravação e no termino ai sim informar que o arqvuivo foi salvo com sucesso....


Crcam

Respostas

28/01/2006

Fx|hand

o certo seria:

Application.ProcessMessages



e outra coisa... pra usar um progressbar, tem q ter em base um Looping...
c vc tiver usando um Loop pra verificar o arquivo... pode fazer o seguinte...

antis de começar a ler o arkivo, ver qual o numero da ultima linha, e colocar na propriedade MAX da progressbar, e depois no loop vc vai adicionando mais 1 no POSITION....

eu prefiro fazer por step....

(na propriedade STEP do progressbar, coloque 1, e depois na programação vc apenas usa a linha -> progressbar1.stepit;)

e tah feito sua pb....

PS: Use o application.processmessages lah no meio do looping... senaum o programa fica travado até terminar as rotinas... =)


agora, sobre o erro, naum tenho ideia pq q tah acontecendo... mais tenta fazer um eskema de Functions... cria ela separada, e tenta rodar apenas xamando elas dps q sair do looping !!! XD

boua sorti ai !


Responder Citar

28/01/2006

Crcam

legal sua dica de fazer separado foi na mosca parou o erro mas eu não entendi bem o lance do progress não tem loop que eu tenha feito

esse é o local onde faz a ação de registrar

procedure TForm_Armazena.ArmazenaArq(Sender: TObject);
begin
if DataSet_deposito.State in [dsedit, dsinsert] Then
DataSet_Deposito.FieldByName(´DataArmaz´).AsString:=(DBEdit_data.Text);
DataSet_Deposito.FieldByName(´categoria´).AsString:=(DBEdit_Categoria.Text);
DataSet_DepositoNomeArq.Value:=(DBEdit_NomArq.Text);
DataSet_depositoext.Value:=(DBEdit_ext.Text);
DataSet_depositoEndOrigem.Value:=(DBEdit_Origem.Text);
DataSet_depositoRef.Value:=(anexo);
DataSet_DepositoDeposito.LoadFromFile(anexo);
Application.ProcessMessages;
DataSet_Deposito.Post;

end;

e depois no btns tem as ações posteriores agora fica a duvida como eu faço o progressbar e no termino a ação registro ele libera o resto


Responder Citar