23. marts 2003 - 08:49Der 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'?
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
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?
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.
Lige nu kører jeg med en Timer event hvert 5 sekund, men jeg synes det er en "grim" løsning.
Synes godt om
Ny brugerNybegynder
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.