ورود

View Full Version : Resizeable Forme



Roza_tsc
سه شنبه 06 بهمن 1383, 09:04 صبح
برای اینکه کاربر نتونه فرم را بکشه و بزرگتر یا کوچیکتر بشه چکار باید کرد؟؟؟؟

Behrouz_Rad
سه شنبه 06 بهمن 1383, 09:55 صبح
در خاصیت Form_Resize‌ بنویسید:


if Me.Width >= meghdare morede nazar Then Me.Width=Meghdare morede nazar
if Me.Height >= meghdare morede nazar Then Me.Height=Meghdare morede nazar

MM_Mofidi
سه شنبه 06 بهمن 1383, 11:41 صبح
BorderStyle=1 'Fixed Single :موفق:

Hamedm
سه شنبه 06 بهمن 1383, 12:16 عصر
سلام

دوست عزیز ابتدا کد زیر رو در فرم وارد کنید:

Option Explicit
Private Sub Form_Load()
'Save handle to the form.
gHW = Me.hwnd
'Begin subclassing.
Hook
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Stop subclassing.
Unhook
End Sub
سپس کد زیر را هم در یک ماژول وارد نمایید:

Option Explicit
Private Const GWL_WNDPROC = -4
Private Const WM_GETMINMAXINFO = &H24
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type
Global lpPrevWndProc As Long
Global gHW As Long
Private Declare Function DefWindowProc Lib "user32" Alias _
"DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Private 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
Private Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Sub CopyMemoryToMinMaxInfo Lib "KERNEL32" Alias _
"RtlMoveMemory" (hpvDest As MINMAXINFO, ByVal hpvSource As Long, _
ByVal cbCopy As Long)
Private Declare Sub CopyMemoryFromMinMaxInfo Lib "KERNEL32" Alias _
"RtlMoveMemory" (ByVal hpvDest As Long, hpvSource As MINMAXINFO, _
ByVal cbCopy As Long)
Public Sub Hook()
'Start subclassing.
lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
AddressOf WindowProc)
End Sub
Public Sub Unhook()
Dim temp As Long
'Cease subclassing.
temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
End Sub
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Dim MinMax As MINMAXINFO
'Check for request for min/max window sizes.
If uMsg = WM_GETMINMAXINFO Then
'Retrieve default MinMax settings
CopyMemoryToMinMaxInfo MinMax, lParam, Len(MinMax)
'Specify new minimum size for window.
MinMax.ptMinTrackSize.x = 200
MinMax.ptMinTrackSize.y = 200
'Specify new maximum size for window.
MinMax.ptMaxTrackSize.x = 500
MinMax.ptMaxTrackSize.y = 500
'Copy local structure back.
CopyMemoryFromMinMaxInfo lParam, MinMax, Len(MinMax)
WindowProc = DefWindowProc(hw, uMsg, wParam, lParam)
Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, _
wParam, lParam)
End If
End Function

حال برنامه را اجرا کنید. مشاهده میکنید که کمتر از حد مشخصی نمیتوانیم فرم را تغییر اندازه بدهیم.

Behrouz_Rad
سه شنبه 06 بهمن 1383, 12:46 عصر
BorderStyle=1 'Fixed Single
جناب مفیدی با این کار دکمه های Minimize و Maximize ناپدید می شوند.

جناب حامد خان، چرا لقمه رو 180 درجه می چرخونی. همون دو خطی که بنده گفتم رد خور نداره و عالیه.

MM_Mofidi
سه شنبه 06 بهمن 1383, 12:51 عصر
برای اینکه کاربر نتونه فرم را بکشه و بزرگتر یا کوچیکتر بشه چکار باید کرد؟؟؟؟
اون پاسخ با این فرض ارائه شد که Maximize & Minimize رانوعی بزرگ یا کوچک شدن فرم فرض کنیم :sunglass: :oops:

Behrouz_Rad
سه شنبه 06 بهمن 1383, 12:54 عصر
Minimize چه ربطی به بزرگ یا کوچک شدن فرم داره؟ :گیج:

ساران سافت
سه شنبه 06 بهمن 1383, 19:49 عصر
در Properti مقدار Minbutton و Maxbutton را True کن تا دکمه هاش نمایش داده شود :موفق: