Desabilitar uma Form
Pessoal eu preciso desabilitar uma form enquanto estiver processando algo, ignorando qualquer comando que seja dado no momento do processamento, como no exemplo abaixo, ocorre que após o processamento todos os comandos dados aparecem normalmente.
Durante os 9 segundo que a form está desabilitada se eu clicar no botão B, após esse tempo ele mostra Botão clicado.
Vocês sabem como posso ignorar qualquer click efetuado na form enquanto ela estiver como enabled = false ?
procedure TForm2.AClick(Sender: TObject);
begin
Form2.Enabled := False;
Application.ProcessMessages;
Try
form2.Caption:=´desabilitado´;
sleep(9000);
Finally
Form2.Enabled := True;
form2.Caption:=´´;
end;
end;
procedure TForm2.BClick(Sender: TObject);
begin
SHOWMESSAGE(´BOTÃO CLICADO´);
end;
Durante os 9 segundo que a form está desabilitada se eu clicar no botão B, após esse tempo ele mostra Botão clicado.
Vocês sabem como posso ignorar qualquer click efetuado na form enquanto ela estiver como enabled = false ?
procedure TForm2.AClick(Sender: TObject);
begin
Form2.Enabled := False;
Application.ProcessMessages;
Try
form2.Caption:=´desabilitado´;
sleep(9000);
Finally
Form2.Enabled := True;
form2.Caption:=´´;
end;
end;
procedure TForm2.BClick(Sender: TObject);
begin
SHOWMESSAGE(´BOTÃO CLICADO´);
end;
Clistenes
Curtidas 0
Respostas
Bueno.box
06/03/2008
Ola amigo!
declare na seção public do Form a função BlockInput e desative os periféricos com o parâmetro true e ative com false:
exemplo
type
...
Private
...
Public
function BlockInput(fBlockIt:boolean):boolean;StdCall; External ´user32.DLL´;
end;
procedure TForm2.AClick(Sender: TObject);
begin
Form2.Enabled := False;
Try
Application.ProcessMessages;
BlockInput(true);
{Faz os seus processos ....}
finally
BlockInput(false);
end;
end;
declare na seção public do Form a função BlockInput e desative os periféricos com o parâmetro true e ative com false:
exemplo
type
...
Private
...
Public
function BlockInput(fBlockIt:boolean):boolean;StdCall; External ´user32.DLL´;
end;
procedure TForm2.AClick(Sender: TObject);
begin
Form2.Enabled := False;
Try
Application.ProcessMessages;
BlockInput(true);
{Faz os seus processos ....}
finally
BlockInput(false);
end;
end;
GOSTEI 0
Clistenes
06/03/2008
Essa função eu já utilizo em alguns casos, o problema e que o processo que eu pretendo demora alguns minutos, por isso, não posso desabitar o teclado para o cliente, isso porque ele pode querer fazer outra coisa enquanto espera terminar. Eu só gostaria de desabilitar a Form de qualquer comando digitado, ou seja, quando eu inicio o processo saber que ao final dele não houve nada digitado ou clicado para aquela form.
Resumindo enquanto estiver disabled a form não interpreta nada, assim como é um botão quando colocamos como disabled.
Obrigado
Resumindo enquanto estiver disabled a form não interpreta nada, assim como é um botão quando colocamos como disabled.
Obrigado
GOSTEI 0
Onjahyr
06/03/2008
Amigo, você tá criando vários tópicos com uma mesma pergunta...
Não suje o fórum!!!
Não suje o fórum!!!
GOSTEI 0
Marco Salles
06/03/2008
vc pode fazer isto atraves de TThread .. Apesar da filosofia das TThread
ser exatamente o contrário (isto é habilitar os controles dos forms enquanto se processa algo demorado em segundo plano )
Veja como é que fica
//crie a classe
este é apenas um esboço . Uma idéia ...Tem Outras coisas envolvidas , como por exemplo a utilização ou não do método Synchronize ..
Para este exemplo simples colocado por voce usando o Sleep , esta arquitetura funciona perfeitamente . Porém eu não tenho nen idéia de qual é este processo ´demorado´ citado por voce ... Espero que voce consiga adaptar este codigo a sua necessidade .
espero ter sido util . Boa sorte.
ser exatamente o contrário (isto é habilitar os controles dos forms enquanto se processa algo demorado em segundo plano )
Veja como é que fica
//crie a classe
MyThread = class (TThread)
protected
procedure execute;override;
end;
procedure MyThread.execute;
var
i:Integer;
begin
form1.Caption:=´desabilitado´;
form1.Enabled:=false;
Sleep(10000); .... Aqui o seu Processamento Demorado
form1.Enabled:=True;
form1.Caption:=´Habilitado´;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MYThread.Create(false);
end;
este é apenas um esboço . Uma idéia ...Tem Outras coisas envolvidas , como por exemplo a utilização ou não do método Synchronize ..
Para este exemplo simples colocado por voce usando o Sleep , esta arquitetura funciona perfeitamente . Porém eu não tenho nen idéia de qual é este processo ´demorado´ citado por voce ... Espero que voce consiga adaptar este codigo a sua necessidade .
espero ter sido util . Boa sorte.
GOSTEI 0