GARANTIR DESCONTO

Fórum Desabilitar uma Form #354941

06/03/2008

0

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

Responder

Posts

07/03/2008

Bueno.box

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;


Responder

Gostei + 0

07/03/2008

Clistenes

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


Responder

Gostei + 0

07/03/2008

Onjahyr

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

Não suje o fórum!!!


Responder

Gostei + 0

09/03/2008

Marco Salles

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.


Responder

Gostei + 0

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

Aceitar