Desabilitar uma Form

Delphi

06/03/2008

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;


Clistenes

Clistenes

Curtidas 0

Respostas

Bueno.box

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;


GOSTEI 0
Clistenes

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


GOSTEI 0
Onjahyr

Onjahyr

06/03/2008

Amigo, você tá criando vários tópicos com uma mesma pergunta...

Não suje o fórum!!!


GOSTEI 0
Marco Salles

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
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
POSTAR