View Full Version : سوال در مورد ریسایز فرم در وی بی6
Salar.Shayegan
دوشنبه 10 تیر 1392, 16:19 عصر
سلام دوستان
با کدام دستور میتوان کاری کرد که طول و عرض فرم از اندازه ای خاص (مثلا" 3230) کمتر نشود؟
(تا در رویداد Resize فرم از آن استفاده شود)
با تشکر
alipoor2009
دوشنبه 10 تیر 1392, 16:46 عصر
این کد را در رویداد Resize قرار می دهید
If Me.Width > 3230 And Me.Height > 3230 Then Me.Width = 3230: Me.Height = 3230
موفق باشید
Salar.Shayegan
دوشنبه 10 تیر 1392, 18:02 عصر
این کد را در رویداد Resize قرار می دهید
If Me.Width > 3230 And Me.Height > 3230 Then Me.Width = 3230: Me.Height = 3230
موفق باشید
ممنون دوست عزیز
منظور من این بود که سایز فرم از 3230 کمتر نشود اما کدی که شما لطف کردید گذاشتید باعث میشه که سایز بیشتر از 3230 نشود.
من جهت نا مساوی ها رو عوض کردم و درست شد... ولی اگر خودتون امتحان کنید میبینید که یه ظاهر عجیبی بوجود میاد یعنی فرم مدام چشمک میزند! نمیدونم چجوری بگم متوجه بشید؛ بهتره سورس زیر رو دانلود کنید و بعد از اجرا کردن، اندازه ی فرم را تغییر دهید (و آنرا به کوچکترین اندازه در آورید) تا منظورم رو متوجه بشید.
امیدوارم منظورم رو رسونده باشم...
دانلود سورس (http://s1.picofile.com/file/7826628488/Resize.zip.html)
محسن واژدی
سه شنبه 11 تیر 1392, 00:32 صبح
سلام علیکم
از SetWindowLong استفاده کنید (البته هوک هم توجهات خاص خودش رو میخواد، به عنوان مثال هیچگاه از دکمه Stop یا دستور End برای خاتمه برنامه استفاده نکنید در غیراینصورت وی بی کرش میکنه، همینطور همیشه قبل از تست پروژه را ذخیره کنید):
How To Limit a Window's Minimum and Maximum Size (http://support.microsoft.com/kb/185733)
موفق باشید
Salar.Shayegan
سه شنبه 11 تیر 1392, 13:40 عصر
سلام علیکم
از SetWindowLong استفاده کنید (البته هوک هم توجهات خاص خودش رو میخواد، به عنوان مثال هیچگاه از دکمه Stop یا دستور End برای خاتمه برنامه استفاده نکنید در غیراینصورت وی بی کرش میکنه، همینطور همیشه قبل از تست پروژه را ذخیره کنید):
How To Limit a Window's Minimum and Maximum Size (http://support.microsoft.com/kb/185733)
موفق باشید
ممنون
درست عمل کرد... فقط معنی این کدها رو که توی ماژول میریزیم متوجه نمیشم... ممکنه دوستان یه توضیح مختصر بدید؟
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()
lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub Unhook()
Dim temp As Long
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
If uMsg = WM_GETMINMAXINFO Then
CopyMemoryToMinMaxInfo MinMax, lParam, Len(MinMax)
MinMax.ptMinTrackSize.x = 300
MinMax.ptMinTrackSize.y = 300
CopyMemoryFromMinMaxInfo lParam, MinMax, Len(MinMax)
WindowProc = DefWindowProc(hw, uMsg, wParam, lParam)
Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End If
End Function
ممنون
البته هوک هم توجهات خاص خودش رو میخواد، به عنوان مثال هیچگاه از دکمه Stop یا دستور End برای خاتمه برنامه استفاده نکنید در غیراینصورت وی بی کرش میکنه
متوجه نشدم... یعنی نباید در کل برنامه از دستور end استفاده کرده باشم؟ منظورتون از کرش میکنه چیه؟ راستی ضرری روی برنامه که نداره؟
AbbasVB
سه شنبه 11 تیر 1392, 14:01 عصر
سلام
متوجه نشدم... یعنی نباید در کل برنامه از دستور end استفاده کرده باشم؟ منظورتون از کرش میکنه چیه؟ راستی ضرری روی برنامه که نداره؟
خیلی درگیر فهیمدن کد ها نشو!! بعدا انشاالله متوجه خواهی شد
برای این که برنامه کرش نکند تابع Unhook رو در رویداد آنلود فرم فراخوانی کنید بعد از End می توانید استفاده کنید.
کرش یعنی برنامه قاطی می کند و بسته می شود به خاطر مشکل در کد نویسیش
نه ضرری روی برنامه نداره تا جایی که دوباره از SetWindowLong API استفاده نکنی
سوالی بود بپرس
موفق باشید. :د:لبخند:ی
Salar.Shayegan
سه شنبه 11 تیر 1392, 16:22 عصر
ممنون
کلا" هوک چیه؟
ببخشیدا... :لبخند:
محسن واژدی
سه شنبه 11 تیر 1392, 20:27 عصر
سلام علیکم
متوجه نشدم... یعنی نباید در کل برنامه از دستور end استفاده کرده باشم؟ منظورتون از کرش میکنه چیه؟ راستی ضرری روی برنامه که نداره؟
همانطور آقای AbbasVB عزیز هم اشاره داشتند تنها در صورت sub-classing (هوک) بایستی پیش از استفاده از End برنامه را unhook کنید، همچنین هوک هیچ ضرری برای برنامه نداره که قدرت مانور برنامه را در آن زمینه بسیار افزایش میدهد تا اینکه بخواهیم از یک روش نامتداول به مقصود برسیم (البته منظورم از روش غیرمرسوم، روش هایی که در مورد مشکل فعلی دوستان فرمودند نیست)، بسیاری از برنامه ها از آن بهره میبرند، در کل دستورالعمل و شرایط مورد نیاز برای استفاده از sub-classing به صورتی هست که عرض شد
ممنون
کلا" هوک چیه؟
ببخشیدا... :لبخند:
لطفا جستجو کنید قبلا مباحث زیادی در این باره مطرح شده
مقاله در مورد hook (http://barnamenevis.org/showthread.php?250942-%D9%85%D9%82%D8%A7%D9%84%D9%87-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-hook)
هوک کردن توابع ا ی پی آی ویندوز (http://barnamenevis.org/showthread.php?199308-%D9%87%D9%88%DA%A9-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%A7-%DB%8C-%D9%BE%DB%8C-%D8%A2%DB%8C-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2)
Hook (http://barnamenevis.org/showthread.php?13533-Hook)
مخفی کردن پروسه و هوک (Hook) (http://barnamenevis.org/showthread.php?149748-%D9%85%D8%AE%D9%81%DB%8C-%DA%A9%D8%B1%D8%AF%D9%86-%D9%BE%D8%B1%D9%88%D8%B3%D9%87-%D9%88-%D9%87%D9%88%DA%A9-%28Hook%29)
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.