PDA

View Full Version : مشکل اجرای برنامه در سیستم های مختلف با سایز مانیتور مختلف



malaki.davud
سه شنبه 20 خرداد 1393, 14:47 عصر
با سلام
من در برنامه ام یک عکس دارم که به زمینه ی فرمم قرار داده ام
بر روی این عکس یک linkLabel قرار می دهم که مکان قرار گیری ان باید یک مکان خاص بر روی زمینه فرم باشد ولی وقتی بر روی سیستم دیگه که سایز مانیتور ان با مانیتور من فرق می کنه مکان linkLabel تغییر می کنه

120058120057

irartesh
سه شنبه 20 خرداد 1393, 15:23 عصر
خب این خاصیت ویندوز فرمه که تو رزولوشن های مختلف مشکل داشته باشه...دوتا راه دارید
یا بیاید یه رابطه بین فاصله از گوشه ها و رزولوشن پیدا کنید یا اینکه از wpf استفاده کنید
البته چون من زود به wpf کوچ کردم دنبال راه حل این مشکلات نبودم...شاید دوستان راه بهتری پیشنهاد کنن

malaki.davud
سه شنبه 20 خرداد 1393, 16:19 عصر
کسی راه دیگه ای نداره

elec60
سه شنبه 20 خرداد 1393, 16:28 عصر
با سلام
من در برنامه ام یک عکس دارم که به زمینه ی فرمم قرار داده ام
بر روی این عکس یک linkLabel قرار می دهم که مکان قرار گیری ان باید یک مکان خاص بر روی زمینه فرم باشد ولی وقتی بر روی سیستم دیگه که سایز مانیتور ان با مانیتور من فرق می کنه مکان linkLabel تغییر می کنه

120058120057

Location مربوط به LinkLabel رو با استفاده از Location کنترل PictureBox و رزولوشن سیستم ست کن. یعنی Location مربوط به LinkLable باید تابعی باشه از رزولوشن سیستم و Location کنترل PictureBox.
البته اگه کلا بری رو WPF خیلی بهتره...

NASA's Spaceman
سه شنبه 20 خرداد 1393, 16:31 عصر
توی فرم لود برنامت، وسط صفحه نمایش رو بدست بیار
اینجوری روی هر نوع صفحه نمایشی که باشه وسط اون صفحه نمایش بدون مشکل اجرا میشه
و بعد یکمی هم خودت فرمت رو کوچیک تر کن چون چیزی که توی عکس بالا مشخص هست اندازه فرمت از اندازه های فرم استاندارد پیروی نمیکنه
با سپاس Spaceman

malaki.davud
سه شنبه 20 خرداد 1393, 16:36 عصر
یعنی Location مربوط به LinkLable باید تابعی باشه از رزولوشن سیستم و Location کنترل PictureBox.

می تونید با کد توضیح بدین

keyone72
سه شنبه 20 خرداد 1393, 16:37 عصر
حاجی تو wpf هم این مشکل هست چه ربطی داره

من خودم یه کلاس ساختم از اون استفاده میکنم
کلی روش زحمت کشیدم

*رزولیشن مانیتوری که نرم افزار رو با اون خروجی میگیری مهم هست

*ماله من 1920*1080 بوده تو کد اگه رزولیشنتون فرق میکنه ماله خودتو بزار جای ماله من یعنی بزار جای (1080*1920)


***این طوری صداش بزن

public void Setting_Form_Load(object sender, EventArgs e)
{
Screen scrn = Screen.FromControl(this);
scrn = Screen.PrimaryScreen;

if (scrn.Bounds.Height < 1080 && scrn.Bounds.Width < 1920)
{
foreach (Control c in this.Controls)
{
Resolution.ResolutionControls(this, c);
}
Resolution.ResolutionForm(this);
}
else
{
foreach (Control c in this.Controls)
{
Resolution.ResolutionControls_mfh(this, c);
}
Resolution.ResolutionForm_mfh(this);
}
}

