Form Ativo da Aplicação
25/01/2006
0
Gostaria de saber se existe alguma forma de encontrar pela classe ´Application´ qual é o último form ou o form ativo da minha aplicação? E que estou criando um componente de mensagens mas não quero passar como parâmetro o objeto pai a criar gostaria apenas de mandar a mensagem e algumas opções. Hoje ele cria mas quando estou clicando em um outro ponto da tela ou troco de aplicação (ALT+TAB) o meu form perde o foco, gostaria que sempre que a aplicação estivesse ativa ou qdo fosse selecionada o form sempre seria o primeiro e sempre seria apresentado. A chamada da minha função seria algo assim:
mensagem(´Minha Mensagem´, ´Meu Título´, [btSim, btNao])
P.S.: Já vi que existe no Application algo como ´Components´ poderia verificar por aí testando com ´is TForm´ e usando ´as TForm´ para pegar a propriedade ´Visible´ e ´Enabled´?
Muito Obrigado clube!!
Edvilson.chaves
Posts
25/01/2006
Michael
Use as propriedades [b:ffdd24dd8d]ActiveForm [/b:ffdd24dd8d] e/ou [b:ffdd24dd8d]ActiveCustomForm[/b:ffdd24dd8d], do objeto [b:ffdd24dd8d]TScreen [/b:ffdd24dd8d]para saber qual formulário tem foco na sua aplicação.
Lembre-se que o Delphi inicializa automaticamente uma variável global chamada [b:ffdd24dd8d]Screen[/b:ffdd24dd8d] do tipo TScreen. Vc portanto não precisa criá-la.
Screen.ActiveForm
Não existe no objeto [b:ffdd24dd8d]Application [/b:ffdd24dd8d] uma propriedade chamada [b:ffdd24dd8d]Components[/b:ffdd24dd8d]. Vc deve estar confundindo com a classe [b:ffdd24dd8d]TForm[/b:ffdd24dd8d], que, por descender de [b:ffdd24dd8d]TComponent[/b:ffdd24dd8d], disponibiliza este campo. Para simular o que vc mencionou, novamente através de [b:ffdd24dd8d]Screen[/b:ffdd24dd8d], use as propriedades [b:ffdd24dd8d]Forms [/b:ffdd24dd8d]e [b:ffdd24dd8d]FormCount[/b:ffdd24dd8d], que dão acesso, respectivamente, à lista de forms abertos na aplicação e à quantidade destes forms.
[]´s
25/01/2006
Edvilson.chaves
Sou eu novamente fiz como você me pediu utilizando Screen.ActiveForm só que acho que pelo fato de eu estar usando CLX não deve estar funcionando! Ocorre o mesmo erro esse é o código simples de algo que estou aplicando mas não está funcionando vê o que c me diz.
Valeu. T+.
unit Unit1;
...
...
...
procedure MENSAGEM(const pMensagem: String);
implementation
uses Unit2;
{$R *.xfm}
procedure MENSAGEM(const pMensagem: String);
var
lForm2: TForm2;
begin
lForm2 := TForm2.Create(Screen.ActiveForm);
try
lForm2.Label1.Caption := pMensagem;
lForm2.ShowModal;
finally
FreeAndNil(lForm2);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MENSAGEM(´OLA MUNDO´);
end;
end.
O Resultado é que quando fico alternando entre aplicações ALT+TAB o Form2 desaparece e só reaparece quando clico sobre o Form1.
25/01/2006
Michael
Vc está fazendo uma pequena confusão. O parâmetro [b:0ec36766cd]Owner[/b:0ec36766cd], informado no construtor [b:0ec36766cd]Create[/b:0ec36766cd], indica qual componente será responsável por liberar a instância sendo criada da memória quando ele for destruído. Então, não vai funcionar como vc espera.
Outro problema, quando se informa um [b:0ec36766cd]Owner [/b:0ec36766cd]diferente de [b:0ec36766cd]nil[/b:0ec36766cd], não se deve liberar o objeto explicitamente, deixando essa tarefa para o seu proprietário. Código como este introduz desnecessariamente riscos na aplicação de memory leaks, quedas de performance e bugs difíceis de serem encontrados.
Explique melhor o que vc gostaria de fazer para que os outros colegas do fórum e eu possamos ajudá-lo melhor.
[]´s
Clique aqui para fazer login e interagir na Comunidade :)