1 Son düzenleyen, mmmiko (22.01.2010 16:35:33)

Konu: Ekran Çözünürlüğünü tesbit etmek.

Hazırladığım programı kullanıcıların kullandıkları ekran çözünürlüklerine göre alternatifli çalıştırmak istiyorum. Bunun için programın çalıştığı andaki ekran çözünürlüğünü 1024 x 768, 1280 x 800 gibi döndürecek bir fonksiyon veya procedure ihtiyacım var yardımcı olursanız sevinirim.

2

Re: Ekran Çözünürlüğünü tesbit etmek.

Sanırım "hazıra konmak" genlerimizde var.
1. adım: www.google.com
2. adım: vfp screen resolution sorgu şeritine yazmak
3. adım: ilk linke girmek. http://www.tek-tips.com/viewthread.cfm?qid=1394826
4. adim: Aha! demek

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

3 Son düzenleyen, ugurlu2001 (22.01.2010 17:00:13)

Re: Ekran Çözünürlüğünü tesbit etmek.

Mikail; forumda bu konuda örnek olması lazımdı smile

Arama kısmına baktın mı?

http://www.fox4um.com/topic/234/ekran-c … gistirmek/

( Toplam 1 dk sürmedi )

smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

4 Son düzenleyen, metin (22.01.2010 17:20:57)

Re: Ekran Çözünürlüğünü tesbit etmek.

Mehmet K yazdı:

Sanırım "hazıra konmak" genlerimizde var.
1. adım: www.google.com
2. adım: vfp screen resolution sorgu şeritine yazmak
3. adım: ilk linke girmek. http://www.tek-tips.com/viewthread.cfm?qid=1394826
4. adim: Aha! demek

arkadaş yardım istemiş. herkesin ingilizcesi olmayabilir. agresif olmaya gerek yok. kaldı ki benim ingilizcem olduğu halde güzel bir çözüm ben de bulamamıştım. çetin'den bu forumda aldım en güzel çözümü:

not: bu arada verdiğin linkte sorunun çözümü yok... smile

Visual Fox Pro
Lparameters lnWidth, lnHeight

If Pcount() # 2
    If Vartype(_Screen.LastWidth)="U"
        Return
    Else
        lnWidth=_Screen.LastWidth
        lnHeight=_Screen.lastHeight
    Endif
Endif
Clear
#Define ENUM_CURRENT_SETTINGS -1
#Define CDS_UPDATEREGISTRY = 0x01
#Define CDS_TEST 0x02
#Define DISP_CHANGE_SUCCESSFUL 0
#Define DISP_CHANGE_RESTART 1
#Define DISP_CHANGE_FAILED -1
#Define DM_PELSWIDTH 0x00080000
#Define DM_PELSHEIGHT 0x00100000
 
Declare Integer EnumDisplaySettings In win32API ;
    string deviceName,;
    integer modeNum, ;
    string @ lpdevMode
 
Declare Long ChangeDisplaySettings In win32API ;
    string lpDevMode, ;
    integer dwflags
 
lpdevMode = Replicate(Chr(0),512)
 
EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS,@lpdevMode)
 
* Save previous resolution
 
_Screen.AddProperty("LastWidth",CToBin(Substr(m.lpdevMode,109,4),"4RS"))
_Screen.AddProperty("LastHeight",CToBin(Substr(m.lpdevMode,113,4),"4RS"))
* Check if not the same, no use to change when the same
If _Screen.LastWidth # m.lnWidth or _Screen.LastHeight # m.lnHeight
    Wait Window "Ekran çözünürlüğü ayarlanıyor..." At Srows()/2,Scols()/2-10 Nowait
    lpdevMode = Stuff(m.lpdevMode,41,4,BinToC(DM_PELSWIDTH+DM_PELSHEIGHT,"4RS"))
    lpdevMode = Stuff(m.lpdevMode,109,4,BinToC(lnWidth,"4RS"))
    lpdevMode = Stuff(m.lpdevMode,113,4,BinToC(lnHeight,"4RS"))
    result = ChangeDisplaySettings(m.lpdevMode,CDS_TEST)
    If !( result = DISP_CHANGE_SUCCESSFUL )
*Wait Window "Mode not supported." Timeout 1
        Return .F.
    Else
        ChangeDisplaySettings(m.lpdevMode,0)
    Endif
Endif
Return
Endfunc
 
*!*    Source Code From Cetin BASOZ
*!*    To use it, just place it somewhere in your app like this:
*!*    ChangeRes(1024,768)
*!*    That means I am forcing the screen to have a resolution of 1024x768. When I exit my main form, in the unload event I place this:
*!*    ChangeRes(_Screen.LastWidth,_Screen.lastHeight)
*!*    And that would restore the previous screen resolution.
Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

