MDICHILD SEMPRE VISÍVEL
24/07/2008
0
Bom, posto este tópico para achar a solução de um problema que venho tendo em uma aplicação...
Possuo um sistema baseado em um MDIForm e MDIChild´s...
Tenho que implementar a seguinte funcionalidade: Terei um novo botão na barra de títulos que servirá para tornar o form sempre visível [b:21a08cfd35]EM RELAÇÃO AO DEMAIS MDICHILD[/b:21a08cfd35].
Já tentei várioas maneiras: não posso usar fsOntayTop, pois isso o desvincula do MDIForm, já tentei utilizar a função setwindowpos, mas como isso deve ser feito no formulário já em execução não esta funcionando...
Bom, espero que tenha sido claro, quero torna um MDIChild sempre visível [b:21a08cfd35]EM RELAÇÃO A SEUS ´IRMÃOS´[/b:21a08cfd35].
Desde já, muito obrigado pela atenção!!
Rhuan Pablo
Posts
24/07/2008
Luiz Henrique
Visivel , vc quer dizer focado e em primeiro plano, aos demais ja instanciados ?
24/07/2008
Rhuan Pablo
24/07/2008
Brunodsr
Coloca o formStyle dele como FsNormal e depois dá um show nele. Simples assim.
Agora complicando: hehehe
Se vc quiser que ele fique sempre na frente dos demais, simulando um comportamento modal, mas permitindo navegar entre as telas, implementa a função abaixo:
Procedure para deixar o form sempre na ativa
procedure ChildModal(hChildHandle: THandle); begin while IsWindow(hChildHandle) do begin sleep(1); Application.ProcessMessages; end; end;
Usando a procedure:
Var Hdl: THandle; Child: TForm; Begin Child := TSeuFormChild.Create(self); Hdl := Child.Handle; ChildModal(Hdl); end;
Falows
24/07/2008
Rhuan Pablo
Primeiramente meu form tem que ser obrigatóriamente MDIChild...
Segundo: Eu não posso fazer isso no create do form, essa operação deve ser feita depois dele instanciado e em showing...
Terceiro: Esse método funcionaria, mas não seria uma solução muito ´correta´, digamos assim...
Bom, de qualquer maneira muito obrigado!
Att
24/07/2008
Brunodsr
Mas vamos lá: Pq o teu for tem que ser obrigatoriamente child?? E a segunda solução é tranquila brother. ZERO efeito colateral.
Mas posta aí..
25/07/2008
Luiz Henrique
Uso uma funcao para abrir meus MDIChild nos projetos, é bem dinamica, se nao servir totalmente, penso que pode ser por ai:
//Ela busca para ver se o Form ja nao esta instanciado
//Cria ou coloca-o em primeiro plano...
//Retornando a instancia do mesmo...
Function TfmPrincipal.MyShowForm(FormClass: TFormClass): TForm;
var
I: Integer;
begin
Result := nil;
for I := 0 to Screen.FormCount - 1 do begin
if Screen.Forms[I] is FormClass then begin
Result := Screen.Forms[i];
end;
end;
if result = nil then begin
Application.CreateForm(FormClass,result);
end
else begin
if (result.WindowState = wsMinimized) then
result.WindowState := wsNormal;
result.Show;
end;
end;
//...na opcao de escolha(menu, button...metodo que for)...
//Ilustrando por uma action por exemplo:
procedure TfmPrincipal.actVendedorExecute(Sender: TObject);
begin
fmCadVendedor:= (MyShowForm(TfmCadVendedor) as TfmCadVendedor);
end;
Espero que te ajude
T+
Clique aqui para fazer login e interagir na Comunidade :)