[ Aleksandar Ružičić @ 21.07.2004. 02:35 ] @
Pitanje je jednostavno: kako da odredim minimalnu velicinu forme tako da je korisnik ne moze smanjivati koliko hoce vec samo do odredjene granice??? |
[ Aleksandar Ružičić @ 21.07.2004. 02:35 ] @
[ VRKY @ 21.07.2004. 07:50 ] @
DEsno u Propertisu forme odaberi:
BorderStyle i stavi 1.Fixed Singel ili 4.Fixed To.... i onda odrediš veličinu forme... POZdraV [ Mashinovodja @ 21.07.2004. 07:50 ] @
Ako mislis na velicinu u pikselima, onda nema pravila i velicina zavisi od toga sta imas na formi i sta hoces da uvek ostane vidljivo. Ako je pitanje bilo kako da obezbedis da korisnik ne smanji dimenzije forme ispod neke vrednosti, onda je najbolje da u dogadjaju Resize forme testiras da li su tekuce vrednosti Me.Width i Me.Height forme manje od minimalnih, pa ako jesu, vrati na minimalne koje smatras pogodnim za konkretnu formu.
[ Shadowed @ 21.07.2004. 08:03 ] @
Jedna jednostavna varijanta ti je:
Code: Private Sub Form_Resize() If Me.Width < X Then Me.Width = X 'X je minimalna sirina If Me.Height < Y Then Me.Height = Y 'Y je minivalna visina End Sub Ali ce ti u ovom slucaju forma pri pokusaju smanjivanja na manju velicinu treperiti a i moze doci do nezeljenih efekata (zavisno od programa) jer se ona na trenutak ipak smanji vise nego sto bi zeleo. Drugi nacin je pomocu API-ja ali sada nemam vremena da napisem code ali pogledaj SetWindowPos funkciju (i eventualno SetWindowPlacement). [ Aleksandar Ružičić @ 22.07.2004. 01:28 ] @
Hvala shadowed, nisam se setio API-Guidea kada sam postavljao ovu temu...
[ OTOK@ @ 30.05.2005. 19:16 ] @
Code: Public Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" _ (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 Nije mi bas najbolje jasno kako iskoristiti ovu API funkciju! Moze'l mi neko pojasniti sta trebam jos dodati / izmijeniti da npr. min. velcina bude 1000 x 1000... [ Marko_L @ 30.05.2005. 20:28 ] @
Ti si tu samo deklarisao funkciju, a nigde je nisi upotrebio.Da bi nešto uradio sa njom moraš da je pozoveš negde iz koda.
Recimo ovako Code: Private Sub Form_Load() SetWindowPos Me.Hwnd, 0, 0 ,0, 300, 200, 0 End Sub i to će ti postaviti veličinu na 300X200 pixela, dakle obrati pažnju, pixela, a ne twips-ova.No, to ti neće rešiti problem sa minimalnom veličinom forme.Evo jednog rešenja koje može to da odradi. Ovo možeš da staviš u modul recimo Code: Option Explicit Declare Function CallWindowProc Lib "user32.dll" 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 Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _ pDest As Any, _ pSrc As Any, _ ByVal ByteLen As Long) Type POINTAPI x As Long y As Long End Type Type MINMAXINFO ptReserved As POINTAPI ptMaxSize As POINTAPI ptMaxPosition As POINTAPI ptMinTrackSize As POINTAPI ptMaxTrackSize As POINTAPI End Type Public Const GWL_WNDPROC = (-4) Public Const WM_GETMINMAXINFO = &H24 Dim lpPrevWndProc As Long Public Sub Hook() lpPrevWndProc = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Function WindowProc( _ ByVal hw As Long, _ ByVal uMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long If uMsg = WM_GETMINMAXINFO Then Dim MinMax As MINMAXINFO CopyMemory MinMax, ByVal lParam, Len(MinMax) MinMax.ptMinTrackSize.x = 1000 'ovde podesavas minimalnu X velicinu u pixelima MinMax.ptMinTrackSize.y = 1000 ' ovde podesavas minimalnu Y velicinu u pixelima CopyMemory ByVal lParam, MinMax, Len(MinMax) Else WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam) End If End Function Public Sub Unhook() SetWindowLong Form1.hwnd, GWL_WNDPROC, lpPrevWndProc End Sub A onda u kodu radis hook i unhook, tj. najbolje je da hukuješ na početku, a unhukuješ na kraju, odnosno Code: Private Sub Form_Load() Hook End Sub hukuješ kad se forma učita, a Code: Private Sub Form_Unload(Cancel As Integer) UnHook End Sub a unhukuješ po zatvaranju forme. [ OTOK@ @ 30.05.2005. 22:27 ] @
Hvala ti na odgovoru Marko, eee ovako sam nesto i trazio...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|