PDA

View Full Version : چگونه با تغییر مد کامپیوتر فرم ما نیز تغییر کند



YASNA
پنج شنبه 17 دی 1383, 12:00 عصر
با درود
یک برنامه در مد600*800 نوشته شده است هنگامیکه مد کامپیوتر تغییر می‌کند فرم از لحاظ انداز کوچکتر می‌شود و نوشته‌های ریزتر
چگونه می‌توان سایز فرم را تغییر داد هنگامی‌که مد تغییر می‌کند
با سپاس

JavanSoft
جمعه 18 دی 1383, 13:10 عصر
با Align

vcldeveloper
شنبه 19 دی 1383, 02:27 صبح
با ScaleBy هم میشه

YASNA
دوشنبه 21 دی 1383, 17:05 عصر
اگر یک کدی از برنامه را بگذارید ممنون می‌شوم
چون با ScaleBy به خوبی جواب نمی‌دهد

vcldeveloper
یک شنبه 27 دی 1383, 01:50 صبح
سلام،
می بخشید که با تاخیر جواب میدم. حدود یک هفته آن لاین نبودم!

تابع ScaleBy یک کنترل و تمامی کنترلهای فرزند آن را به یک نسبت مشخص تغییر اندازه میدهد. این نسبت از طریق پارامترهایی که به این تابع ارسال می کنید مشخص می شود. مثلا ScaleBy(50,100) یا ScaleBy(1,2) باعث می شوند که اندازه کنترل مورد نظر و اندازه کنترلهای فرزند آن 50% کاهش پیدا کند. پس اگر شما Form1 را با استفاده از ScaleBy تغییر اندازه بدهید، تمامی کنترلهای داخل فرم که خاصیت Parent آنها برابر با Form1 است نیز به همان نسبت تغییر اندازه پیدا خواهند کرد.

برای تغییر اندازه فرم برنامه متناسب با میزان Resolution کاربر، باید ابتدا نسبت بین Resolution پیش فرض برنامه و Resolution کاربر را بدست بیارید. مثلا اگر شما برنامه را در Resolution 1204 * 768 طراحی کردید و کاربر از Resolution 800 * 600 استفاده می کند:



Default Resolution = 1024 * 768 = 786,432

Target Resolution = 800 * 600 = 460,000

Ratio = Target Resolution / Default Resolution => 460,000 / 786,432 = 0.61

با توجه به محاسبات بالا وضوح تصویر سیستم کاربر 61% از وضوح تصویر پیش فرض برنامه هست پس باید از تابع ScaleBy بصورت زیر استفاده کرد تا فرم طراحی شده در 1024*768 در سیستمهای800 * 600 هم درست نمایش داده شود:



Form1.ScaleBy(61,100)


برای تغییر اندازه یک کنترل با توجه به وضوح تصویر سیستم کاربر می توانید از تابعی مثل این استفاده کنید:


procedure ResizeControl(Control: TWinControl; DefaultRes: TPoint);

var

Ratio: integer;

begin

Ratio := Trunc((Screen.Width * Screen.Height) / (DefaultRes.X * DefaultRes.Y) * 100);

Control.ScaleBy(Ratio,100);

end;

این تابع نام کنترل مورد نظر و همچنین وضوح تصویری که برنامه بر اساس آن طراحی شده است را می گیرد و کنترل مربوطه را متناسب با وضوح تصویر کاربر تغییر اندازه می دهد.

مثلا اگر فرمی با نام Form1 در وضوح تصویر 1024*768 طراحی شده و وضوح تصویر سیستم کاربر 800*600 باشد، اجرای تابع بصورت زیر باعث می شود که اندازه جدید فرم 61% از اندازه پیش فرض آن باشد:


ResizeControl(Form1, Point(1024,768));

دقت کنید که تابع ScaleBy (با توجه به نوع قرار گیری کنترلهای برنامه در فرم و مقادیر خصوصیات آنه) گاهی ا نتایج غیر منتظره هم ایجاد می کند! پس بهتر است که قبل از تحویل برنامه به کاربر یک بار برنامه را با وضوح تصویرهای مختلف آزمایش کنید.

موفق باشید