VisualStudio 2008’de Ekran Çözünürlüğünü Değiştirmek

Ekran çözünürlüğü değiştirmek için araştırmalarım sonucunda Vb.net’te kullanabileceğim bir kod buldum. Eğitim yazılımları için çok yararlı bir işlev gören çözünürlük, aynı zamanda yanlış yapılandırmalar ve kullanımlar sonucunda  projenin çöpe atılmasına da neden oluyor. Bu yüzden örnek bir proje yazıp paylaşmak istedim. Öncelikle tam ekranı nasıl oluşturabiliriz, onu açıklayayım. Tam ekran oluşturmak için aşağıdaki sırayı izleyeceğim.

  1. Formun çerçevesini kaldırmak.
  2. Formun açıldığı anda yüksekliğinin ve genişliğinin maksimum olmasını sağlamak.
  3. Son olarak  Formu başlat çubuğu ve diğer programların önünde çıkması için en üste getirmek.

Formun Çerçevesini Kaldırmak

Vb.Net’de çerçeveyi kaldırmak için Properties penceresinden FormBorderStyle=None yaparak yada aşağıdaki kodu kullanarak kaldırabiliyoruz.

Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None

veya

Me.FormBorderStyle = 0

Formu Tam Ekran Yapmak

Formumuzu tam ekran yapmak için Properties penceresinden WindowsState=Maximized yaparak yada aşağıdaki kodu kullanarak yapabiliriz.

Me.WindowState = FormWindowState.Maximized

veya

Me.WindowState = 2

Formu En Üstte Tutmak

Sıra formumuzu en üstte göstermeye geldi. Bunun için yine Properties penceresinden TopMost=True  yada aşağıdaki kodu kullanmamız yetecektir.  

Me.TopMost = True

veya

Me.TopMost = 1

Şimdi bu komutları Formun yüklenmesi anında sırayla yazdığımızda tam ekran olacaktır. Fakat tam ekran olduğunda, kontrol butonları (simge durumuna küçültme, tam ekran yapma, kapatma) olmadığından bir tane buton ekleyin. Click olayına da End komutunu kullarak formun kapatılmasını sağlayın. Yeni hali aşağıdaki gibi olacak.

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click

         End

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load

         Me.FormBorderStyle = 0
         Me.WindowState = 2
         Me.TopMost = 1

End Sub

Şimdi projeyi en altaki linkten indirebilirsiniz. Kaynak kodu aşağıda paylaştım. Bu kod sizin çözünürlüğü değiştirmenize yarayan koddur. Şimdi adım adım nasıl yerleştirileceğini de anlatıyım. 

  • Aşağıdaki kodu Formunuzun ilk satırına eklemeniz lazım. ( “Public Class Form1” ‘den önce gelecek)
Imports System.Runtime.InteropServices

  • Aşağıdaki kod ise Public Class Form1 ile End Class arasına gelecek. Yeni formunuzun içine yapıştıracaksınız. 
Private Declare Auto Function EnumDisplaySettings Lib "user32.dll" ( _
ByVal lpszDeviceName As String, _
ByVal iModeNum As Int32, _
ByRef lpDevMode As DEVMODE _
) As Boolean

Private Declare Auto Function ChangeDisplaySettings Lib "user32.dll" ( _
ByRef lpDevMode As DEVMODE, _
ByVal dwFlags As Int32 _
) As Int32

Private Const DM_BITSPERPEL As Int32 = &H40000
Private Const DM_PELSWIDTH As Int32 = &H80000
Private Const DM_PELSHEIGHT As Int32 =&H100000

Private Const DISP_CHANGE_SUCCESSFUL As Int32 = 0
Private Structure POINTL
Public x As Int32
Public y As Int32
End Structure
Private Structure DEVMODE_union1
' struct {
Public dmOrientation As Int16
Public dmPaperSize As Int16
Public dmPaperLength As Int16
Public dmPaperWidth As Int16
' }
Public dmPosition As POINTL
End Structure
Private Structure DEVMODE_union2
Public dmDisplayFlags As Int32
Public dmNup As Int32
End Structure
Private Structure DEVMODE
Private Const CCDEVICENAME As Int32 = 32
Private Const CCFORMNAME As Int32 = 32
Public dmDeviceName As String
Public dmSpecVersion As Int16
Public dmDriverVersion As Int16
Public dmSize As Int16
Public dmDriverExtra As Int16
Public dmFields As Int32
Public u1 As DEVMODE_union1
Public dmScale As Int16
Public dmCopies As Int16
Public dmDefaultSource As Int16
Public dmPrintQuality As Int16
Public dmColor As Int16
Public dmDuplex As Int16
Public dmYResolution As Int16
Public dmTTOption As Int16
Public dmCollate As Int16

Public dmFormName As String
Public dmUnusedPadding As Int16
Public dmBitsPerPel As Int16
Public dmPelsWidth As Int32
Public dmPelsHeight As Int32
Public u2 As DEVMODE_union2
Public dmDisplayFrequency As Int32
Public dmICMMethod As Int32
Public dmICMIntent As Int32
Public dmMediaType As Int32
Public dmDitherType As Int32
Public dmReserved1 As Int32
Public dmReserved2 As Int32
Public dmPanningWidth As Int32
Public dmPanningHeight As Int32
End Structure

