Travar form no evento on click

Delphi

05/03/2008

Pessoal eu tenho uma form com vários botões com vários botões TBitBtn.
Eu gostaria que no momento do clique em um dos botões não fosse permitido mais nada até que eu concluisse a rotina daquele botão.
No evento onclick do botão coloco nome_formulario.enabled:=false;
Mesmo assim se eu clicar rápido em outro botão ele continua habilitado.
Existe alguma maneira de desabilitar toda form no momento do click ?

Obrigado pela atenção


Clistenes

Clistenes

Curtidas 0

Respostas

Onjahyr

Onjahyr

05/03/2008

Duvido que funcione se você estiver fazendo correto!!!

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Enabled := False;
  Application.ProcessMessages;

  Try
    {comandos desejados}

  Finally
   Form1.Enabled := True;
  end;
end;


Se você passar logo o prieiro comando não tem como poder clicar em outra coisa e funcionar, a não ser que esteja fazendo algum processo antes de executar o comando para desabilitar.... Deixe para colocar os outros processos abaixo do [b:149c118f02]Try[/b:149c118f02]...

Blz.


GOSTEI 0
Clistenes

Clistenes

05/03/2008

Eu fiz o teste com segue o exemplo abaixo, e se durante o momento que estiver desabilitado eu clicar no botão cancelar, mesmo desabilitado o form, assim que acabar o tempo de 2 segundo ele mostra a mensagem BOTÃO CLICADO.
O que eu gostaria é que no momento que estivesse desabilitado não fosse aceito nada.



procedure TForm2.BtConfirmarClick(Sender: TObject);
begin
Form2.Enabled := False;
Application.ProcessMessages;
Try
form2.Caption:=´desabilitado´; sleep(2000);
Finally
Form2.Enabled := True;
form2.Caption:=´´;
end;
end;

procedure TForm2.BtCancelarClick(Sender: TObject);
begin
SHOWMESSAGE(´BOTÃO CLICADO´);
end;


GOSTEI 0
Onjahyr

Onjahyr

05/03/2008

Bom, eu tenho certeza que sso não está correto, porém.... Como não estou de mudança, não estou com o Delphi aqui... Mas, uma outra possibilidade seria vc criar uma variável e fazer esta verificação:

private
Fechado : Boolean;

procedure...
begin
Fechado := True;
// o seu código acima

// No Finnaly você acrescenta:
Fechado := False;
end;

No evento clique do outro botão (B):

procedure ...
begin
if Fechado then
Exit;

//Resto do código
end;


Não tô com o Delphi aqui para verificar o pq do Form1.Enable ainda funcionar, então usa isso temporário que não vai fazer nada e, de fato, vai funcionar...

Deixe uma mensagem se funcionar para saber que foi resolvido!


Blz


GOSTEI 0
Clistenes

Clistenes

05/03/2008

Esse exemplo não atende, isso porque eu teria que verificar todos dos botões da form.
Se você criar um Tedit e dois botões e clicar em um botão no evento onclick efetuar o procedimento abaixo e durante esses nove segundos digitar algo sobre a edit, irá verificar que ao fim dos nove segundos a edit terá o conteúdo desejado.
O que eu preciso é que durante esses nove segundo tudo que seja digitado ou clicado sobre a form não seja considerado ao final dos 9 segundos.



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;


GOSTEI 0
POSTAR