Textbox'ta Insert Tuşuna Müdahale?

Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Textbox nesnesinde Insert (Araya Yazı Girme) Modunu görebileceğimiz ve değiştirebileceğimiz ÖZELLİK nedir?

Ben kulağımı tersten göstererek bu özelliğe müdahale edip, değiştirebiliyorum.

Şöyleki form ilk yüklendiğinde Üstüne Yazma Kapalı olduğundan, Kullanıcının Insert Tuşuna Basmasına göre bir değişkene değer atayarak Bu özelliğin aktif yada pasif durumunu kontrol edebiliyorum.

Ve Sendkeys kodu ile Insert Modunu istediğime göre çeviriyorum. Örn. Eğer insert modunu kapatmak istiyorsam Insert Modu Açıksa Insert Tuşuna bas manasına gelen if TEXT1_INSERT_MODU=TRUE then sendkeys "{INSERT}" kodunu kullanarak işimi dolaylı yoldan çözüyorum.

Fakat textbox'ların karakteristiğini incelediğimde örneğin, 3 adet textbox'um varsa, hepsi kendi Üzerine Yazma modunu takip ediyor. Yani textbox1'de Üzerine Yazma açıkken, Textbox2'de kapalı oluyor. Buda bana nesnenin insert modunu bir özellikte takip ettiği izlenimini uyandırıyor.

UZUN LAFIN KISASI BENİM DEĞERLİ ÜSTADLARA SORUM ŞU;
Özellikle Textbox nesnesinde Üzerine Yazma Modunu (Insert tuşunun aktif pasifliğini) kontrol eden bir özellik varmı? Yoksa benim örnek dosyada yaptığım gibi alternatif çözümlerle mi işimizi görücez?

Vede yeri gelmişken değineyim, VBA ile ilgili başlangıç düzeyinde onlarca kaynak var. Hatta kitapların çoğu önce excelin yapısını, sonra fonksiyonları çok azda makroları anlatıyor. Microsoft VBA Help'i gibi tüm özellikler, olaylar, metotlar hakkında detaylı bilgi bulabileceğimiz kaynak varmı? Var diyorsanız bunlar neden D&R'larda bulunmaz. :mrgreen:
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,579
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

1. Kod İnsert tuşuna basınca uyarı veriri.

Kod:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 45 Then MsgBox "INSERT TUŞUNA BASTINIZ !"
End Sub
2. Kod ise İnsert tuşuna basınca hiçbir işlem yapmaz.

Kod:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 45 Then KeyCode=0
End Sub
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki kod ile "insert" tuşunun basılı olup olmadığını kontrol edebilirsiniz.

Kod:
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
 
Sub insertdurum()
If GetKeyState(45) = 0 Then
MsgBox "insert tuşu kapalıdır."
Else
MsgBox "insert tuşu açıktır."
End If
End Sub
 
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Teşekkürler üstad. Keycode'a 0 atamak, belirli durumlar için daha mantıklı bir alternatif oldu.

Fakat userformu yüklerken Üzerine Yazma Modu Kapalı geldiği için, Örneğin Devamlı olarak Üzerine Yazma Modunun Açık kalması için bir çözüm olmuyor.

Alternatifler ile çözüm bulunabiliyor. Başka alternatiflerde varsa fikirleri almak isterim.

Yukarıdada söylediğim gibi her nesnenin üzerine gelin ve değişik insert durumlarında bırakın. daha sonra tekrar seçtiğinizde, hangi moddaysa klavyeden bastığınız karakteri ona göre ekliyor. Şahsen veri giriş nesnelerinde Üzerine Yazma Modunu takip eden bir özellik varmış hissine kapılıyorum.

Örneğin atıyorum ismi textbox1.onwritemode veya textbox1.insmode VS. bunun gibi bişey olması gerekiyo gibi geliyo. Yada Controls("textbox1").onwritemode. (özellik isimleri atmacadır). Böyle bir özellik varmı? Varsa nedir?
 
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Sayın Leventm,

Alternatifiniz için teşekkür ediyorum.

Elimde Profosyoneller İçin Excel isimli muhteşem bir excel kitabı var. Kitabın seviyesi UZMANLAR İÇİN olduğu için benim düzeyimde anlaşılması baya zor oluyor.

O kitaptan dün klavye apilerine baktım. Getkeystate Apisi dediğiniz gibi çalışıyor. Fakat Insert tuşuna basılı olup olmaması direk sorunu çözmüyor. Zira dediğim gibi her nesne kendi Insert Modunu takip ediyor. Yani o an insert tuşunu basıldı mı, basılmadı mı, o tuş onmu ofmudan ziyade; o nesnenin Üzerine Yazma Modu açıkmı kapalımı onu takip etmek lazım. Örnek dosyama bakarsanız kendim de bunu Alternatif çözümlerle hallediyorum. Benim merak ettiğim böyle bir özelliklik mevcutmu?

Ki aslen, VBA bunu takip edebildiğine göre bir özellikte tutuyor. 3 tane textbox açıp herbirine ayrı insert tuşu özelliği ekleyin sonra textboxları değiştirin. O textboxu nasıl bıraktıysanız o halde üzerine yazıyor yada yazmıyor. Ben bunu nasıl bulamıyorum? o beni delirtti.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Benim bildiğim böyle bir hazır özellik yok, ama sizinde yaptığınız gibi bir çok çözüm bulunabilir, eğer textbox sayısı fazla ise class module kullanmanızı tavsiye ederim.
 
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Tavsiyeniz için teşekkürler. Bu textboxa tarih formatı girme konusunda geliştirmeye çalıştığım bir yöntemde karşılaştığım bir sorundu.

Nesne sayısı fazla ise class modulü kullanma konusunda fazla inceleme yapmamıştım. Class modülü öyle üstün körü okumuştum. Zaten VBA ve nesne tabanlı programlamaya kendimi yeni yeni adapte ediyorum. En kısa zamanda inceleyeceğim.
 
Üst