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

basaksehirli

Altın Üye
Katılım
8 Mart 2019
Mesajlar
105
Excel Vers. ve Dili
2016 64 Bit
Altın Üyelik Bitiş Tarihi
05-05-2025
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.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,269
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
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.

.
 

basaksehirli

Altın Üye
Katılım
8 Mart 2019
Mesajlar
105
Excel Vers. ve Dili
2016 64 Bit
Altın Üyelik Bitiş Tarihi
05-05-2025
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.
 

Seyit Tiken

Uzman
Uzman
Katılım
23 Ağustos 2005
Mesajlar
4,651
Excel Vers. ve Dili
Excel : 2010
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

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi

.
 

basaksehirli

Altın Üye
Katılım
8 Mart 2019
Mesajlar
105
Excel Vers. ve Dili
2016 64 Bit
Altın Üyelik Bitiş Tarihi
05-05-2025
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

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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....

.
 

basaksehirli

Altın Üye
Katılım
8 Mart 2019
Mesajlar
105
Excel Vers. ve Dili
2016 64 Bit
Altın Üyelik Bitiş Tarihi
05-05-2025
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.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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.

.
 

basaksehirli

Altın Üye
Katılım
8 Mart 2019
Mesajlar
105
Excel Vers. ve Dili
2016 64 Bit
Altın Üyelik Bitiş Tarihi
05-05-2025
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.
 

basaksehirli

Altın Üye
Katılım
8 Mart 2019
Mesajlar
105
Excel Vers. ve Dili
2016 64 Bit
Altın Üyelik Bitiş Tarihi
05-05-2025
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ı.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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
.
 

basaksehirli

Altın Üye
Katılım
8 Mart 2019
Mesajlar
105
Excel Vers. ve Dili
2016 64 Bit
Altın Üyelik Bitiş Tarihi
05-05-2025
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ı :)
 

basaksehirli

Altın Üye
Katılım
8 Mart 2019
Mesajlar
105
Excel Vers. ve Dili
2016 64 Bit
Altın Üyelik Bitiş Tarihi
05-05-2025
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
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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
 
Üst