***اینم از کلاس:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MKfeeNet_Server
{
static class Resolution
{
public static void ResolutionForm(Form a)
{

Screen scrn = Screen.FromControl(a);
if (scrn == null)
{
scrn = Screen.PrimaryScreen;
}
int deskHeight = scrn.Bounds.Height;
int deskWidth = scrn.Bounds.Width;
int Width = deskWidth;
int Heigth = deskHeight;
int FormHeight = a.Size.Height;
int FormWidth = a.Size.Width;
int WidthFormNew = ((FormWidth * deskWidth) / 1920 ) +65;//...............Width Resulation
int HeightFormNew = ((FormHeight * deskHeight) / 1080) +65; //...............Height Resulation
a.Size = new Size(WidthFormNew , HeightFormNew );
a.StartPosition = FormStartPosition.Manual;
a.Location = new Point((deskWidth - WidthFormNew) / 2, (deskHeight - HeightFormNew) / 2);

//And for font size
foreach (Control control in a.Controls)
{
control.Font = new Font(control.Font.FontFamily, (deskWidth / deskHeight) * control.Font.Size);
}
}
public static void ResolutionControls(Form B, Control A)
{
Screen scrn = Screen.FromControl(B);
if (scrn == null)
{
scrn = Screen.PrimaryScreen;
}
int deskHeight = scrn.Bounds.Height;
int deskWidth = scrn.Bounds.Width;
int Width = deskWidth;
int Heigth = deskHeight;
int FormHeight = B.Size.Height;
int FormWidth = B.Size.Width;
int WidthFormNew = ((FormWidth * deskWidth) / 1920 ) + 65; //...............Width Resolution
int HeightFormNew = ((FormHeight * deskHeight) / 1080 ) +65; //...............Height Resolution
int WidthControl = A.Size.Width;
int HeightControl = A.Size.Height;
A.Size = new Size(WidthFormNew * WidthControl / FormWidth, HeightFormNew * HeightControl / FormHeight);
int LocationControlX = A.Location.X;
int LocationControlY = A.Location.Y;
A.Location = new Point(WidthFormNew * LocationControlX / FormWidth, HeightFormNew * LocationControlY / FormHeight);
}



public static void ResolutionForm_mfh(Form a)
{

Screen scrn = Screen.FromControl(a);
if (scrn == null)
{
scrn = Screen.PrimaryScreen;
}
int deskHeight = scrn.Bounds.Height;
int deskWidth = scrn.Bounds.Width;
int Width = deskWidth;
int Heigth = deskHeight;
int FormHeight = a.Size.Height;
int FormWidth = a.Size.Width;
int WidthFormNew = ((FormWidth * deskWidth) / 1920) ;//...............Width Resulation
int HeightFormNew = ((FormHeight * deskHeight) / 1080) ; //...............Height Resulation
a.Size = new Size(WidthFormNew, HeightFormNew);
a.StartPosition = FormStartPosition.Manual;
a.Location = new Point((deskWidth - WidthFormNew) / 2, (deskHeight - HeightFormNew) / 2);

//And for font size
foreach (Control control in a.Controls)
{
control.Font = new Font(control.Font.FontFamily, (deskWidth / deskHeight) * control.Font.Size);
}
}
public static void ResolutionControls_mfh(Form B, Control A)
{
Screen scrn = Screen.FromControl(B);
if (scrn == null)
{
scrn = Screen.PrimaryScreen;
}
int deskHeight = scrn.Bounds.Height;
int deskWidth = scrn.Bounds.Width;
int Width = deskWidth;
int Heigth = deskHeight;
int FormHeight = B.Size.Height;
int FormWidth = B.Size.Width;
int WidthFormNew = ((FormWidth * deskWidth) / 1920) ; //...............Width Resolution
int HeightFormNew = ((FormHeight * deskHeight) / 1080); //...............Height Resolution
int WidthControl = A.Size.Width;
int HeightControl = A.Size.Height;
A.Size = new Size(WidthFormNew * WidthControl / FormWidth, HeightFormNew * HeightControl / FormHeight);
int LocationControlX = A.Location.X;
int LocationControlY = A.Location.Y;
A.Location = new Point(WidthFormNew * LocationControlX / FormWidth, HeightFormNew * LocationControlY / FormHeight);
}



}
}

malaki.davud
سه شنبه 20 خرداد 1393, 16:44 عصر
ماله من 1920*1080 بوده تو قسمتی که کلاس رو صدا میزنی تو فرم لود اگه رزولیشنتون فرق میکنه ماله خودتو بزار

خوب ممکنه روی سیستم های مختلفی برنامه اجرا شود
کد بدست اوردن رزولیشن سیستمی که برنامه در ان اجرا می شود را کسی می دونه ؟؟؟

keyone72
سه شنبه 20 خرداد 1393, 16:49 عصر
خوب ممکنه روی سیستم های مختلفی برنامه اجرا شود
کد بدست اوردن رزولیشن سیستمی که برنامه در ان اجرا می شود را کسی می دونه ؟؟؟

نه عزیز منظورم رزولیشن سیستمی هست که شما برنامه رو در اون بیلد میکنید یعنی از تو ویژوال استودیو اونو بیلد میکنید

csharpprogramer88
سه شنبه 20 خرداد 1393, 16:53 عصر
http://barnamenevis.org/showthread.php?164851-%D8%AA%D9%86%D8%B8%DB%8C%D9%85-%D8%B3%D8%A7%DB%8C%D8%B2-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%87%D8%A7-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%A7%D8%AA%D9%88%D9%85%D8%A7%D8%AA%DB%8C%DA%A9-%D8%AF%D8%B1-%D9%87%D8%B1-%D8%B1%D8%B2%D9%88%D9%84%D9%88%D8%B4%D9%86&highlight=resize

به تاپیک سر بزن چیز خوبیه پست 6 هم نحوه استافده توضیح داده شد

