azarsoft
چهارشنبه 03 اسفند 1384, 18:07 عصر
از دوستان کسی می دونه با چه دستوری میشه دقت صفحه نمایش رو تغییر داد
مثلا هنگام اجرای برنامه دقت صفحه نمایش رو از 800*600 به 1024*768 تغییر داد یا بلعکس
من برنامه ای با دقت 1024*786 نوشتم و هنگام اجرای برنامه وقتی دقت صفحه نمایش 800*600 میشه گرافیک برنامه دچار مشکل میشه آیا راه حل دیگه ای برای اینکه این مشکل رو حل کرد وجود داره یا نه
javad_hosseiny
چهارشنبه 03 اسفند 1384, 18:45 عصر
برای این منظور باید از کدهای api استفاده کنند (تغییر رزولیشن مانیتور)
در سورس ذیل (که فکر کنم قبلا در همین بخش هم آورده شده بود) تابعی برای تغییر رزولیشن سیستم می باشد (دو خط اول به عنوان نمونه و مثال می باشد)
و البته دقت نمایید که از دادن پارامتر (مقادیر) آننرمال پرهیز کنید (بعضا باعث آسیب دیدن مانیتور می گردد)
*=changeres(800,600)
*=changeres(640,480)
*********
FUNCTION ChangeRes
LPARAMETERS tnWidth, tnHeight
LOCAL lnWidth, lnHeight, lnModeNum, lcDevMode
lnModeNum = 0
lcDevMode = REPLICATE(CHR(0), 156)
lnWidth = IIF(EMPTY(tnWidth), 800, tnWidth)
lnHeight = IIF(EMPTY(tnHeight), 600, tnHeight)
DECLARE INTEGER EnumDisplaySettings IN Win32API ;
STRING lpszDeviceName,;
INTEGER iModeNum, ;
STRING @lpDevMode
DECLARE INTEGER ChangeDisplaySettings IN Win32API STRING @lpDevMode, INTEGER dwFlags
DO WHILE EnumDisplaySettings(NULL, lnModeNum, @lcDevMode) <> 0
lnModeNum = lnModeNum +1
ENDDO
lcDevMode = STUFF(lcDevMode, 41, 4, LongToStr(1572864))
lcDevMode = STUFF(lcDevMode, 109, 4, LongToStr(tnWidth)) && Ancho
lcDevMode = STUFF(lcDevMode, 113, 4, LongToStr(tnHeight)) && Alto
ChangeDisplaySettings(@lcDevMode, 1)
ENDFUNC
**********************************
FUNCTION LongToStr
LPARAMETERS lnLongVal
LOCAL lnCnt, lcRetStr
lcRetStr = ''
FOR lnCnt = 24 TO 0 STEP -8
lcRetStr = CHR(INT(lnLongVal/(2^lnCnt))) + lcRetStr
lnLongVal = MOD(lnLongVal, (2^lnCnt))
NEXT
RETURN lcRetStr
ENDFUNC
البته بهتر است قبل از تغییر رزولیشن توسط تابع sysmetric از مقدار رزولیشن خود مطلع شوید و در صورت عدم سازگاری آنگاه آن را تغییر دهید.
مثال:
IF SYSMETRIC(1) # 800 .AND. SYSMETRIC(2) # 600 THEN
....
ENDIF
و نهایتا نیز در کل پیشنهاد به انجام این کار را نمی کنم (مگر در شرایط خاص به طور مثال زمانی که شما در طراحی زمینه فرمهایتان از تصاویر (بک گراندهای) مختلف و .... استفاده کرده اید و کیفیت تصاویر نیز برایتان مهم است (یعنی در صورت تغییر اندازه آن (تغییر سازی نمایش) بصورت کدنویسی کیفیت آن تغییر پیدا کند) )
و پیشنهاد می کنم به جای این کار سعی کنید برنامه اتان (منظور بیشتر فرم هاست) را به صورتی طراحی کنید که قابلیت تغییر اندازه آن با توجه به رزولیشن فعلی سیستم کاربر باشد
(مثلا طراحی فرم های خود را در محیط 600*800 و یا کمتر انجام داده) و در قسمت resize فرم خود مقدار اندازه و محل تمامی آبجکتهای موجود در فرم خود را با توجه به تغییر سایز فرم تغییر دهید) (جهت تغییر اندازه فرم به اندازه فعلی مانیتور نیز کافی است تا پارامتر .WindowState خود را برابر 2 (maximum) قرار دهید (این کار را در پایان متد init فرم خود قرار دهید)
نهایتا اگر باز متوجه نشدید بگویید تا یک نمونه فرم را برایتان آپلود کنم
azarsoft
چهارشنبه 03 اسفند 1384, 20:16 عصر
میشه یک نمونه فورم برام آپلود کنید
ببخشید به خاطر عجله ای که قبلا داشتم اشتباه تایپی صورت گرفته بود
javad_hosseiny
پنج شنبه 04 اسفند 1384, 10:13 صبح
فونت؟!!! (چه فونتی؟!)
فکر کنم منظورتون فورم بود.!!!!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.