• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Soru Userformun her çözünürlüğe uyum göstermesi

Katılım
8 Mart 2019
Mesajlar
105
Excel Vers. ve Dili
2016 64 Bit
Arkadaşlar herkese iyi akşamlar.
Çözünürlük konusunda neredeyse her kodu denememe rağmen 1920 * 1080 çözünürlüğü olan bilgisayarımda hazırladığım userformu, diğer çözünürlükler de bir türlü uygun hale getiremedim. Bir tarafını yapsam bir tarafı görünmüyor, bir tarafı uysa nesneleri uymuyor. Yani bu konu hakkında verimli çalışan bir koda denk gelemedim. Bu konu hakkındaki varsa farklı kod veya farklı çözüm önerilerinizi dinlemek isterim.
 
Bir dizüsütü bilgisayara göre tasarım yapmanız işinizi görebilir. Eğer formun her bilgisayarda tam ekran çalışması zorunlu ise, formun "zoom" özelliği de işinize yarayabilir. Ancak, zoom özelliği için doğru sayıyı bulmada ekran çözünürlüğünü bildiren Win32 API fonksiyonuna ihtiyacınız olacak.

.
 
Hocam ben zaten dizüstü bilgisayarlarda hazırlamıştım. Şimdi tekrardan neler yapmam gerekli bilmiyorum. Bu konu hakkında gerçekten somut bir çözüme ihtiyacım var. Tam ekran olması şart değil yüklenilen çözünürlüğe uygun halde ortalansa kafii ama userformun içininde orantılı olması gerekli.
 
Aklıma gelen fikri söyleyeyim : Eğer çözünürlülük iki ise, iki userform oluşturun, hangi form hangi çözünürlülüğe uygun ise onu kullanırsınız. 2.Fikir : Form ve nesnelerin Width veya Height'lerini bir butona atayarak deneyiniz.
 

.
 
Haluk bey iyi geceler. Ben bu kodunuzu denemiştim ama başaramamıştım. Örnek olarak şu an bilgisayarımı 1280 * 720 çözünürlüğüne ayarladım. Oysa ki ben bu userformu kendi dizüstü bilgisayarımın önerilen çözünürlüğü olan 1920 * 1080 ebatında yapmıştım. Konuya dönecek olursak ayarladığım 1280*720 çözünürlüğü yukarıda bahsi geçen kodlara yazdığım da ekte göndermiş olduğum bir userform ile karşılaşıyorum.
 

Ekli dosyalar

  • 123.png
    123.png
    23.3 KB · Görüntüleme: 18
UserForm'u hazırladığınız sıradaki geçerli olan çözünürlüğünüz 1920 X 1080 ise, koda o değerleri yazacaksınız. Daha sonra değişik çözünürlükte denersiniz....

.
 
Doğru diyorsunuz hocam kendi asıl çözünürlüğümü koda yazınca bilgisayar ne çözünürlükte olursa olsun userform ve nesneleri orantılı bir hal aldı. Bunun için teşekkür ederim. Ben demek istediğinizi yanlış anlamışım o zaman. Yalnız bu verdiğiniz listbox ile ilgili bir şeyler eklememiz gerek sanırım. Çünkü listbox oran orantıyı sağlayamıyor. Diğer nesneler de sorun yok.
 
Form üzerindeki bir sürü nesneyi çekip, çekiştirince haliyle biraz sıkıntı olabilir tabii.... Yine de çok büyük problem olacağını sanmıyorum.

.
 
Haluk hocam aslında sorun Listboxun Columnwidths değerinin çözünürlüğe göre ayak uyduramaması. Listbox başlıkları olarak eklediğim labellerin altına asıl veriler gelmiyor. Alttan kaydırma çubuğu ile kaydırıyorum yani belirlediğim Columnwidths değeri sabit duruyor o yüzden bu sorun çıkıyor.
 
Baştan AddItem yöntemiyle verileri aldığım için geri rowsource yöntemini uygulayamadığım listboxa. Eğer başlıkları row yöntemiyle alabilseydim sanırım bu labelle olan uyumsuzlukta olmayacaktı.
 
Anlıyorum ..... olur mu bilmiyorum, ama şimdi aklıma geldi;

ListBox nesnesindeki ColumnWidth değerlerini siz ya "Properties" penceresinde ya da form ekrana gelirken bir şekilde sabit değerler veriyorsunuzdur, 100, 150, ... falan gibi.

Bunları formun siz formun "initialize" olayında ListBox'ın genişliğine orantılı olarak verseniz belki biraz daha işinize yarayan bir şey çıkabilir ortaya...

Örnek olarak 3 adet Column için;

