Avatar billede tjacob Juniormester
23. marts 2003 - 08:49 Der er 6 kommentarer og
1 løsning

Stay On Top -Forever

Jeg ved at StayOnTop har været oppe og vende mange gange her på Eksperten, og jeg HAR været igennem mange af svarene.

Jeg kan sagtens finde ud af at lægge mit vindue øverst med SetWindowPos.

Problemet er at det kan andre også!
DVS at mit vindue ligger kun øverst indtil der er et andet program (eller Windows selv) der lægger et andet vindue ovenpå.

Så spørgsmålet er: Hvordan sikrer jeg mig at mit vindue bliver VED med at ligge øverst?

Man kunne lægge rutinen i en Timer og så køre den en gang i sekundet eller lignende, men det virker som overkill på mig. -Der kan jo godt gå laaaang tid hvor der ikke sker noget.

Er der ikke nogen metoder, hvormed man kan få Windows til at sende besked om at nu sker der noget på vindues fronten, så 'nu skal du lægge dig øverst igen'?

/tjacob
Avatar billede dk_akj Nybegynder
24. marts 2003 - 08:17 #1
istedet for ontop kan du bruge topmost. Den vil meget gerne ligge foran andre vinduer :o)

Prøv efterfølgende kode på en form.

//akj

PS: et andet topmost vindue vil placere sig foran dette vindue, så helt sikker er den ikke, så skal du se om der er et event på formen der fyres når noget andet ligger sig foran.

Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40
Private Const TOPMOST_FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, y, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long


Private Sub MakeTopMost(Handle As Long)
SetWindowPos Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS
End Sub

Private Sub MakeNormal(Handle As Long)
SetWindowPos Handle, HWND_NOTOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS
End Sub

Private Sub Form_Load()
MakeTopMost Me.hwnd
End Sub
Avatar billede tjacob Juniormester
24. marts 2003 - 08:26 #2
Jeg kender ikke til nogen OnTop kode. Jeg bruger (som nævnt) SetWindowPos med
TOPMOST flags.
Jeg bruger nogenlunde samme kode, som du beskriver akj.

Problemet er IKKE at få formen til at ligge øverst, det er at få den til at blive der!
Som du selv skriver: Et andet program kan også kalde denne kode, og Windows selv vil i visse situationer lægge vinduer ovenpå.
Det jeg ønsker svar på er hvordan mit program kan vide det?
Som du nævner: Er der feks et event på formen der fyres af?

/tjacob
Avatar billede tjacob Juniormester
24. marts 2003 - 08:35 #3
Kommentar:

Det er naturligvis dårlig kodepraksis, at "tvinge" ting igennem, såsom at lægge sit program oven på alle andres.
Dette program er ikke til distribution, men kun et hjælpeprogram til min egen desktop. Det er en slags flydende værktøjslinie, med diverse Shell-funktioner. Den skal ALTID ligge øverst.
Avatar billede tjacob Juniormester
28. marts 2003 - 07:01 #4
Der sker vist ikke mere her. Lukker spm.................
Avatar billede dk_akj Nybegynder
28. marts 2003 - 07:03 #5
Hvis du finder en eventbaseret løsning så giv mig lige et praj, jeg har ikke kunnet finde noget.

//akj
Avatar billede tjacob Juniormester
28. marts 2003 - 10:40 #6
OK
Avatar billede tjacob Juniormester
28. marts 2003 - 10:41 #7
Lige nu kører jeg med en Timer event hvert 5 sekund, men jeg synes det er en "grim" løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester