پیمان محمدی
پیمان محمدی
خواندن ۲ دقیقه·۶ سال پیش

مشکل DPI Scaling در آپدیت جدید ویژوال استودیو برطرف شد.

من چندین نرم افزار فعال دارم که سالیان قبل نوشته‌ام و هر چند وقت یکبار باید بروزرسانی و نگهداری شود. این نرم افزار ها با Windows Forms Application نوشته شده و همانطور که احتمالاً می‌دانید این تکنولوژی محبوب بیش از 20 سال از عمرش می‌گذرد و به دلیل استفاده از موتور رندرینگ GDI و GDI+ که آن هم بسیار قدیمی‌ست باعث شده است با قابلیت DPI Scaling ناسازگار باشد.

آخرین آپدیت ویندوز 10 نیز شامل امکاناتی برای بهتر کردن تجربه کاربر در هنگام استفاده از نرم افزار های کلاسیک در DPI های بالاست که در تصویر زیر می توانید مشاهده کنید.

Settings\System\Display\Advanced scaling settings
Settings\System\Display\Advanced scaling settings

یا برای نرم افزار ها به صورت تکی:

Application Properties
Application Properties

این امکانات برای کاربر نهایی می‌تواند بسیار سودمند باشد اما مشکل بزرگتر هنگام طراحی فرم در ویژوال استودیو رخ می‌دهد. در نمونه زیر DPI صفحه نمایش روی 125% قرار دارد و می‌‌توانید به هم ریختگی و عدم تطابق فرم رندر شده با نرم افزار در حال اجرا مشاهده می‌کنید.

مقایسه پنجره در اجرا با تصویر رندر شده در ویژوال استودیو
مقایسه پنجره در اجرا با تصویر رندر شده در ویژوال استودیو

برای رفع این مشکل زمانی که لازم بود تغییری در فرم ها ایجاد کنم در تنظیمات ویندوز DPI رو روی 100% قرار می‌دادم اما مورد آزار دهنده این است که برای اعمال بهتر تغییرات DPI باید یک Sign Out انجام شود که پنجره های در حال اجرا و از همه مهم‌تر موسیقی در حال پخش قطع می‌‎شود!

تغییر DPI نیازمند Sign out است.
تغییر DPI نیازمند Sign out است.

با اعمال تغییرات و اجرای مجدد ویژوال استودیو همانطور که در تصویر زیر می‌توانید مشاهده کنید مشکل برطرف می شود.

ویژوال استودیو هنگامی که DPI بر روی 100% است.
ویژوال استودیو هنگامی که DPI بر روی 100% است.

شاید تا اینجا این سوال به ذهن شما خطور کرده باشد که خب چرا DPI را کلاً روی 100% نباشد؟

درست است که مشکل برطرف می‌شود اما با DPIی 100% آیکون ها و اجزای ویندوز کوچک می‌شوند و با آن راحت نیستم و با کار مداوم با آن چشم اذیت می شود.

چه چیزی در ویژوال استودیو 2017 نسخه 15.8.7 تغییر کرده است؟

با آپدیت ویژوال استودیو به آخرین نسخه هنگامی که یک فرم را باز می‌کنید پیغام زیر نمایش داده می‌شود. این پیغام مشکل را به شما یادآوری و پیشنهاد می‌کند Scaling را بر روی 100% درصد قرار دهید. (کاری که تاکنون انجام می‌دادم).

دیزاینر ویژوال استودیو 2017 هنگامی که DPI بر روی 120% قرار دارد
دیزاینر ویژوال استودیو 2017 هنگامی که DPI بر روی 120% قرار دارد

گزینه‌ای که من را بسی خوشحال کرد "Restart Visual Studio as DPI-unaware process" بود که با کلیک بر روی این گزینه ویژوال استودیو ری‌استارت شده و نسبت به DPI سیستم "نا آگاه" می‌شود و مشکل تا حد زیادی برطرف می‌شود.

وقتی مزیتی هست، عیبی هم هست!

هنگامی که پروسه ویژوال استودیو ری‌استارت می‌شود پیغامی دیگر ظاهر می‌شود که به شما اطلاع می‌دهد این DPI-unaware بودن برای برنامه هایی که از XAML استفاده می‌کنند (مثل برنامه هایی که با WPF نوشته شده‌اند) ممکن است باعث نمایش نا‌صحیح شود. همچنین خود ویژوال استودیو کمی تار به نظر می‌رسد.

ویژوال استودیو 2017 در حالت DPI-unaware
ویژوال استودیو 2017 در حالت DPI-unaware

برای دانلود ویژوال استودیو می‌توانید به لینک زیر مراجعه کنید:

https://visualstudio.microsoft.com


ویژوال استودیومایکروسافتویندوز فرمبرنامه نویسیwinforms
ویرگول ایموجی ها را از این بخش حذف می‌کند!
شاید از این پست‌ها خوشتان بیاید