Public Function SetResolution( _
ByVal Width As Int32, _
ByVal Height As Int32, _
ByVal BitsPerPixel As Int16 _
) As Boolean
Dim dm As DEVMODE
If Not EnumDisplaySettings(Nothing, 0, dm) Then
Return False
Else
With dm
.dmFields = _
DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
.dmPelsWidth = Width
.dmPelsHeight = Height
.dmBitsPerPel = BitsPerPixel
End With
Return (ChangeDisplaySettings(dm, 0) = DISP_CHANGE_SUCCESSFUL)
End If
End Function

  • Aşağıdaki kodda olduğu gibi de kullanabilirsiniz.  (Not: Benim çözünürlüğüm normalde 1280*800 olduğundan dolayı çıkışta eski haline gelmesi için bu şekilde yaptım. Siz kendinize göre şu an kullandığınız çözünürlüğü yazınız. )  
Private Sub Form1_DoubleClick(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles Me.DoubleClick

Debug.Assert(SetResolution(1280, 800, 32))
End

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load

Debug.Assert(SetResolution(1024, 768, 32))
Me.FormBorderStyle = 0
Me.WindowState = 2
Me.TopMost = 1

End Sub

Bu dönem Programlama Dilleri 2 bünyesinde final projemiz Eğitim Yazılımı hazırlamak olacak. Sınıf arkadaşım Emin Topaloğlu‘nun  Trafik İşaretleri Yazılımı için hazırlamış olduğu arka planı kullanarak basit bir proje hazırladım. Bu dosyayı arka planı çalmamak koşuluyla (:)) kodları istediğiniz gibi kullanabilirsiniz.

Bu proje alttaki linkte mevcuttur. Projeyi indirmeme durumunuzu gözönüne alarak projeyi ve kaynak kodları ayrı ayrı koyuyorum. 

Bu arada çözünürlükten kaynaklanan hatalardan sorumlu tutulmazsam sevinirim 😉

Son olarak kısa bir ipucu paylaşmak istiyorum. Geliştirmek isteyen arkadaşlar bu yolu izleyebilirler. Program başlamadan önce Ekran Çözünürlüğünü önceden alıp bir dosyaya kaydedebilir veya Regedit’de uygun bir bölüm açıp oraya koyabilirler. Program kapatılmaya kalkışıldığında ise dosyadan veya RegEdit’te açmış olduğu bölümden, veriyi çekip çözünürlüğü eski hale getirebilir. Bunu söylememin nedeni her monitörde çözünürlükler birbiri ile aynı olmayabiliyor. Birisinde 1024*768 desteklerken bir diğerinde 1024*800 destekliyor. Program kapatıldığında eski haline dönerken uygun bir çözünürlük seçmezseniz kullanıcı arkanızdan güzel güzel konuşur. 🙂 Olabilecek hataları veya görüşlerinizi alt tarafta Yorumlar bölümünde paylaşmayı unutmayınız. 😉

Cozunurluk Degistirme [Form1 Kodlari] (VisualStudio Icin Kullanilabilir) (968)
Cozunurluk Degistirme Full Proje (VisualStudio2008) (884)
This entry was posted in VisualBasic.Net and tagged , , , , , . Bookmark the permalink.

9 Responses to VisualStudio 2008’de Ekran Çözünürlüğünü Değiştirmek

  1. ulkardan says:

    ya bende çalışmadı bu nerde hata olduğunu da bulamadım kontrol ettim bir yerinde new yazdım falan ama yine de olmadı yardımcı olursanız sevinirim

  2. Ehocam says:

    Peki dostum işletim sistemin nedir? Hangi dosyada hangi satırda verdi o hatayı ? Çünkü final projemde yazdığım programda bunu kullandım. Programlama hocası programın vistada hata verdiğini söyledi. 🙁

  3. adem says:

    Hata muhtemelen framework uyuşmazlığından kaynaklanıyordur, işletim sistemi ile ilgili bir problem oluşacağını zannetmiyorum.

  4. Ehocam says:

    adem ;

    proje de framework kullanmıyoruz. Aslında framework lü bir çalışma yapılsa daha iyi olacaktır. Bu projede Vb 6’daki gibi api kullanıyorum. Belki işletim sisteminden kaynaklanan sorun, bu yüzden olabilir diye düşünüyorum.

    Yorumun için teşekkürler.

  5. kaan says:

    Program başlamadan önce Ekran Çözünürlüğünü önceden alıp bir dosyaya kaydedebilir veya Regedit’de uygun bir bölüm açıp oraya koyabilirler. Program kapatılmaya kalkışıldığında ise dosyadan veya RegEdit’te açmış olduğu bölümden, veriyi çekip çözünürlüğü eski hale getirebilir.

    demişsiniz. Tam da yapmaya çalıştığım şey bu. Bunu projenize dahil edebilir misiniz? Bize bunu da öğretir misiniz? 🙂

  6. Ehocam says:

    @kaan;

    Elbette yazarım. Ama final sınavlarım ve projelerim yüzünden biraz zaman alabilir. Adem AKTEPE’nin bu makalesi sana yardımcı olabilir.

  7. Ehocam says:

    @kaan;

    Ayrıca Settings üzerinde saklama yöntemi ile ilgili yeni bir yazı yazdım. Umarım işine yarar.

    Visual C# ve Vb.Net İle Ekran Çözünürlüğünü Değiştirme – 2

Leave a Reply

Your email address will not be published. Required fields are marked *