Fórum Cancelar fechamento do form Não deixar mudar o tamanho #320839

08/05/2006

0

1 - Preciso checar alguns valores no evento OnClose do form. Caso esses valores forem ´x´ devo cancelar o fechamento do form nesse mesmo evento. Dá pra fazer isso?

2 - Deixei o Form como maxmized e tirei o botao maximizar (para o usuario nao restaura-lo) quando clico duas vezes no form ele diminui e não volta mais. Alguem jah deve ter passado por isso, como proceder para que isso nao aconteça.

Obrigado pelas duas ..... :D


M@gnun

M@gnun

Responder

Posts

08/05/2006

Adriano Santos

Use o onCloseQuery pra isso, é mais fácil veja:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  A : Integer;

begin
  A := 0;
  CanClose := A = 0;
end;


É só passar um valor False para o CanClose;


Responder

Gostei + 0

08/05/2006

Paullsoftware

[quote:a77c522a0d=´m@gnun´]1 - Preciso checar alguns valores no evento OnClose do form. Caso esses valores forem ´x´ devo cancelar o fechamento do form nesse mesmo evento. Dá pra fazer isso?
[/quote:a77c522a0d]
nesse caso podemos usar o Evento OnQueryClose como nosso amigo Adriano mencionou. e para tratar e forma mais simples vamos a um exemplo prático:

var
Form1 : TForm1;
TudoCerto : Boolean;//Crie essa variavel de forma global na unit logo abaixo da variavel Form1 : TForm1


no OnCreate mudamos o valor da variável para False, uma vez que o seu form só vai ser usado para recerber determinados dados, certo?
então
TudoCerto : False;


agora no Evento OnQueryClose do seu form faça:
if Not TudoCerto then
 ShowMessage(´Valores Incorretos´);
CanClose := TudoCerto;

Nesse caso para poder fechar o form vc precisa mudá para True no evento que vc faz a checagem dos dados da tela por exemplo:
var
a,b,c:Integer;
a := 1;
b := 2;
c := A + B;
if C < 3 then
 TudoCerto := False;
Close;

[quote:a77c522a0d=´m@gnun´]
2 - Deixei o Form como maxmized e tirei o botao maximizar (para o usuario nao restaura-lo) quando clico duas vezes no form ele diminui e não volta mais. Alguem jah deve ter passado por isso, como proceder para que isso nao aconteça.
[/quote:a77c522a0d]
Quanto a isso eu aconselho a não usar a propriedade [b:a77c522a0d]WindowState=WsMaximized[/b:a77c522a0d]
é melhor vc definir qual será o tamanho real do seu form, tipo para trabalhar em telas de 800x600 vc faz assim no OnCreate do form:
(*Ajusta a largura atual da tela do usuário*)
//Width := Screen.Width; 
(*Ajusta a altura atual da tela do usuário*)
//Height:= Screen.Height;
Width := 780;
Height:= 580;


espero ter ajudado :wink:


Responder

Gostei + 0

08/05/2006

M@gnun

obrigado adriano santos e paullsoftware eu testei a dica do onclosequery e realmente o form nao foi fechado.

porem pro meu caso nao deu certo, pois eu tenho ´sempre´ que entrar no ovento onclose do form, e do jeito q vcs disseram, o evento nao eh disparado. Eu fiz uns testes aqui e vi q se no proprio evento onclose eu passar o parametro Action := caNone o form nao eh fechado e o evento eh disparado. Entao essa alternativa vai ser melhor no meu caso...

quanto a segunda pergunta:

paullsoftware quando vc disse


(*Ajusta a largura atual da tela do usuário*)
//Width := Screen.Width;
(*Ajusta a altura atual da tela do usuário*)
//Height:= Screen.Height;
Width := 780;
Height:= 580;


é pra colocar o // antes de
width := Screen... e heigh := Screen...
???
valeu...


Responder

Gostei + 0

08/05/2006

Adriano Santos

