Travar form no evento on click
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
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
Curtidas 0
Respostas
Onjahyr
05/03/2008
Duvido que funcione se você estiver fazendo correto!!!
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.
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
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;
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
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
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
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;
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