keyone72
سه شنبه 20 خرداد 1393, 16:57 عصر
http://barnamenevis.org/showthread.php?164851-%D8%AA%D9%86%D8%B8%DB%8C%D9%85-%D8%B3%D8%A7%DB%8C%D8%B2-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%87%D8%A7-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%A7%D8%AA%D9%88%D9%85%D8%A7%D8%AA%DB%8C%DA%A9-%D8%AF%D8%B1-%D9%87%D8%B1-%D8%B1%D8%B2%D9%88%D9%84%D9%88%D8%B4%D9%86&highlight=resize

به تاپیک سر بزن چیز خوبیه پست 6 هم نحوه استافده توضیح داده شد

اون کامپوننت واسه وقتیه که فرم رو ریسایز میکنی کنترل ها هم به همراهش جابه جا بشن
ولی مشکل دوستمون یه چیز دیگس

omid nasri
سه شنبه 20 خرداد 1393, 19:15 عصر
در قسمت Properties ، یک گذینه هست با نام : ancher اگه اشتباه ننوشته باشم که مطما نوشتم، اون رو باز کن و همه تیک ها رو بزن :

Top ,Left, Right , Botton

سوداگر
سه شنبه 20 خرداد 1393, 20:06 عصر
حاجی تو wpf هم این مشکل هست چه ربطی داره
قسمت پنجم: عدم وابستگی به رزولوشن صفحه نمایش در WPF (http://barnamenevis.org/showpost.php?p=499791&postcount=8)

keyone72
سه شنبه 20 خرداد 1393, 20:13 عصر
قسمت پنجم: عدم وابستگی به رزولوشن صفحه نمایش در WPF (http://barnamenevis.org/showpost.php?p=499791&postcount=8)

با فرم های بدون border
کانل تست شده هم روی lcdهم روی crt
به هیچ وجه اون چیزی نیست که نوشته اصلا متناسب با رزولیشن تغییر نمیکنه

سوداگر
سه شنبه 20 خرداد 1393, 20:18 عصر
با فرم های بدون border
کانل تست شده هم روی lcdهم روی crt
به هیچ وجه اون چیزی نیست که نوشته اصلا متناسب با رزولیشن تغییر نمیکنه

تا وقتی heigh و width رو تنظیم نکنید به رزولوشن وابسته نیست خودشم گفته وقتی این دو خاصیت رو تنظیم میکنید عملا از پیکسل به عنوان واحد اندازه گیری استفاده میکنید و با winform فرقی نداره ولی وقتی ست نکنید wpf از واحد diu استفاده میکنه که متناسب با dpi صفحه نمایش ها تنظیم میشه (به صورت نسبی)

hidden68
سه شنبه 20 خرداد 1393, 22:02 عصر
روی فرمت کلیک کن
خاصیت anchore
باهاش کار کنی متوجه میشی
فک کنم مشکلت حل شه

malaki.davud
چهارشنبه 21 خرداد 1393, 10:20 صبح
روی فرمت کلیک کن
خاصیت anchore
باهاش کار کنی متوجه میشی
فک کنم مشکلت حل شه

این خاصیت رو پیدا نکردم
120077

nazanin366
چهارشنبه 21 خرداد 1393, 11:20 صبح
خاصیت anchor رو باید رو شی قرار بدی.رو فرم جواب نمیده

Amir4317
چهارشنبه 21 خرداد 1393, 19:05 عصر
خاصیت anchor که دوستان گفتند بهترین روشه بزارید روی Topو Button شما Label رو انتخاب کن و در Propertiesش دوتا دستگیره بالا پایین رو بزن.

malaki.davud
چهارشنبه 04 تیر 1393, 23:19 عصر
اینا روش رو امتحان کردم باز هم مشکل دارم
کسی راه حلی تست شده نداره ؟؟؟

malaki.davud
یک شنبه 08 تیر 1393, 15:43 عصر
کسی راه حلی نداره

malaki.davud
دوشنبه 09 تیر 1393, 13:07 عصر
با سلام
در این مورد کسی پروژه ای ندارد

MiniMicro
دوشنبه 09 تیر 1393, 16:28 عصر
سلام از این کد ها استفاده کنید امیدوارم مشکلتون حل شه....

this.Width = Screen.PrimaryScreen.WorkingArea.Width;
this.Height = Screen.PrimaryScreen.WorkingArea.Height;

malaki.davud
سه شنبه 10 تیر 1393, 09:23 صبح
سلام از این کد ها استفاده کنید امیدوارم مشکلتون حل شه....

با تشکر ولی باز همین مشکل را دارم؟؟

malaki.davud
چهارشنبه 11 تیر 1393, 14:15 عصر
:گریه::گریه::گریه::گریه:

ahad123
پنج شنبه 12 تیر 1393, 11:35 صبح
اخرش چی شد این مشکل حل نشد

malaki.davud
پنج شنبه 12 تیر 1393, 15:10 عصر
من که همچنان این مشکل رو دارم