View Full Version : اندازه صفحه برنامه
Moharram
چهارشنبه 25 دی 1387, 18:38 عصر
سلام
من یک برنامه دارم که با وضوح 600*800 طراحی شده. میخوام در وضوح بالاتر هم یک جوری همه چیز Maximize بشه.
در واقع میشه اندازه فرم رو بزرگ کرد ولی آیا باید جای تک تک کنترلها رو هم تو Resolution جدید عوض کرد.
اما یک سوال مهمتر اینکه تو یک کامپیوتر با 600*800 و یک برنامه با همین رزولوشن، ولی با دو سیستم عامل، تو یکی درست برنامه درست نشون داده میشه ولی تو یه کامپیوتر دیگه برنامه از اندازه مانیتور بزرگتر میشه!!! اشکال کجاست؟ در ضمن اون حالت مشکلدار با Windows Embedded ایجاد میشه...
Nima_NF
چهارشنبه 25 دی 1387, 18:54 عصر
معمولا کمتر برنامه ای با تغییر resolution اندازه کنترل ها را تغییر می دهد، وقتی کاربری مونیتور بزرگتر با resolution بالاتر دارد می تواند تعداد بیشتری کنترل را همزمان مشاهده کند، لزوما نمی خواهد اندازه ها نیز بزرگتر شود.
در حالت معمول اگر پنجره maximize شود کنترل ها نسبت به گوشه بالا سمت چپ در همان فاصله می مانند.
اگر می خواهید کنترل ها تغییر سایز دهند می توانید از این روش که در تاپیک زیر توضیح داده شده است استفاده کنید:
http://www.barnamenevis.org/forum/showthread.php?t=140938
در مورد اینکه چرا در کامپیوتر های مختلف متفاوت هست، توضیح ندادید که برنامه شما چه بود و کدام بخشش تغییر کرد...فونت ها ؟ کنترل ها ؟ ...
اگر فردی در سیستم خودش تنظیمات system را تغییر دهد( مثلا سایز font را، اندازه Title bar را و ... ) همه برنامه ها به هم می ریزد، مگر اینکه از قبل در برنامه این موارد در نظر گرفته شده باشد.
اگر منظورتان از Windows Embedded همان windows CE هست که کاملا متفاوت از windows کنونی هست و باید برای آن جداگانه تغییرات لازم داده شود.
مثلا همان اندازه فونت برای نوشتن که در هر سیستمی DPI و اندازه خود را دارد.
شما همواره می توانید با گرفتن اندازه screen سایز فونت ها و یا کنترل ها را متناسب با آن تغییر دهید.
Moharram
پنج شنبه 26 دی 1387, 14:56 عصر
با تشکر از جناب Nima_NF
من به این صورت عمل کردم که با یک تایمر تابع GetSystemMetric رو فراخوانی کردم، که مقدار بازگشتیش میتونه 800 یا 1024 یا ... باشه. سپس اول با متد MoveWindow پنجره رو بزرگ کردم. (واحدها بر اساس پیکسل)
سپس تک تک کنترلها رو با کد زیر جابجا کردم:
GetDlgItem(ID...)->MoveWindow...
اما اینبار واحدها پیکسل نبود و باید با آزمون و خطا جای کنترلها رو پیدا کرد.
در ضمن زمان طراحی هم یک x,y دیگه ای تو StatusBar مینویسه...
فعلا چون کارم عجله ای بود با آزمون و خطا کارم رو راه انداختم ...!!!
Nima_NF
پنج شنبه 26 دی 1387, 22:54 عصر
چرا از تایمر استفاده کردید؟
اگر می خواهید هر بار که کاربر resolution ویندوز را عوض کرد متوجه شوید از پیام WM_DISPLAYCHANGE استفاده کنید و در آن کارها را انجام دهید.
Moharram
دوشنبه 30 دی 1387, 10:01 صبح
چرا از تایمر استفاده کردید؟
اگر می خواهید هر بار که کاربر resolution ویندوز را عوض کرد متوجه شوید از پیام WM_DISPLAYCHANGE استفاده کنید و در آن کارها را انجام دهید.
این پیام WM_DISPLAYCHANGE رو پیدا نمیکردم... خیلی ممنون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.