Kako ukloniti dugme za MAXIMIZE na MDI formi
MDI Form i Maximize
Zaključano
Zakačeno
Na standardan nacin nikako, jedino nesto preko API-ja (za to ce ti Eurora3D ili krcko vec dati resenje ako ga ima).
Ja imam nacin za disableovanje X dugmeta, ali to nije ono sto tebi treba...
pozivas ga sa:
Evo ti jedno mnogo jednostavnije rešenje koje radi i na MDI i na svim drugim formama:
Code:
'U modulu:
Public 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
Public Const MF_BYPOSITION = &H400&
Public Declare Function RemoveMenu Lib "User32" (ByVal hMenu As Long, _
ByVal nPosition As Long, ByVal wFlags As Long) As Long
Public Declare Function GetSystemMenu Lib "User32" (ByVal hWnd As Long, _
ByVal bRevert As Long) As Long
Public Sub DisableClose(hWnd As Long)
Dim hMenu As Long
hMenu = GetSystemMenu(hWnd, 0)
RemoveMenu hMenu, 6, MF_BYPOSITION
RemoveMenu hMenu, 5, MF_BYPOSITION
End Sub
'U modulu:
Public 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
Public Const MF_BYPOSITION = &H400&
Public Declare Function RemoveMenu Lib "User32" (ByVal hMenu As Long, _
ByVal nPosition As Long, ByVal wFlags As Long) As Long
Public Declare Function GetSystemMenu Lib "User32" (ByVal hWnd As Long, _
ByVal bRevert As Long) As Long
Public Sub DisableClose(hWnd As Long)
Dim hMenu As Long
hMenu = GetSystemMenu(hWnd, 0)
RemoveMenu hMenu, 6, MF_BYPOSITION
RemoveMenu hMenu, 5, MF_BYPOSITION
End Sub
pozivas ga sa:
Code:
DisableClose frmForm.hWnd
DisableClose frmForm.hWnd
Evo ti jedno mnogo jednostavnije rešenje koje radi i na MDI i na svim drugim formama:
Code:
Private Sub Form_Resize()
If Me.WindowState = 2 Then
Me.WindowState = 0
End If
End Sub
Private Sub Form_Resize()
If Me.WindowState = 2 Then
Me.WindowState = 0
End If
End Sub
izmenjeno 1 put, poslednji put Eurora3D Team 03.09.2008. u 02:24
Izmene poruke
- Eurora3D Team03.09.2008. u 02:24zapis iz teksta poruke
Ja se nisam do sad sretao sa ovim "problemom" ali sam uspeo da iz nekoliko pokusaja dobijem ono sto se trazi. Maximize nije uklonjen (trebalo bi da se promeni i border stil i minimize da bi to moglo) ali je disabled (prozor vise nema mogucnost da se maximalizuje dugmetom).
Stil koji se dobija je klasican MDI stil prozora , samo nije uljuceno WS_MAXIMIZEBOX (maximize dugme)
Win Api funkcija je SetWindowLong a konstante koje se ne koriste sam dodao ako neko hoce da eksperimentise sa stilovima.
Code:
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_OVERLAPPED = &H0&
Private Const WS_CAPTION = &HC00000
Private Const WS_SYSMENU = &H80000
Private Const WS_THICKFRAME = &H40000
Private Const WS_CLIPCHILDREN = &H2000000
Private Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Private Const GWL_STYLE = (-16)
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 Sub MDIForm_Load()
Dim wLong As Long
wLong = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_CLIPCHILDREN
If SetWindowLong(Me.hwnd, GWL_STYLE, wLong) = 0 Then Debug.Print "Greska"
End Sub
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_OVERLAPPED = &H0&
Private Const WS_CAPTION = &HC00000
Private Const WS_SYSMENU = &H80000
Private Const WS_THICKFRAME = &H40000
Private Const WS_CLIPCHILDREN = &H2000000
Private Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Private Const GWL_STYLE = (-16)
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 Sub MDIForm_Load()
Dim wLong As Long
wLong = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_CLIPCHILDREN
If SetWindowLong(Me.hwnd, GWL_STYLE, wLong) = 0 Then Debug.Print "Greska"
End Sub
p.s Ako hoces fiksne ivice prozora izbrisi Or WS_THICKFRAME
Sa ovim dobijas MDI formu fiksnih ivica i samo sa X dugmetom
wLong = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_CLIPCHILDREN
Potpis
HomePage http://www.eurora3d.com
A da malo pazljivije citas?
Pitanje je bilo MDI Form!!!
Pitanje je bilo MDI Form!!!
Ok, moja greska.