Form Ativo da Aplicação

25/01/2006

0

Bom Dia!!!

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

Edvilson.chaves

Responder

Posts

25/01/2006

Michael

Olá!

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


Responder

25/01/2006

Edvilson.chaves

Olá!!!

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.


Responder

25/01/2006

Michael

Colega,

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


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar