Dando loading enquanto ClientDataset carrega
Bom, gostaria de por uma tela de "PROCURANDO" enquanto abro o ClientDataSet .
Obs: pensei em threads ...
Obs: pensei em threads ...
Ronaldo Lanhellas
Curtidas 0
Melhor post
José
05/05/2013
Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 1
Mais Respostas
Nigro
16/06/2011
Não precisa.
Faça um form simples, apenas com um GIF animado, por exemplo, aquele da lupa, o próprio banco de dados vai te dar um delay, assim.
Supondo que esse form se chame "TelaABertura"
. . . . TelaAbertura := TTelaAbertura.Create(Self); TelaAbertura.ShowModal; ClientDataSet.Open; FreeAndNil(TelaAbertura); . . . . .
GOSTEI 0
Ronaldo Lanhellas
16/06/2011
já tentei isso e não funcionou, ele chama a tela de loading, ex: TFrmLoading, porém fica nela e não sai mesmo depois de muitooo tempo.
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).
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).
GOSTEI 0
Emerson Nascimento
16/06/2011
tente 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
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;
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;
GOSTEI 0
Ronaldo Lanhellas
16/06/2011
Funcionando perfeitamente amigo, era disso que precisava, mais se você pudesse explicar algumas coisas ;
1 - Porque utilizar o DisableTaskWindow e EnableTaskWindow
2 - QUal função do Repaint
1 - Porque utilizar o DisableTaskWindow e EnableTaskWindow
2 - QUal função do Repaint
GOSTEI 0
Emerson Nascimento
16/06/2011
Funcionando perfeitamente amigo, era disso que precisava, mais se você pudesse explicar algumas coisas ;
1 - Porque utilizar o DisableTaskWindow e EnableTaskWindow
2 - QUal função do Repaint
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.
GOSTEI 0
Anderson Nunes
16/06/2011
Com thread seria mais simples e mais facil, alguem sabe por que não deveria usar thread neste caso? Eu achei a dica do colega muito grande e complicada para a simplicidade da tarefa.
GOSTEI 0