Soru Userform Başlangıç Pozisyonu

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Masaüstü programlarda çalışırken program pencereleri kullanıcının oluşturduğu ölçüde ve ekran konumunda açılabiliyor. VBA'da da bunu yapmak istiyorum. En azından ekran pozisyonu bıraktığım yerden başlasın istiyorum. Kayıtları reg. dosyasına yazabilirim. Sorun Userformu ekranda bir yere aldığımda, ekrandaki pozisyonunu belirleyecek bir komuta ihtiyacım var. Yani açık olan userformu hareket ettirdiğimde ekrandaki poziyonunu gösterecek bir yol var mıdır?
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Şöyle mi?

C#:
Private Sub UserForm_Initialize()
    Me.StartUpPosition = 0
    Me.Left = 100
    Me.Top = 300
End Sub
.
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
@Haluk bey bunu userforma yazacam ama left ve top değerlerini reg'den okuyacak. Userform ekranda hareket edince de ekrandaki pozisyonuna göre reg'e yazacak. Böylece userform son ekranda son bıraktığım yerden açılmaya devam edecek. Dosyayı kapatıp açsam bile reg'den okuyacağından her zaman son konumunu bulacak. Reg'den okuma yazma da sorunum yok. Sadece userformu ekranda hareket ettirince left ve top değerlerini ekrana göre nasıl bulabilirim onu bilmiyorum.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Test.gif


C#:
Private Sub UserForm_Layout()
    TextBox1 = Me.Left
    TextBox2 = Me.Top
End Sub
.
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
"UserForm_Layout" demek bu işe yarıyormuş. :) Teşekkür ederim @Haluk bey.
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Kod:
On Local Error Resume Next
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
pst = wsh.RegRead("HKCU\Win\Win\topleft_01")
If Err Then: Err.Clear: pst = "0|0"

With Me
.StartUpPosition = 0
.Left = Split(pst, "|")(0)
.Top = Split(pst, "|")(1)
End With
'......................................

Private Sub UserForm_Layout()
add = Val(Me.Left) & "|" & Val(Me.Top)
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
wsh.RegWrite "HKCU\Win\Win\topleft_01", add, "REG_SZ"
End Sub
Kodları da bu şekilde yazdım. Gayet iyi çalışıyor.
 
Son düzenleme:
Üst