# Native Code > برنامه نویسی در Delphi > مباحث عمومی دلفی و پاسکال > سوال: بدست آوردن اینکه مانیتور چند اینچ است

## aliekhasteh

بدست آوردن اینکه مانیتور چند اینچ است

----------


## pezhvakco

سلام :
اینچ صفحه نمایش رو برای چی می خوای . اگه منظور شما رزولوشن صفحه است که این روش ها است :
ResX:=Screen.Width;
ResY:=Screen.Height;
یا
procedure SetResolution(ResX, ResY: DWord);
var
lDeviceMode : TDeviceMode;
begin
EnumDisplaySettings(nil, 0, lDeviceMode);
lDeviceMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT;
lDeviceMode.dmPelsWidth :=ResX;
lDeviceMode.dmPelsHeight:=ResY;
ChangeDisplaySettings(lDeviceMode, 0);
end;

مثال  =>
SetReolution(800,600);

برای راحت تر کار کردن با این سایت بهتره " جستجو " رو ابتدا انجام بدین ...

----------


## MohsenB

سلام

مانیتورها مشخصات زیادی دارن .

ازجمله این مشخصات به زبان ساده تعداد پیکسل در هر اینچ هست . مثلا میگن رزولوشن این صفحه نمایش 1024 در 768 هست . این یعنی تو این صفحه نمایش 1024 ستون پیکسل و 768 سطر پیکسل قرار داره . حالا اگه تعداد پیکسل در هر اینچ صفحه نمایش متفاوت باشه اندازه اون صفحه نمایش هم تغییر می کنه .

مشخصه دیگه سایز صفحه نمایشه که فاصله مثلا گوشه بالایی سمت چپ صفحه تا گوشه سمت راست پایینی صفحه نمایش بر حسب اینچ هست . مثلا میگن این صفحه نمایش 17 اینچه .


از دو مطلب بالا این نتیجه رو میشه گرفت که از روی رزولوشن نمیشود اندازه صفحه نمایش را تشخیص داد . مثلا ممکنه رزولوشن یه صفحه نمایش 19 اینچ 1200 در 768 باشه و رزولوشن یه صفحه نمایش دیگه ی 19 اینچ 1600 در 800 باشه .

برای اطلاعات بیشتر : یه مشخصه دیگه صفحه نمایش نسبت اندازه تصویره . مثلا 16:9 . این نشون دهنده یه صفحه نمایش عریضه که نسبت اندازه طول به عرض صفحه نمایش 16 به 9 میباشد .

موفق باشید .

----------


## aliekhasteh

مرسی از جوابتون اما میخوام dpi مانیتور رو در  رزولوشن های مختلف یا طول و عرض مانیتور رو به سانتیمتر یا اینچ بتونم بدست بیارم

----------


## MohsenB

> مرسی از جوابتون اما میخوام dpi مانیتور رو در  رزولوشن های مختلف یا طول و عرض مانیتور رو به سانتیمتر یا اینچ بتونم بدست بیارم


اینکه دوباره همون سواله که .

و جوابشم همون .

بطور خلاصه : همه مانیطورها تراکم پیکسل یکسان ندارند و نمی توان اندازه صفحه نمایش رو از رو رزولوشن بدست آورد . تنها راهش داشتن مشخصات صفحه نمایشی هایی هست که قراره روشون برنامه نمایش داده بشه ، مثلا بدونی مدل W2053 ال-جی مانیتور بیست اینچ با رزولوشن 1600x900 هست .

----------


## aliekhasteh

من می خوام از هر راهی که میشه اندازه مانیتور که چند اینچ یا چند سانت هست رو  پیدا کنم ، فکر می کنید راهی هست ؟

----------


## MohsenB

> من می خوام از هر راهی که میشه اندازه مانیتور که چند اینچ یا چند سانت هست رو  پیدا کنم ، فکر می کنید راهی هست ؟


بله یه راه خوب براتون پیدا کردم :

یه فرم درست کنید و یک کنترل Edit به نام Edit1 رو فرم بزارین و بعد یه دکمه رو فرم قرار بدین و توی کد دکمه این چندتا خط رو بنویسید . بعد از زدن دکمه اندازه صفحه نمایش توی کنترل ادیت نوشته میشه :


procedure TForm1.btn1Click(Sender: TObject);
var f : TForm;
    l : TLabel;
    t : TEdit;
    b : TButton;
    r : string;
begin
  f:= TForm.Create(self);
  with f do begin
    BorderStyle:= bsDialog;
    Width:= 300;
    Height:= 120;
    l:= TLabel.Create(f);
    l.SetBounds(10,10,200,30);
    l.Caption:= 'How mach size of your Display ?';
    l.Parent:= f;
    b:= TButton.Create(f);
    b.SetBounds(10,45,60,30);
    b.Caption:= 'OK';
    b.Parent:= f;
    t:= TEdit.Create(f);
    t.SetBounds(100,50,150,20);
    t.Parent:= f;
    t.TabOrder:= 0;
    b.ModalResult:= mrOk;
    b.Default:= True;
    ShowModal;
    r:= t.Text;
  end;
  Edit1.Text:= r;
