Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206

    [VB.NET]Sempre in primo piano

    Ciao raga,
    come si fà a tenere una applicazione sempre in primo piano, come il taskmanager?

  2. #2
    Ti scrivo come in VB6 si poteva tenere in primo piano magari ti puo servire

    codice:
    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_FRAMECHANGED = &H20
            Public Const HWND_TOP = 0
            Public Const HWND_TOPMOST = -1
            Public Const HWND_NOTOPMOST = -2
            Public Const SWP_DRAWFRAME = SWP_FRAMECHANGED
            Public Const SWP_HIDEWINDOW = &H80
            Public Const SWP_NOACTIVATE = &H10
            Public Const SWP_NOCOPYBITS = &H100
            Public Const SWP_NOMOVE = &H2
            Public Const SWP_NOOWNERZORDER = &H200
            Public Const SWP_NOREDRAW = &H8
            Public Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
            Public Const SWP_NOSIZE = &H1
            Public Const SWP_NOZORDER = &H4
            Public Const SWP_SHOWWINDOW = &H40
    
    
    Sub FormOnTop(frm As Form, VF As Boolean)
        ' Questa procedura permette di impostare sempre in primo piano un form rispetto alle altre finestre
        ' frm ---> form su cui agisce la procedura
        ' vf  ---> se true il form è visualizzato in primo piano
        
     Select Case VF
        Case True
          SetWindowPos frm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE Or SWP_NOMOVE
        Case False
          SetWindowPos frm.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE Or SWP_NOMOVE
    
    End Select
    End Sub

  3. #3
    Scusami forse era meglio se te lo convertivo gia' in VB.NET

    Fai un modulo e metti
    codice:
    Module Module1
        Declare Function SetWindowPos Lib "user32" (ByVal hwnd As IntPtr, ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As IntPtr
    
        Public Const SWP_FRAMECHANGED = &H20
        Public Const HWND_TOP = 0
        Public Const HWND_TOPMOST = -1
        Public Const HWND_NOTOPMOST = -2
        Public Const SWP_DRAWFRAME = SWP_FRAMECHANGED
        Public Const SWP_HIDEWINDOW = &H80
        Public Const SWP_NOACTIVATE = &H10
        Public Const SWP_NOCOPYBITS = &H100
        Public Const SWP_NOMOVE = &H2
        Public Const SWP_NOOWNERZORDER = &H200
        Public Const SWP_NOREDRAW = &H8
        Public Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
        Public Const SWP_NOSIZE = &H1
        Public Const SWP_NOZORDER = &H4
        Public Const SWP_SHOWWINDOW = &H40
    
    
        Public Sub FormOnTop(ByVal frm As Form, ByVal VF As Boolean)
            ' Questa procedura permette di impostare sempre in primo piano un form rispetto alle altre finestre
            ' frm ---> form su cui agisce la procedura
            ' vf  ---> se true il form è visualizzato in primo piano
    
            Select Case VF
                Case True
                    SetWindowPos(frm.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE Or SWP_NOMOVE)
                Case False
                    SetWindowPos(frm.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE Or SWP_NOMOVE)
    
            End Select
        End Sub
    End Module
    Poi nella form con
    codice:
    FormOnTop(Me, True) 'la metti in primo piano
    FormOnTop(Me, True) 'la rimetti normale

  4. #4
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206
    ok grassie va,
    ma solo se tolgo le dichiarazioni del modulo, forse è inutile in .net il suo uso

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Se non sbaglio, ogni Form di Windows Forms ha la proprietà TopMost che, impostata a True, mantiene il form in primo piano.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    E' vero alka non l'avevo notato ...

    A volte la soluzione sembra + semplice di quello che sembra

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da TrigunXX
    A volte la soluzione sembra + semplice di quello che sembra
    Non ho fatto esperimenti poichè non faccio uso di VB.NET e ho poco tempo a disposizione, ma occorrerebbe verificare se l'impostazione TopMost è valida generalmente per tutte le applicazioni attive.

    Mi spiego: si dovrebbe testare se la form TopMost rimane in primo piano rispetto alle altre form di un'applicazione VB.NET e di tutte le altre applicazioni attive (a meno che queste non facciano uso anch'esse della medesima impostazione oppure si ancorino al desktop e così via).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Io penso che le applicazioni che utilizzano la top most non facciano altro che richiamare quell'API che ho scritto sopra e penso che l'ultima applicazione o finestra che la invoca dovra' restare sopra alle altre. Naturalmente è tutto da verificare!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.