Tem como travar (a aplicação) quando uma tarefa (procedure ou função) tiver em execução
Tem como eu "travar" (não deixar o usuário clickar em outra coisa [ex: outro botão] quando um processo tiver em execução )
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ê
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
Curtidas 0
Respostas
Joel Rodrigues
31/08/2012
No início do procedimento, você pode desabilitar os componentes da tela (usando a propriedade Enabled) e ao finalizar a execução, habilitá-los novamente.
GOSTEI 0
Marco Salles
31/08/2012
Mas quais são as Açoes que vc quer desabilitar
O Actionmanager pode ser utilizado para esas e outras tarefas
O Actionmanager pode ser utilizado para esas e outras tarefas
GOSTEI 0
Ewerton Rodrigues
31/08/2012
No início do procedimento, você pode desabilitar os componentes da tela (usando a propriedade Enabled) e ao finalizar a execução, habilitá-los novamente.
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
Ewerton Rodrigues
31/08/2012
Mas quais são as Açoes que vc quer desabilitar
O Actionmanager pode ser utilizado para esas e outras tarefas
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
Actionmanager
é um componente vou até dá uma pesquisada agora neleValeu
GOSTEI 0
Ewerton Rodrigues
31/08/2012
Mas quais são as Açoes que vc quer desabilitar
O Actionmanager pode ser utilizado para esas e outras tarefas
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
Joel Rodrigues
31/08/2012
Já experimentou desabilitar o form todo?
GOSTEI 0
Marco Salles
31/08/2012
Bem vc pode fazer várias coisas . mas conceitualmente esta muito estranho sua dúvida
Vc diz :
Por padrão isto ja ocorre , pois os processos ocorrem no mesmo THread
Jeja um exemplo simples
Agora faça o mesmo teste incluindo a seguinte intrução
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
[]sds
Vc diz :
Tem como eu "travar" (não deixar o usuário clickar em outra coisa [ex: outro botão] quando um processo tiver em execução )
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
Ewerton Rodrigues
31/08/2012
Bem vc pode fazer várias coisas . mas conceitualmente esta muito estranho sua dúvida
Vc diz :
Por padrão isto ja ocorre , pois os processos ocorrem no mesmo THread
Jeja um exemplo simples
Agora faça o mesmo teste incluindo a seguinte intrução
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
[]sds
Vc diz :
Tem como eu "travar" (não deixar o usuário clickar em outra coisa [ex: outro botão] quando um processo tiver em execução )
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
Ewerton Rodrigues
31/08/2012
Já experimentou desabilitar o form todo?
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
Ewerton Rodrigues
31/08/2012
Valeu por me ajudarem
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
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