Kod:
Private Declare Function GetSystemMetrics32 Lib "User32" Alias "GetSystemMetrics" _
(ByVal nIndex As Long) As Long
'
Private Sub UserForm_Initialize()
    Dim X1 As Long, Y1 As Long, Y2 As Long, X2 As Long
    Dim CX As Double, CY As Double
    Dim MyCtrl As Control
   
    '----------------------------------------------------------------------------
    ListBox1.ColumnCount = 3
    LBcolumn1 = ListBox1.Width / 3
    LBcolumn2 = ListBox1.Width / 3
    LBcolumn3 = ListBox1.Width / 3
   
    ListBox1.ColumnWidths = LBcolumn1 & ";" & LBcolumn2 & ";" & LBcolumn3
    '-----------------------------------------------------------------------------

    '
    X1 = 1920 '>>>> Orjinal ekran cozunurlugunuz
    Y1 = 1080 '>>>> Orjinal ekran cozunurlugunuz
    X2 = GetSystemMetrics32(0)
    Y2 = GetSystemMetrics32(1)
    CX = X2 / X1
    CY = Y2 / Y1
    Me.Width = Me.Width * CX
    Me.Height = Me.Height * CY
    For Each MyCtrl In Me.Controls
        MyCtrl.Top = MyCtrl.Top * CY
        MyCtrl.Left = MyCtrl.Left * CX
        MyCtrl.Width = MyCtrl.Width * CX
        MyCtrl.Height = MyCtrl.Height * CY
        On Error Resume Next
            MyCtrl.Font.Size = MyCtrl.Font.Size * CY
        On Error GoTo 0
    Next
End Sub

.
 
Hocam maalesef columnwidths değerinde bir orantı gerçekleşmedi. Ben de şöyle bir yöntem düşündüm hocam; kullanıcıya columnwidths değerlerini manuel girdirelim. Az önce deneme yaptım aslında columnwidhts değerlerim; 0,150,150,150,150,150,150,150 şeklinde. Denemem de bir text kutucuğuna kullanıcıya bunları manuel olarak girdirebiliriz. Örneğin;

Kod:
Private Sub TextBox7_Change()
On Error Resume Next

  ListBox1.ColumnWidths = TextBox7.Value

End Sub

O zaman kullanıcı başlıkları verilerle alt alta eşitleyebilir. Ya da kullanıcının işi kolaylaştırmak için deneyerek bulduğum 1280 * 768 ve 1280 * 960 için orantılı columnwidths değeri 0;100;100;100;83;115;100;100 şeklinde. Bu çözünürlükleri combobox içine alıp kullanıcıya seçtirdiğimizde columnwidths değeri yeniden şekillenebilir. Benim de aklıma başka bir şey gelmedi. Kolaya kaçtım sanırım. Zaten kaçabileceğim bu kadardı :)
 
Kullanıcının işini kolaylaştırmak için Combobox içerisine çözünürlüğümüzü ekleyelim ve listbox1'in columnwidths değerini label olan başlıklarla uyumlu hale getirelim.
Kod:
Private Sub ComboBox6_Change()
If ComboBox6.Value = "1280 * 768" Then

 ListBox1.ColumnWidths = "0;100;100;100;83;115;100;100"
 End If
 
End Sub
 
Bir ara aşağıdaki kodu deneyin, işinize yarayabilir....

ListBox1 nesnesinde 3 adet kolon olduğu varsayıldı, kolon genişlikleri eşit olarak ayarlandı....

Kod:
Private Sub UserForm_Initialize()
'   Haluk - 13/01/2020
'   sa4truss@gmail.com
    Dim X1 As Long, Y1 As Long, Y2 As Long, X2 As Long
    Dim CX As Double, CY As Double
    Dim MyCtrl As Control
    '
    
    X1 = 800 '>>>> Orjinal ekran cozunurlugunuz
    Y1 = 600 '>>>> Orjinal ekran cozunurlugunuz
    X2 = GetSystemMetrics32(0)
    Y2 = GetSystemMetrics32(1)
    CX = X2 / X1
    CY = Y2 / Y1
    Me.Width = Me.Width * CX
    Me.Height = Me.Height * CY
    For Each MyCtrl In Me.Controls
        MyCtrl.Top = MyCtrl.Top * CY
        MyCtrl.Left = MyCtrl.Left * CX
        MyCtrl.Width = MyCtrl.Width * CX
        MyCtrl.Height = MyCtrl.Height * CY
        On Error Resume Next
            MyCtrl.Font.Size = MyCtrl.Font.Size * CY
        On Error GoTo 0
    Next
    
    '----------------------------------------------------------------------------
    ListBox1.ColumnCount = 3
    LBcolumn1 = Replace(ListBox1.Width / 3 * Me.InsideWidth / Me.Width - 5, ",", ".")
    LBcolumn2 = Replace(ListBox1.Width / 3 * Me.InsideWidth / Me.Width - 5, ",", ".")
    LBcolumn3 = Replace(ListBox1.Width / 3 * Me.InsideWidth / Me.Width - 5, ",", ".")
    
    ListBox1.ColumnWidths = LBcolumn1 & ";" & LBcolumn2 & ";" & LBcolumn3
    '-----------------------------------------------------------------------------
End Sub
 
Geri
Üst