hej Hej Alltid överst är väl korrektare att beskriva problemmet. Hehe tyvärr sven, du har fel det är inte alltid Överst jag vill ha.... Du kan inte använda active desktop då? Dvs. använda en hemsida som visar en activex i fullskärm? men då är det ju bara att höger klicka på skärmen och välja egenskaper Det här kan kanske vara något för dig. Tack =))) Verkligen stort tack, det fungerade nästan så bra som jag vill ha det Det är bara i det formuläret som du vill ha underst som du ska köra nedanstående kod i. men jag kör bara Hookform på form1Alltid Underst?
det är så att jag har en form som fyller upp hela skärmen
och på den formen kan jag starta lite diverse program
men jag får problemet att när jag startar ett program
och sedan klickar på min form så försvinner mitt startade program
hur ska jag göra för att förhindra detta?
Tack för svar!Sv: Alltid Underst?
<code>
Option Explicit
'Lämpligen i en BasModul
'**************************************
'Windows API/Global Declarations for :
'Set Form on top easily put this into a module
Declare Function SetActiveWindow Lib "user32" (ByVal hwnd As Long) As Long
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
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_SHOWWINDOW = &H40
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Function FormOnTop(hwnd As Integer, OnTop As Boolean)
Dim wFlags As Long, PosFlag As Long
wFlags = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
Select Case OnTop
Case True
PosFlag = HWND_TOPMOST
Case False
PosFlag = HWND_NOTOPMOST
End Select
SetWindowPos hwnd, PosFlag, 0, 0, 0, 0, wFlags
End Function
</code>
/SvenSv: Alltid Underst?
Jag ska förklara mitt problem lite bättre
På mitt program så finns det en väldig massa knappar som jag startar lite olika program, Vi Kan kalla mitt program "Program-Startaren" och när jag tycker för att starta ett program exempelvis "Microsoft Word".
Och allt ser bra ut tills jag trycker någonstanns på "Program-Startaren"
så försvinner "Microsoft Word" Bakom "Program-Startaren"....så praktiskt taget så är det "Microsoft Word" Jag vill lägga överst.
hoppas att ni förstår denna förklaringen bättreSv: Alltid Underst?
Sv: Alltid Underst?
och sedan kan användaren plocka bort det...och det vill jag inte..Sv: Alltid Underst?
I formuläret.
<code>
Option Explicit
Private Sub Form_Load()
HookForm Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHookForm Me
End Sub
</code>
I en modul
<code>
Option Explicit
Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "User32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Sub 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)
Const WM_WINDOWPOSCHANGED = &H47
Const GWL_WNDPROC = (-4)
Const HWND_BOTTOM = 1
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Dim PrevProc As Long
Public Sub HookForm(F As Form)
PrevProc = SetWindowLong(F.hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHookForm(F As Form)
SetWindowLong F.hWnd, GWL_WNDPROC, PrevProc
End Sub
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hWnd, uMsg, wParam, lParam)
If uMsg = WM_WINDOWPOSCHANGED Then
'Sätt formuläret till "Underst"
SetWindowPos hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End If
End Function
</code>
//
JanneSv: Alltid Underst?
fick dock ett problem med om jag har fler formulär i mitt program
för att det blir så att alla formulär blir "Alltid underst" och det vill jag inte
utan jag vill att det ska endast vara ett formulär som ska vara det
hur löser jag detta problem?Sv: Alltid Underst?
<code>
Private Sub Form_Load()
HookForm Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHookForm Me
End Sub
</code>
Dina andra formulär ska inte köra HookForm.
Om du av någon anledning måste bevaka olika händelser (meddelanden) till flera olika formulär så kan du naturligtvis använda HookForm men du bör då kanske ändra funktionen så att du t ex skickar med information om vilka meddelanden du vill övervaka för just det formuläret. Denna information får du då lagra för att sedan använda när du ska utvärdera de windowsmeddelanden som skickas till formuläret.
Men som sagt var som du beskriver ditt problem så är det bara ditt "understa" formulär som ska anropa HookForm/UnHookForm.
//
Janne.Sv: Alltid Underst?
men när jag kör form2 så blir även den i underst läge av någon underlig anledning
och jag kör ingen kod på den rutan