end;

----------


## aliekhasteh

ممنون میشه یه توضیح کوچیک راجع به برنامتون بدین که دقیقا چیو بر می گردونه ؟؟ من سانت یا اینچ مانیتورو میخوام ....
دلیلش اینه که  یه TImage روی فرم داریم که  روی اون چند تا Lable وجود داره و این Lable ها مشخص میکنه که دقیقا تو اون نقطه عکس اون چیزی که میخوایم چاپ بشه ، حالا وقتی انو به quick Report میفرستیم برای اینکه دقیقا روی کاغذ واقعی هم هونجا چاپ بشه باید sclae عکس 100 باشه تا با quick report همخونی داشته باشه و یه چیز دیگه ای هم که میخواد اینه که دقیقا Top و Left  یه QRLabel رو هم بر حسب scale 100 حساب کنیم ، مثلا اگه وضوح صفحه نمایش 1440 در 900 است و Top و  Left لیبل روی فرم 120 و280 است ما باید یه سری محاسبه انجام بدیم و عدد sclae صفحه نمایش رو در 100 برای QRLabel  و   Top و  Left حساب کنیم که با اون عدد قبلی تفاوت خواهد داشت از چه راهی میشه اینچ مانیتور رو حساب کرد تا از روی اون بتونی به یه فرمول برسی و در هر رزولوشن که باشی Scale 100 رو برای محاسبه QRLabelهای روی Quick Report برای و   Top و  Left هاشون حساب کنی ؟؟؟؟

----------


## MohsenB

سلام

توضیح اون کد اینه :

تنها راه شما پرسیدن از کاربره .!



برا این کارایی که شما گفتین که نیاز به اینا ندارین .
اصلا صفحه نمایش هیچ تاثیری رو هیچ محاصبه ای نداره . شما باید بر اساس مقیاس فرمتون و مقیاس گزارشتون برنامه رو درست کنین . مثلا فرمتون مقیاسش پیکسل هست و گزارشتون مقیاسش سانتی متره ، شما باید اینارو به هم تبدیل کنید .
راه حل سادشم اینه که هر دوشون تو یه مقیاس باشن . مثلا هر دو پیکسل باشند .

موفق باشید .

----------


## aliekhasteh

واقعا ممنون از جوابتون ، خیلی خیلی جالبه

----------


## sarchat

بهترین راه برای بدست آوردن مشخصات سیستم :
برای مثال بدست آودرن مشخصات مانیتور:
MessageBox.Show("Monitor Size:" + SystemInformation.PrimaryMonitorSize);

----------


## fahimi

> بهترین راه برای بدست آوردن مشخصات سیستم :
> برای مثال بدست آودرن مشخصات مانیتور:
> MessageBox.Show("Monitor Size:" + SystemInformation.PrimaryMonitorSize);


 SystemInformation.PrimaryMonitorSize کدام unit باید یوز شود.
با تشکر

----------


## mghorbani2

سلام چطور میشه اندازه صفحه نمایش رو به اینچ از طریق HTML دریافت کرد؟

طول و عرض هم میشه به اینچ دریافت کرد؟ چند ماهه دنبالشم ولی جایی پید نکردم.

----------


## یوسف زالی

سلام. از طریق html یعنی چه؟
وقتی مشخصات مونیتور رو دریافت می کنید، یکی از اونها dpi یا دات پر اینچ است که مشخص می کنه در هر اینچ چند پیکسل وجود داره. با یک عملیات ساده می تونید اندازه واقعی رو هم بیرون بکشید.

----------


## prans68

double width = 0;
            double height = 0;
            double diagonal = 0;
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("\\root\\wmi", "SELECT * FROM WmiMonitorBasicDisplayParams");


                foreach (ManagementObject mo in searcher.Get())
                {
                    width = (byte)mo["MaxHorizontalImageSize"] / 2.54;
                    height = (byte)mo["MaxVerticalImageSize"] / 2.54;
                    diagonal = Math.Sqrt(width * width + height * height);
                    // Console.WriteLine("Width {0:F2}, Height {1:F2} and Diagonal {2:F2} inches", width, height, diagonal);


                }
                MessageBox.Show("width:" + width.ToString());
                MessageBox.Show("height:" + height.ToString());
                MessageBox.Show("diagonal:" + diagonal.ToString());
            }
            catch (ManagementException es)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + es.Message);
            }

----------


## amirhosseinazadi2005

سلام یه سوال داشتم
من میخاستم اینچ مانیتور کامپیوترم رو بدست بیارم
اگه اندازه فاصله گوشه بالایی سمت چپ تا گوشه پایینی سمت راست رو با اینچ اندازه بگیرم ، عدد به دست آمده همون سایز مانیتور میشه؟

----------


## یوسف زالی

سلام. از نظر تئوری بله. ممکنه سازنده ها به اسم مثلا 30 اینچ 29 اینچ بدن و قاب رو هم حساب کنن، ممکن هم هست نکنن

----------

