Dando loading enquanto ClientDataset carrega
16/06/2011
0
Obs: pensei em threads ...
Ronaldo Lanhellas
Post mais votado
05/05/2013
José
Mais Posts
16/06/2011
Nigro
. . . . TelaAbertura := TTelaAbertura.Create(Self); TelaAbertura.ShowModal; ClientDataSet.Open; FreeAndNil(TelaAbertura); . . . . .
16/06/2011
Ronaldo Lanhellas
Tentei fazer FrmLoading.Show;
funcionou normalmente, porém os icones da tela de FrmLoading não aparecem (como se ela estivesse por trás dos outros forms).
16/06/2011
Emerson Nascimento
var
JanelasCongeladas: Pointer;
begin
TelaAbertura := TTelaAbertura.Create(Self);
// desabilita todas as telas, exceto TelaAbertura
JanelasCongeladas := DisableTaskWindows( TelaAbertura.Handle );
try
TelaAbertura.BorderIcons := []; // pode estar diretamente no TelaAbertura
TelaAbertura.BorderStyle := bsSizeToolWin; // pode estar diretamente no TelaAbertura
TelaAbertura.Show; // exibe a tela
TelaAbertura.Repaint; // desenha novamente a tela
ClientDataSet.Open; // abre o dataset
finally
EnableTaskWindows( JanelasCongeladas ); // reabilita todas as telas
FreeAndNil( TelaAbertura ); // elimina TelaAbertura e libera a memoria
end;
end;
usando essa técnica você pode até mesmo ter uma barra de progresso na sua "tela de processamento", sendo incrementada pelo programa chamador. assim:
var
JanelasCongeladas: Pointer;
begin
TelaAbertura := TTelaAbertura.Create(Self);
// desabilita todas as telas, exceto TelaAbertura
JanelasCongeladas := DisableTaskWindows( TelaAbertura.Handle );
try
TelaAbertura.BorderIcons := []; // pode estar diretamente no TelaAbertura
TelaAbertura.BorderStyle := bsSizeToolWin; // pode estar diretamente no TelaAbertura
// configuro a ProgressBar (lembrando que em TelaAbertura agora há um TProgressBar)
TelaAbertura.ProgressBar1.Max := 15; // numero de passagens possíveis
TelaAbertura.ProgressBar1.Step := 1; // unidades a serem incrementadas por StepIt
TelaAbertura.ProgressBar1.Position := 0; // posição inicial do progresso
TelaAbertura.Show; // exibe a tela
TelaAbertura.Repaint; // desenha novamente a tela
// processo que levará em torno de 15seg, alimentando a barra
// de progresso de TelaAbertura a partir do processo abaixo
while not ProcessoFinalizado do
begin
TelaAbertura.ProgressBar1.StepIt; // incrementa a barra de progresso
Sleep(1000); // aguarda 1 seg (para demonstrar um tempo de processamento)
Application.ProcessMessages; // processa as mensagens da fila
end;
finally
EnableTaskWindows( JanelasCongeladas ); // reabilita todas as telas
FreeAndNil( TelaAbertura );// elimina TelaAbertura e libera a memoria
end;
end;
16/06/2011
Ronaldo Lanhellas
1 - Porque utilizar o DisableTaskWindow e EnableTaskWindow
2 - QUal função do Repaint
17/06/2011
Emerson Nascimento
1 - Porque utilizar o DisableTaskWindow e EnableTaskWindow
2 - QUal função do Repaint
você precisa usar o Show no lugar de ShowModal. com isso, se você não desabilitar as telas (DisableTaskWindow e EnableTaskWindow), o formulário de 'progresso' pode não aparecer e, se aparecer, o usuário pode clicar em outro ponto da tela e fazer com que o formulário de 'progresso' fique atrás do form principal.
a função do repaint está descrita no comentário do código: redesenha a tela.
25/06/2011
Anderson Nunes
Clique aqui para fazer login e interagir na Comunidade :)