Delphi ile monitör oranını bulmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
adasis
Üye
Mesajlar: 17
Kayıt: 20 Eki 2010 06:53

Delphi ile monitör oranını bulmak

Mesaj gönderen adasis »

Arkadaşlar merhaba;
Delphi ile yazılan bir programımız var, kare ekran ve WS ekran için iki ayrı tasarım yapıldı,

Şimdi sorunum şu;
Ayrı bir exe oluşturup kurulum esnasında o exeyi çalıştırıp monitörün durumuna göre gerekli setup'ın çalıştırılmasını sağlamak. Yani 4:3 ekranlar için 1.exe'yi, 16:9 ekranlar için 2.exe'yi çalıştırmalı, fakat monitörleri bu şekilde nasıl algılatabilirim.

Şimdiden herkese teşekkür ederim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Delphi ile monitör oranını bulmak

Mesaj gönderen sabanakman »

Ekran Genişliğinin, yüksekliğine oranını Screen.Width / Screen.Height şeklinde elde edebilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
adasis
Üye
Mesajlar: 17
Kayıt: 20 Eki 2010 06:53

Re: Delphi ile monitör oranını bulmak

Mesaj gönderen adasis »

Cevabınız için teşekkür ederim, fakat benim aradığım örneğin 1024/768 oranı değil,
ekran çözünürlüğünü alıp bir işlemden geçirip bu 4:3 kare veya 16:9 WS bir monitör diyebilmeliyim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Delphi ile monitör oranını bulmak

Mesaj gönderen sabanakman »

Az miktarda matematikle bu iş hallolacaktır..:
Örnek..1: (1024x768)
1024/768=1,33333
4/3=1,3333
Demek ki çözünürlük 1024x768 ise 4:3 oranında kare ekran kullanılıyor demektir.

Örnek..2:(1920x1080)
1920/1080=1,777777
16/9=1,77777
Demek ki çözünürlük 1920x1080 ise 16:9 oranında geniş ekran kullanılıyor demektir.


Sonuç olarak Screen.Width/Screen.Height oranı 1.333.. ise kare ekran 1.777... ise geniş ekran var demektir.

Kod: Tümünü seç

if Round(Screen.Width/Screen.Height*100)=133 then ShowMessage('Kare Ekran')
else ShowMessage('Geniş Ekran');
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
adasis
Üye
Mesajlar: 17
Kayıt: 20 Eki 2010 06:53

Re: Delphi ile monitör oranını bulmak

Mesaj gönderen adasis »

Crvabınıza teşekkür ederim.
Bende bu şekilde bir yol izledikten sonra 1280x1024 ekran çözünürlüğüne gelince burada cevap aramak istedim,

1280/1024=1.25 çıkıyor,
1280/768=1.66

bu şekildede tüm çözünürlüklerden emin olamıyorum,
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Delphi ile monitör oranını bulmak

Mesaj gönderen sabanakman »

Bu çözünürlükler zaten 4:3 ve 16:9 oranına giremezler. Zira bir diğer formülle,

Genişlik/16=Yukseklik/9 -> 16:9
Genişlik/4=Yukseklik/3 -> 4:3

şeklinde sağlaması yapılabilir. Bu bahsi geçen çözünürlükler bu 16:9 ve 4:3 oranlarının dışında kaldığı için tahmini bir ortalama değer bularak ona göre bir şart verilebilir. Mesela Genişlik/Yükseklik 1.5 değerinin altında kalırsa Kare ekran, bu değerin üstünde olursa geniş ekran gibi bir formül üretilebilir. Tabi 1.5 oranını deneme yapmadan atıyorum. Bu oranı siz uygulamalı olarak deneyerek daha ideal başka bir değer elde edebilirsiniz.

Kod: Tümünü seç

if Round(Screen.Width/Screen.Height*100)<150 then ShowMessage('Kare Ekran')
else ShowMessage('Geniş Ekran');
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Delphi ile monitör oranını bulmak

Mesaj gönderen Lost Soul »

Kod: Tümünü seç

Function Oran ( Genislik,Yukseklik : Integer): string;
  function gcd(num1, num2: integer): integer;
  var
    remainder: integer;
  begin
    remainder := num2 mod num1;
    if (remainder <> 0) then
      result := gcd(remainder, num1)
       else
      result := num1;
  end;
  var
    agcd : Integer;
Begin
  agcd := gcd(Genislik,Yukseklik);
  Result := Format('%d:%d',[Genislik div agcd,Yukseklik div agcd]);
end;

Kod: Tümünü seç

  Showmessage(Oran(1024,768)); //4:3
  Showmessage(Oran(1280,1024)); //5:4
  Showmessage(Oran(1920,1080));//16:9
  Showmessage(Oran(800,600));//4:3
Cevapla