Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VB6]-Tasto Start/Menu windows e barra di stato plz

    Allora non sapevo ke titolo mettere e ne ho messo uno ke sembrerebbe rispecchiare l'argomento...
    Dunque io ho fatto un prg in vb6 solo ke ho due problemucci...

    Primo: A me serve la barra di stato o come diavolo si chiama, quella delle finestre sopra, dove si vede la X x chiudere la finestra, oppure il pulsante x minimizzarla o maximizarla.. allora... premetto ke questa barra NON LA POSSO TOGLIERE e ke ho eliminato il pulsante Minimized, Maximized e la X del close anke dal menu, io dovrei riuscire in qualche modo a bloccare il doppio click su di essa x il ridimensionamento. non so se mi sono spiegato, cioè devo fare in modo ke se io clicko due volte sulla barra [normalemnte ridimensionate la finestra, o in modo normale oppure maximizzata] non succeda nulla. Non deve succedere nulla!!!

    Secondo: Come posso bloccare il pulsante START [quello ke premuto fa comparire il menu start di windows] e la combinazione di tasti ALT+TAB? o se vi e piu semplice mi va bene anke eliminare tutti i tasti strani tipo CTRL-ALT-TAB-MAIUSCOLO... Cioè se durante il mio prg la persona ke usa il prg preme un tasto come start oppure alt+tab non deve succede nulla...

    Spero di essere stato chiaro nei problemi e sopratutto spero in una risposta dato ke mi serve urgentemente e nn so dove sbattere la testa
    :master:
    Grazie a tutti coloro ke mi aiuteranno.
    #include <cervello.h>

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    134
    per il primo problema basterebbe impostare la proprietà BorderStyle dell form su 3-fixed dialog, o su 4-fixed toolWindow

    per il secondo problema non so.

  3. #3
    basterebbe impostare la proprietà BorderStyle dell form su 3-fixed dialog, o su 4-fixed toolWindow
    niente... mi rimane sempre lo stesso problema. Mi permette di clicare due volte.

    HELP!
    #include <cervello.h>

  4. #4
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    premetto ke questa barra NON LA POSSO TOGLIERE e ke ho eliminato il pulsante Minimized, Maximized e la X del close anke dal menu
    Il suggerimento di arcadia è corretto...
    Che impostazioni ha il form ?
    In che modo hai eliminato i pulsanti ?
    ... e non usare while wend è una sintassi deprecata

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    134
    Sei sicuro??

    ControlBox = false (per togliere tutti i pulsanti)
    BorderStyle = fixed Dialog (per impedire il ridimensionamento)

    Dovrebbe proprio funzionare.Lo ho provato io ora..

  6. #6
    allora con questa disabilito il pulsante e la voce close [ovvero la X]
    codice:
    Sub DisableVoiceClose()
    
        Dim hMenu As Long, itemCount As Long
        
        'otengo l'handle di sistema
        hMenu = GetSystemMenu(Me.hWnd, 0)
        'ottengo il numero di elementi nel menu
        itemCount = GetMenuItemCount(hMenu)
        'elimino il comando close dal menu di sistema
        RemoveMenu hMenu, itemCount - 1, MF_REMOVE Or MF_BYPOSITION
        'elimino la riga di separazione nel menu di sistema
        RemoveMenu hMenu, itemCount - 2, MF_REMOVE Or MF_BYPOSITION
        
    End Sub
    e siccome a me serve ke rimanga sempre in primo piano ho usato questa funzione.
    codice:
    Sub SemprePrimoPiano()
    
        'imposto ke rimanga sempre in primo piano il mio prg
        frmL = Form1.Left
        frmT = Form1.Top
        frmW = Form1.Width
        frmH = Form1.Height
        'funzione ke mi imposta il primo piano assoluto
        succESS = SetWindowPos(Form1.hWnd, WOT_HWND_TOPMOST, frmL, frmT, 0, 0, WOT_FLAGS)
        Me.WindowState = vbMaximized
        Form1.Show
        
    End Sub
    Non credo ke pero interferiscano con la form dato ke il menu l'ho reso invisibile e funziona solo quando si preme il tasto destro del mouse. Se volete cerco di passarvi il programma in modo ke mi possiate aiutare meglio.
    Grazie

    dimenticavo... se dovete provarli aggiungete questi anke!
    codice:
    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPoistion As Long, ByVal wFlags As Long) As Long
    Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
        Private Const MF_BYPOSITION = &H400&
        Private Const MF_REMOVE = &H1000&
    #include <cervello.h>

  7. #7
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    dimenticavo... se dovete provarli aggiungete questi anke!
    Ti manca la dichiarazione della SetWindowPos, quelle delle costanti utilizzate con la stessa funzione (WOT_HWND_TOPMOST e WOT_FLAGS) e il punto in cui utilizzi le due procedure(SemprePrimoPiano e DisableVoiceClose)
    Prova così:
    codice:
    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPoistion As Long, ByVal wFlags As Long) As Long
    Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function SetWindowPos Lib "user32.dll" (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
    
    Private Const MF_BYPOSITION = &H400&
    Private Const MF_REMOVE = &H1000&
    Private Const HWND_TOPMOST = &HFF&
    Private Const W_Flags = &H40
    
    
    Sub DisableVoiceClose()
    Dim hMenu As Long, itemCount As Long
        
    'otengo l'handle di sistema
    hMenu = GetSystemMenu(Me.hwnd, 0)
    'ottengo il numero di elementi nel menu
    itemCount = GetMenuItemCount(hMenu)
    'elimino il comando close dal menu di sistema
    RemoveMenu hMenu, itemCount - 1, MF_REMOVE Or MF_BYPOSITION
    'elimino la riga di separazione nel menu di sistema
    RemoveMenu hMenu, itemCount - 2, MF_REMOVE Or MF_BYPOSITION
    End Sub
    
    Sub SemprePrimoPiano()
    
    'imposto ke rimanga sempre in primo piano il mio prg
    frmL = Form1.Left
    frmT = Form1.Top
    frmW = Form1.Width
    frmH = Form1.Height
    'funzione ke mi imposta il primo piano assoluto
    SetWindowPos Form1.hwnd, HWND_TOPMOST, frmL, frmT, 0&, 0&, W_Flags
    Me.WindowState = vbMaximized
    End Sub
    
    Private Sub Form_Load()
    Call DisableVoiceClose
    End Sub
    
    Private Sub Form_Resize()
    Call SemprePrimoPiano
    End Sub
    ... e non usare while wend è una sintassi deprecata

  8. #8
    si scusa mi sono dimenticato di postarla xke io ho messo tutto in un modulo. siccome ho altre funzioni ho messo tutto li, cmq il modulo mio sarebbe questo.

    codice:
    Option Explicit
    
    Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Const GWL_STYLE = (-16)
    Private Const GWL_EXSTYLE = (-20)
    Private Const WS_CAPTION = &HC00000     'WS_BORDER Or WS_DLGFRAME
    Private Const WS_EX_APPWINDOW = &H40000
    Private Const WS_EX_TOOLWINDOW = &H80
    Private Const WS_EX_TRANSPARENT = &H20
    Private Const WS_SYSMENU = &H80000
    Private Const WS_MINIMIZEBOX = &H20000
    Private Const WS_MAXIMIZEBOX = &H10000
    Private Const WS_THICKFRAME = &H40000
    
    Private Const WS_EX_LAYERED = &H80000
    Private Const LWA_ALPHA = &H2&
    
    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
    Private Const SWP_FRAMECHANGED = &H20
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOZORDER = &H4
    
    Global Const WOT_SWP_NOMOVE = 2
    Global Const WOT_SWP_NOSIZE = 1
    Global Const WOT_FLAGS = WOT_SWP_NOMOVE Or WOT_SWP_NOSIZE
    Global Const WOT_HWND_TOPMOST = -1
    Global Const WOT_HWND_TOP = 0
    Global Const WOT_HWND_NOTOPMOST = -2
    
    'Per regolare la forma XXXX a TOPMOST, usi il seguente codice:
    'successo = SetWindowPos(XXXX.hWnd, wot_HWND_TOPMOST, 0, 0, 0, 0,
    ' _successo < > 0 di rem delle BANDIERINE)
    
    'per ripristinare la forma XXXX a NON-TOPMOST, usi il seguente codice:
    'successo = SetWindowPos(XXXX.hWnd, wot_HWND_NOTOPMOST, 0, 0, 0, 0,
    ' _successo < > 0 di rem delle BANDIERINE)
    
    'Mostro la finestra di windows
    Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
        'Selettori di ShowWindow
        Const SW_HIDE = 0
        Const SW_SHOW = 5
    
    Sub extwinONTOP(ewinFORM As Form, locONTOP As Integer)
    
        Dim succESS As Long, flags As Long
        Dim frmL As Long, frmT As Long, frmW As Long, frmH As Long
        
        frmL = ewinFORM.Left
        frmT = ewinFORM.Top
        frmW = ewinFORM.Width
        frmH = ewinFORM.Height
        
        If locONTOP <> 0 Then
            succESS = SetWindowPos(ewinFORM.hWnd, WOT_HWND_TOPMOST, frmL, frmT, 0, 0, WOT_FLAGS)
        Else
            succESS = SetWindowPos(ewinFORM.hWnd, WOT_HWND_NOTOPMOST, frmL, frmT, 0, 0, WOT_FLAGS)
        End If
    
        ewinFORM.Show
    
    End Sub
    
    
    Private Sub SetWindowStyle(ByVal hWnd As Long, ByVal extended_style As Boolean, ByVal style_value As Long, ByVal new_value As Boolean, ByVal brefresh As Boolean)
       
       Dim style_type As Long
       Dim style As Long
       
       If extended_style Then
          style_type = GWL_EXSTYLE
       Else
          style_type = GWL_STYLE
       End If
       
       'Stile corrente
       style = GetWindowLong(hWnd, style_type)
       
       'Aggiorno o rimnuovo i valori
       If new_value Then
          style = style Or style_value
       Else
          style = style And Not style_value
       End If
       
       'Nascondo la finestra se apro task-maneger
       If brefresh Then
          ShowWindow hWnd, SW_HIDE
       End If
       
       'Imposto lo stile
       SetWindowLong hWnd, style_type, style
       
       'Mostro la finestra se apro task-maneger
       If brefresh Then
          ShowWindow hWnd, SW_SHOW
       End If
       
       'Ridisegno la finestra
       SetWindowPos hWnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or _
                                         SWP_NOMOVE Or _
                                         SWP_NOSIZE Or _
                                         SWP_NOZORDER
    End Sub
    
    Sub extwinTITLEBAR(ewinFORM As Form, ewinVAL As Integer)
        SetWindowStyle ewinFORM.hWnd, False, WS_CAPTION, ewinVAL, False
    End Sub
    
    Sub extwinTOOLWINDOW(ewinFORM As Form, ewinVAL As Integer)
        SetWindowStyle ewinFORM.hWnd, True, WS_EX_TOOLWINDOW, ewinVAL, False
    End Sub
    
    Sub extwinTASKBAR(ewinFORM As Form, ewinVAL As Integer)
        SetWindowStyle ewinFORM.hWnd, True, WS_EX_APPWINDOW, ewinVAL, True
    End Sub
    
    
    
    Sub extwinMAXBUTTON(ewinFORM As Form, ewinVAL As Integer)
        SetWindowStyle ewinFORM.hWnd, False, WS_MAXIMIZEBOX, ewinVAL, False
    End Sub
    xo il tuo codice funziona... forse nel mio prg mancava la parte riguardante il sub sul form_resize!
    #include <cervello.h>

  9. #9
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    Originariamente inviato da Oscar87k
    xo il tuo codice funziona... forse nel mio prg mancava la parte riguardante il sub sul form_resize!
    Dopo aver provato il codice, mi sono accorto anch'io del problema...
    Per questo ho inserito il richiamo alla SetWindowPos nella Resize. In questo modo viene richiamata sia all'avvio che al doppio click sulla barra per il ridimensionamento.

    ... e non usare while wend è una sintassi deprecata

  10. #10
    infatti funziona piu ke bene... ora il mio problema rimane solo quello di eliminare tasti tipo CTRL - TAB - START
    Solo ke non so come fare xke anke se blocco il codice ascii di quei tasti non funzia..
    #include <cervello.h>

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.