Artigo: 184297 - Última revisão: quinta-feira, 15 de Julho de 2004 - Revisão: 2.3

Como criar um formulário que sempre permanece visível

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Microsoft Visual Basic não oferece uma propriedade ou método para criar um formulário de janela superior. Este comportamento pode ser alcançado utilizando a API do Win32 SetWindowPos.

Este artigo demonstra como definir um formulário como a janela superior utilizando a API do Win32 SetWindowPos.

Mais Informação

O código de exemplo seguinte utiliza uma função chamada SetTopMostWindow. A função SetTopMostWindow define uma janela como uma janela superior ou como uma janela normal, com base em dois parâmetros, hwnd e Topmost, lhe são transmitidos.

O parâmetro hwnd Especifica o identificador da janela ser definido como superior ou como normal.

O parâmetro mais elevado Especifica se pretende definir o formulário como superior ou como normal. Se o valor for true, a função define sempre na parte superior do formulário. Se o valor for false, a função define a forma como uma janela normal.

Exemplo passo a passo

  1. Inicie um novo projecto EXE padrão. É criado o Form1 por predefinição.
  2. Adicione dois botões de comando (Command1 e Command2) ao Form1.
  3. Defina a propriedade legenda do Command1 para "Sempre na parte superior."
  4. Defina a propriedade legenda do Command2 para "Normal".
  5. Coloque o código seguinte na secção de declaração de Form1:
          Option Explicit
    
          Private Sub Command1_Click()
             Dim lR As Long
             lR = SetTopMostWindow(Form1.hwnd, True)
          End Sub
    
          Private Sub Command2_Click()
             Dim lR As Long
             lR = SetTopMostWindow(Form1.hwnd, False)
          End Sub
    
    					
  6. No menu projecto, clique em Add Module, para adicionar um novo módulo ao projecto.
  7. Adicione o seguinte código ao módulo novo:
          Option Explicit
          Public Const SWP_NOMOVE = 2
          Public Const SWP_NOSIZE = 1
          Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
          Public Const HWND_TOPMOST = -1
          Public Const HWND_NOTOPMOST = -2
    
          Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos"  _
                (ByVal hwnd As Long, _
                ByVal hWndInsertAfter As Long, _
                ByVal x As Long, _
                ByVal y As Long, _
                ByVal cx As Long, _
                ByVal cy As Long, _
                ByVal wFlags As Long  ) As Long
    
          Public Function SetTopMostWindow(hwnd As Long, Topmost As Boolean) _
             As Long
    
             If Topmost = True Then 'Make the window topmost
                SetTopMostWindow = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, _
                   0, FLAGS)
             Else
                SetTopMostWindow = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, _
                   0, 0,FLAGS)
                SetTopMostWindow = False
             End If
          End Function
    
    					

    NOTA: No código de exemplo acima, um sublinhado (_) no final de uma linha é utilizado como um carácter de continuação de linha.

  8. Prima F5 para executar o projecto.
Se clicar no botão de comando "Sempre na parte superior", o formulário torna-se a janela superior e permanece na parte superior de todas as janelas; não pode mover qualquer outra janela por cima. Se clicar no botão "Normal", o formulário funciona normalmente (pode mover outras janelas por cima).

Referências

Para obter informações adicionais, consulte os seguintes artigos na base de dados de conhecimento da Microsoft:
84251  (http://support.microsoft.com/kb/84251/EN-US/ ) Como criar uma janela flutuante ou superior no Visual Basic

150233  (http://support.microsoft.com/kb/150233/EN-US/ ) Erro: Não manter janela superior visível no ambiente de estrutura
Ver também o projecto de exemplo, CallDlls, localizado na pasta VB\Samples\CallDlls. O exemplo CallDlls tem código para definir um formulário como a janela superior e é ilustrado no exemplo.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palavras-chave: 
kbmt kbhowto KB184297 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 184297  (http://support.microsoft.com/kb/184297/en-us/ )