[quote:795d10ecae=´m@gnun´]obrigado adriano santos e paullsoftware eu testei a dica do onclosequery e realmente o form nao foi fechado.

porem pro meu caso nao deu certo, pois eu tenho ´sempre´ que entrar no ovento onclose do form, e do jeito q vcs disseram, o evento nao eh disparado. Eu fiz uns testes aqui e vi q se no proprio evento onclose eu passar o parametro Action := caNone o form nao eh fechado e o evento eh disparado. Entao essa alternativa vai ser melhor no meu caso...

quanto a segunda pergunta:

paullsoftware quando vc disse


(*Ajusta a largura atual da tela do usuário*)
//Width := Screen.Width;
(*Ajusta a altura atual da tela do usuário*)
//Height:= Screen.Height;
Width := 780;
Height:= 580;


é pra colocar o // antes de
width := Screen... e heigh := Screen...
???
valeu...[/quote:795d10ecae]

Retire as áspas [b:795d10ecae]m@gnun[/b:795d10ecae], acho que foi erro de digitação.


Responder

Gostei + 0

09/05/2006

Paullsoftware

[quote:ef8488d219=´Adriano Santos´][quote:ef8488d219=´m@gnun´]obrigado adriano santos e paullsoftware eu testei a dica do onclosequery e realmente o form nao foi fechado.

porem pro meu caso nao deu certo, pois eu tenho ´sempre´ que entrar no ovento onclose do form, e do jeito q vcs disseram, o evento nao eh disparado. Eu fiz uns testes aqui e vi q se no proprio evento onclose eu passar o parametro Action := caNone o form nao eh fechado e o evento eh disparado. Entao essa alternativa vai ser melhor no meu caso...

quanto a segunda pergunta:

paullsoftware quando vc disse


(*Ajusta a largura atual da tela do usuário*)
//Width := Screen.Width;
(*Ajusta a altura atual da tela do usuário*)
//Height:= Screen.Height;
Width := 780;
Height:= 580;


é pra colocar o // antes de
width := Screen... e heigh := Screen...
???
valeu...[/quote:ef8488d219]

Retire as áspas [b:ef8488d219]m@gnun[/b:ef8488d219], acho que foi erro de digitação.[/quote:ef8488d219]
Não, não foi um erro de digitação...
Fazendo dessa forma:
Width := Screen.Width; 
Height:= Screen.Height; 

você ajusta o form a largura/altura da tela atual...

Fazendo dessa forma:
Width := 780; 
Height:= 580;

você ajusta a uma determinada largura da tela especificada por você, no exemplo mostrei para ajustar a telas configuradas como 800x600, deu pra entender agora?

[quote:ef8488d219=´m@gnun´]porem pro meu caso nao deu certo, pois eu tenho ´sempre´ que entrar no ovento onclose do form, e do jeito q vcs disseram, o evento nao eh disparado. Eu fiz uns testes aqui e vi q se no proprio evento onclose eu passar o parametro Action := caNone o form nao eh fechado e o evento eh disparado. Entao essa alternativa vai ser melhor no meu caso...[/quote:ef8488d219]
não entendi, porque não pode usar o OnQueryClose do form?


Responder

Gostei + 0

09/05/2006

Adriano Santos

Não, não foi um erro de digitação...


Puts, pode crer...Não foi erro de digitação, nem reparei que o código estava em ´duas´ versões, foi malz Paul.

não entendi, porque não pode usar o OnQueryClose do form?


Pode crer, porque não usar todo o algoritimo que você preparou para o onClose no onCloseQuery?


Responder

Gostei + 0

09/05/2006

Paullsoftware

[quote:6906ec6cc4=´Adriano Santos´]
Pode crer, porque não usar todo o algoritimo que você preparou para o onClose no onCloseQuery?[/quote:6906ec6cc4]
vamos esperar que ele tire a nossa dúvida :lol:


Responder

Gostei + 0

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

Aceitar