Fórum Tem como travar (a aplicação) quando uma tarefa (procedure ou função) tiver em execução #422966
31/08/2012
0
Exemplo o usuário clickar em um botão e depois clickar em outro botão que usa talvez um recurso que o primeiro botão está usando (ai vai dá erro ou ...)
obs.: escrevendo este post eu pensei aqui em colocar o formulário todo em ENABLE := false;
será que isto seria uma solução viável (certo) seria a melhor maneira de fazer (travar) a aplicação
grato desde já pela ajuda de você
Ewerton Rodrigues
Curtir tópico
+ 0Posts
31/08/2012
Joel Rodrigues
Gostei + 0
31/08/2012
Marco Salles
O Actionmanager pode ser utilizado para esas e outras tarefas
Gostei + 0
31/08/2012
Ewerton Rodrigues
Mas será que colocando o Form Todo com a propriedade ENABLED := false dá problema (erro)
obs.: eu não utilizo informações do FORM este procedimento que eu executo ele tudo de banco de dados
Gostei + 0
31/08/2012
Ewerton Rodrigues
O Actionmanager pode ser utilizado para esas e outras tarefas
O usuário não clickar em mais nada na aplicação clickar em nenhum outro botão
MAS como funciona este
Valeu
Gostei + 0
31/08/2012
Ewerton Rodrigues
O Actionmanager pode ser utilizado para esas e outras tarefas
Ahh já usei este componente o nome que não me era familiar
Mas não vejo aplicação dele no meo caso eu quero é desabilitar as outras funções da aplicação
Gostei + 0
31/08/2012
Joel Rodrigues
Gostei + 0
31/08/2012
Marco Salles
Vc diz :
Por padrão isto ja ocorre , pois os processos ocorrem no mesmo THread
Jeja um exemplo simples
var
v:Integer;
//clicque aqui e imediatamente clique no segundo button
procedure TForm2.Button2Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to 100 do
begin
v:=i;
Sleep(25);
end;
end;
//este evento so sera disparad quando o processo do primeiro termnar
//ele ira utilizar o valor de V no final do Processo e não no momento em que
//vc clicar no Button
procedure TForm2.Button3Click(Sender: TObject);
begin
self.Caption:=inttostr(v);
v:=0;
end;
Agora faça o mesmo teste incluindo a seguinte intrução
procedure TForm2.Button2Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to 100 do
begin
v:=i;
Sleep(25);
Application.ProcessMessages; // no momento exato que vc aplicar no segundo button ele processa o valor de V
end;
end; bem , o que quero dizer com isto , que existe muita formas de se resolver . Porém o que deve ser entendido que os
processos ocorrem não paralelamente (ha não ser que se faça isto) , mas sim em fila e de modo geral um processo
so começa no fim do outro
Ficar criando artificio métodos e rotinas resolve porém ha meu ver não é uma solução POBP . Ja que vc pode obter
resultados melhores com mais Orientação .
Olha so o exemplo anterior utilizando esta idpeia de Bloqueio
procedure TForm2.Button2Click(Sender: TObject);
var
I: Integer;
begin
//codigo para Bloquear
self.enabled:=false;
try
for I := 0 to 100 do
begin
v:=i;
Sleep(25);
end;
end;
finally
codigo para desbloquear
self.enabled:=true
[]sds
Gostei + 0
31/08/2012
Ewerton Rodrigues
Vc diz :
Por padrão isto ja ocorre , pois os processos ocorrem no mesmo THread
Jeja um exemplo simples
var
v:Integer;
//clicque aqui e imediatamente clique no segundo button
procedure TForm2.Button2Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to 100 do
begin
v:=i;
Sleep(25);
end;
end;
//este evento so sera disparad quando o processo do primeiro termnar
//ele ira utilizar o valor de V no final do Processo e não no momento em que
//vc clicar no Button
procedure TForm2.Button3Click(Sender: TObject);
begin
self.Caption:=inttostr(v);
v:=0;
end;
Agora faça o mesmo teste incluindo a seguinte intrução
procedure TForm2.Button2Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to 100 do
begin
v:=i;
Sleep(25);
Application.ProcessMessages; // no momento exato que vc aplicar no segundo button ele processa o valor de V
end;
end; bem , o que quero dizer com isto , que existe muita formas de se resolver . Porém o que deve ser entendido que os
processos ocorrem não paralelamente (ha não ser que se faça isto) , mas sim em fila e de modo geral um processo
so começa no fim do outro
Ficar criando artificio métodos e rotinas resolve porém ha meu ver não é uma solução POBP . Ja que vc pode obter
resultados melhores com mais Orientação .
Olha so o exemplo anterior utilizando esta idpeia de Bloqueio
procedure TForm2.Button2Click(Sender: TObject);
var
I: Integer;
begin
//codigo para Bloquear
self.enabled:=false;
try
for I := 0 to 100 do
begin
v:=i;
Sleep(25);
end;
end;
finally
codigo para desbloquear
self.enabled:=true
[]sds
o que você to de acordo MAS menos uma coisa "que não dá para executar duas coisas ao mesmo tempo" sendo que eu PELO menos consigo eu cliko em um botão que cham duas outras rotina (coloco o mouse como está em processamento) e se eu clickar em um botão dá um close na minha QUERY ou tabela dá erro nas minhas outras duas rotinas Não se é padrão mas pelo menos no programa que estou modificando dá isto
Detalhes
Windows 7 32 bits
Borland 2006 a aplicação que eu estou mexendo
e alguns componentes de terceiros
Gostei + 0
31/08/2012
Ewerton Rodrigues
Na verdade eu coloquei um Panel e desabilitei ele MAS mesmo assim ainda func o click não entendi vou tentar agora
desabilitar o FORM mesmo como eu tinha pensado
depois posto o resultado
Gostei + 0
31/08/2012
Ewerton Rodrigues
O resultado foi que com panel eu consegui alguns componentes (pois nem todos estavam dentro do panel) os outros (como eram poucos) eu desabilitei um a um MAS funcionou legal
Valeu mais um vez
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)