GARANTIR DESCONTO

Fórum Tem como travar (a aplicação) quando uma tarefa (procedure ou função) tiver em execução #422966

31/08/2012

0

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ê
Ewerton Rodrigues

Ewerton Rodrigues

Responder

Posts

31/08/2012

Joel Rodrigues

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.
Responder

Gostei + 0

31/08/2012

Marco Salles

Mas quais são as Açoes que vc quer desabilitar

O Actionmanager pode ser utilizado para esas e outras tarefas
Responder

Gostei + 0

31/08/2012

Ewerton Rodrigues

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
Responder

Gostei + 0

31/08/2012

Ewerton Rodrigues

Mas quais são as Açoes que vc quer desabilitar

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 nele

Valeu
Responder

Gostei + 0

31/08/2012

Ewerton Rodrigues

Mas quais são as Açoes que vc quer desabilitar

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
Responder

Gostei + 0

31/08/2012

Joel Rodrigues

Já experimentou desabilitar o form todo?
Responder

Gostei + 0

31/08/2012

Marco Salles

Bem vc pode fazer várias coisas . mas conceitualmente esta muito estranho sua dúvida

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


Responder

Gostei + 0

31/08/2012

Ewerton Rodrigues

Bem vc pode fazer várias coisas . mas conceitualmente esta muito estranho sua dúvida

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


Responder

Gostei + 0

31/08/2012

Ewerton Rodrigues

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
Responder

Gostei + 0

31/08/2012

Ewerton Rodrigues

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar