Propriedade Visible no FormShow não funciona

12/01/2006

Bom dia a todos....

estou com um problema um tanto quanto estranho. Tenho um PageControl com várias abas. Na aba ativa (Default) do PageControl existem alguns componentes que podem ou não ser mostrados, de acordo com a configuração do usuário. Esta verificação é realizada no FormShow, onde a propriedade Visible dos componentes é alterada.

O problema é que se o componente está visível e eu altero a propriedade para FALSE ele não desaparece e quando ele está invisível e mudo para TRUE ele continua invisível :(

O mais estranho é que se eu mudar de aba no PageControl e retornar a default os componentes assumem os valores que eu defini no FormShow.

Já testei usar o Refresh, Repaint, Invalidate, etc.... nada faz funcionar!

Alguém já viu algo parecido com isso???

Obrigado


Fabricio Lb

Respostas

12/01/2006

Marco Salles

Alguém já viu algo parecido com isso???


Sim , porque este evento , ao inciar o aplicativo ele ocorre ´antes´ da Criação efetiva do formulário

Várias Solucoes para isto , entre elas :

1)Voce repetir o que voce quer definir no evento onShow da aba no evento on show do formulário... Eu digo repetir

2)Outra solução é voce enviar uma mengame personalizada do windows . Isto introduz um atraso e ela sera elaborada depois que o manipulador de evento atual (Nocaso o formShow da Aba) tiver concluido sua execução....

Um Exemplo vale mais que mil palavras...

[b:a93c2382d4]Tente fazer um exemplo com um page contro e uma aba e tres Edits para entender o que estou dizendo[/b:a93c2382d4]

e defina

private
    procedure Desabitar(var Ms : Tmessage); message Wm_User;


procedure TForm1.TabSheet1Show(Sender: TObject);
begin
postMessage(handle,Wm_User,0,0);
end;


procedure TForm1.Desabitar(var Ms: Tmessage);
begin
edit1.Visible:=False;
end;


Boa sorte...


Responder Citar

12/01/2006

Fabricio Lb

Valeu Marco, deu certo....

peguei o seu exemplo e funcionou. Só que coloquei no FormShow do próprio formulário.


Valeu


Responder Citar