Ir para conteúdo
Fórum Script Brasil
  • 0

[DLL] Desabilitar Forms


Frega

Pergunta

boa tarde pessoal tenho uma duvida rapida... esto com um programa em MDI, eventualmente em um e outro form tenho que deixar ele focado, então usei o comando...

var i : integer;

begin

for I := 0 to Screen.FormCount - 1 do

Screen.Forms.Enabled:=false;

mas estou com 2 problemas.

1. tenho que fazer que o form que executa essa açao fique ativa... tentei logo abaixo do Screen.Forms.enabled:=false colocar Enabled:=true e Screen.activeform.enabled:=true mas não funcionou...

2. essa procedure teria que ficar em um DLL, tentei por no meu dll mas ele não desativa os forms, como posso fazer para funcionar a partir do DLL?

DLL:

procedure FormsDisable;stdcall;

var i : integer;

begin

for I := 0 to Screen.FormCount - 1 do

Screen.Forms.Enabled:=false;

Screen.ActiveForm.enabled:=true;

end;

exports FormsDisable, ....

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Frega, talvez você não tenha observado, mas Screen.ActiveForm, não se refere a janela filha (fsMDIChild) ativa, mas sim ao form principal (fsMDIForm)

Na classe TForm, há a propriedade MDIChildren que é a lista das janelas filhas da sua aplicação MDI. Se você usar ela ao invés da propriedade Forms, não estará desabilitando seu form principal junto com os filhos.

A partir do que comentei, o procedimento a seguir desabilita todos os forms filhos de uma aplicação MDI

procedure DesabilitaMDIChilds;
var
  I : integer;
begin
  for I := 0 to Screen.ActiveForm.MDIChildCount - 1 do
    Screen.ActiveForm.MDIChildren[i].Enabled := False;
end;
Para habilitar e dar o foco a um form child em específico, basta que o habilitemos e usemos a mensagem WM_MDIACTIVATE conforme indicado no help Win32 API: enviar mensagem para o handle da janela cliente MDI (ClientHandle) - opção mais simples (há outra, ver help citado). Neste caso, podemos usar a propriedade Forms, MDIChildren ou mesmo Self - conforme a situação:
...
  DesabilitaMDIChilds;
  Screen.Forms[3].Enabled := True;
  SendMessage(Screen.ActiveForm.ClientHandle, WM_MDIACTIVATE, Screen.Forms[3].Handle, 0);
...
ou
...
  DesabilitaMDIChilds;
  Screen.ActiveForm.MDIChildren[2].Enabled := True;
  SendMessage(Screen.ActiveForm.ClientHandle, WM_MDIACTIVATE, ActiveForm.MDIChildren[2].Handle, 0);
...
ou
...
  DesabilitaMDIChilds;
  Self.Enabled := True;
  SendMessage(Screen.ActiveForm.ClientHandle, WM_MDIACTIVATE, Self.Handle, 0);
...

Veja se era isto.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...