5 Son düzenleyen, ugurlu2001 (22.01.2010 17:37:28)

Re: Ekran Çözünürlüğünü tesbit etmek.

Metin, sadece sordum ve linki verdim, agresiflik filan yok.  smile

Senin kodunla aynı zaten link...

Sakin gel ...

smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

6

Re: Ekran Çözünürlüğünü tesbit etmek.

@metin
Evet, mmmiko nun sorusuna bende cevap bilmiyordum. Merak ettim ve google'a girdim.

Evet, ilk linkte 1:1 çözüm yok. Ama ilk satırı gördükden sonra ben Aha! dedim ve diğer satırlara bakmadım bile.
2. ve 3. linkede baktiktan sonra "sorunsuz çözülür" diye defteri kapatım.

Ayrıca cevabım agresiv değildi. Sadece arkadaşa gelecekte bir sorunu nasıl çözebilir diye bir yol gösterdim. İnglizce bilmiyorsa google bu tür yazılıları sonderece iyi türkçeye ceviriyor.
Ben şahsen herhangi bir foruma bir soru sormadan evvel, saatlerce araştırırım. Ve sorumu sorarken, o ana kadar çabalarımı aktarırım, yani "bakın, şunu şunu yaptım, şuraya kadar geldim, ama burda tıkanıyorum ..." gibi.
mmmiko gibi soru tarsı bence tepkisiz kabul görmemesi lazım.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

7

Re: Ekran Çözünürlüğünü tesbit etmek.

ilginiz için hepinize teşekkür ederim.
ilki kimseyi  agresif bulmadım.
ikincisi google yerine kendimize ait forumda çözüm aramak daha uygun olur diye düşündüm.
üçüncücü kendi forumuzda arama yaptım bulduğum örnek çözünürlüğü değiştirmeye yönelikti yine de o örneği inceledim fakat ekranın o anki çözünürlüğünü o örnek üzerinden tesbit edemedim.

8

Re: Ekran Çözünürlüğünü tesbit etmek.

http://www.tek-tips.com/viewthread.cfm?qid=1394826
linki içinde teşekkür ederim. bu linkde verilenden örneği görmeden önce _screen genişlik ve yüksekliğini tesbit ederek 11 değişik ekran çözünürlüğü için kodumu geliştirdim. Ben sadece 11 tane if veya case e gerek kalmadan bir iki satır ili halledebilirmiyim diye fikirlerinizi almak istemiştim. Tekrar ilginize teşekkür ederim.

9

Re: Ekran Çözünürlüğünü tesbit etmek.

? ALLTRIM(STR(SYSMETRIC(1)))+" x "+ALLTRIM(STR(SYSMETRIC(2)))

yukarıdaki kod ile bu sorun çözülüyor.
Mehmet arkadaşımıza bir cümle yazmak yerine bir kamyon laf etme zahmetine girdiği için ayrıca teşekkür ederim. Soru tarzımı tepkisiz kabullenmemende senin tarzın demekki. Bence birbirimizi sorgulamaktansa "Sorularımızı forumda sorup diğer arkadaşlarında faydasına sunalım" prensibini benimsemek de bir bakış açısıdır, bunuda göz ardı etmemek gerekir.

10

Re: Ekran Çözünürlüğünü tesbit etmek.

Mikail,
Hem Ugur'un verdigi linkte, hem de Metin'in burada verdigi kodda o anki cozunurlugu tespit etmek de var, degistrimek de, Metin'in verdigi kodda:

Visual Fox Pro
* Save previous resolution

 
_Screen.AddProperty("LastWidth",CToBin(Substr(m.lpdevMode,109,4),"4RS"))
_Screen.AddProperty("LastHeight",CToBin(Substr(m.lpdevMode,113,4),"4RS"))
* Check if not the same, no use to change when the same
If _Screen.LastWidth # m.lnWidth or _Screen.LastHeight # m.lnHeight

bolumunu atladin sanirim:)

11

Re: Ekran Çözünürlüğünü tesbit etmek.

Çetin hocam sebebini anlamadım ama o bölüm hata oluşturduğu için Mehmet arkadaşımızın verdiği linkdeki
? ALLTRIM(STR(SYSMETRIC(1)))+" x "+ALLTRIM(STR(SYSMETRIC(2))) ile hallettim. İlginize teşekkür ederim.

12

Re: Ekran Çözünürlüğünü tesbit etmek.

O hata vermez sadece kullanilan CtoBin() parametreleri eski versiyonlarda yoktu, Belki senin VFP eskidir,