[vb6] Como manter um form sempre visível

WinAce_Boy

Power Member
Oi people!
Boas, estou a construir um programa e gostaria de saber como devo fazer/recorrer a/utilizar/ para manter uma Form sempre mas sempre mesmo por cima de tudo(todas as janelas, programas,etc..).
Espero anciosamente uma resposta..
Obrigada pela atenção.. ;)
Abraços.
 
Isso chama-se "On Top", e só precisas de saber algumas coisas de API para isso :) é muito simples, e como está no site acima, no programmingtalk, não digo mais na da :)
 
Boas,
Isso ajudou pessoal mas o Form fica por baixo do Gestor de Tarefas, e eu gostaria também de saber como pôr o meu Form por cima mesmo mesmo de tudo.. até do Gestor de Tarefas.
Obrigadão pela ajuda.. Aguardo resposta plz.
 
Tanto o teu form como o Gestor de Tarefas acabam por "lutar" pelo lugar de topo. Portanto, o resultado é eles comportarem-se como forms normais - o que tem o foco é o que fica por cima.
Para teres sempre o teu form no topo, podes pôr o código OnTop a correr num timer com um intervalo de, por exemplo, 1000. No entanto, não te aconselho a fazer isso porque às vezes gosto de ter o media player classic ou o task manager mesmo por cima de todos os programas, e ter um que se sobrepusesse a ambos seria, no mínimo, irritante ;) pelo menos dá ao utilizador a opção de escolher "SEMPRE no topo/no topo quando possível/normal" ;)

Cumprimentos [[[[[[[[]]]]]]]]
angelofwisdom
 
função para always on top

COLOCAR EM MODULO

Option Explicit

Private Declare Function SetWindowPos Lib "user32" (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

Function AlwaysOnTop(FrmID As Form, ByVal OnTop As Boolean) As Boolean
Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
If OnTop = True Then
AlwaysOnTop = SetWindowPos(FrmID.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
Else
AlwaysOnTop = SetWindowPos(FrmID.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
End If
End Function

Forma de uso:

AlwaysOnTop me,true ' mete a form actual sempre visivel
AlwaysOnTop me,true ' mete a form actual no modo normal
 
função para always on top

COLOCAR EM MODULO

Option Explicit

Private Declare Function SetWindowPos Lib "user32" (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

Function AlwaysOnTop(FrmID As Form, ByVal OnTop As Boolean) As Boolean
Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
If OnTop = True Then
AlwaysOnTop = SetWindowPos(FrmID.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
Else
AlwaysOnTop = SetWindowPos(FrmID.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
End If
End Function

Forma de uso:

AlwaysOnTop me,true ' mete a form actual sempre visivel
AlwaysOnTop me,true ' mete a form actual no modo normal
Considerando que o código acima está correcto (não o verifiquei, mas deve estar :P), terias de usar

AlwaysOnTop Me, True

num timer ;) será tão simples quanto isso.
Penso que o _Neo_ queria, na segunda parte, dizer "False" ;)

Cumps [[[[[[]]]]]]
angelofwisdom
 
Obrigadíssimo, puz a janela maximizada e sem border... LOL!!!
Não pude fazer nada para a fechar, tentei de tudo o que sabia.. Era mesmo isto que eu queria.. ;) Mais uma vez.. Obrigadão pessoal ;)
 
WinAce_Boy.... tu não fizeste o que eu acho que fizeste pois não? =| meteste a tua janela a ocupar o ecrã todo???????? Sabes o irritante que isso é, ou até que ponto isso é considerado, pelo menos, riskware?
Qual é o objectivo do programa, sff?
 
Depende do objectivo do teu programa.
Geralmente definindo, riskware é qualquer tipo de programa que tem atitudes para com o utilizador ou para com o computador que não são propriamente seguras. Por exemplo, um keylogger é malware porque captura as teclas escritas e grava-as, para depois mostrar a outra pessoa. Já um programa que, quando escreves "/morada" automaticamente apaga o que acabaste de escrever para escrever a tua morada, apesar de ser útil, é considerado riskware, porque captura as teclas. O que faz com elas é indiferente. É riskware e pronto.

Ao sobrepor-se a tudo o que está no computador, o teu programa é automaticamente catalogado de riskware. Mais uma vez pergunto, qual é o objectivo em fazer isso?
 
Hey, não te preocupes man, não sou dessas mentes preversas dude, só estou a experimentar o seguinte:

Quando o user abre um ficheiro o meu programa abre-se e fiqua sobreposto a tudo, depois equanto o user não puser a password correcta, ele não o deixa ver nada.
 
Considerando que o código acima está correcto (não o verifiquei, mas deve estar :P), terias de usar

AlwaysOnTop Me, True

num timer ;) será tão simples quanto isso.
Penso que o _Neo_ queria, na segunda parte, dizer "False" ;)

Cumps [[[[[[]]]]]]
angelofwisdom

oooppps copy paste editei o comentário mas não editei o codigo :p

tens razão para tirar o ontop é

AlwaysOnTop Me, false

edit: não é preciso por num timer é só preciso chamar uma vez para activar
 
Última edição:
Resumindo, riskware quer dizer perigoso?
Resumindo, riskware quer dizer que tem comportamentos de risco ;) como disse, tanto podes capturar teclas para lhes atribuir funções, o que não é nada malware, como podes programar um keylogger - e já é malware. Agora, o acto de capturar teclas é um comportamento "estranho", e por isso o programa já é considerado riskware.
 
Back
Topo