VBA: Common controls Enter/Exit events and fast WinAPI call with Type Library
Merhaba ziyaretçi !
Yaklaşık 4 ay önce manual olarak Type Library oluşturma üzerinde web araştırması yaparken tesadüfen şu bağlantı ile [VB6] Modern Shell Interface Type Library - oleexp.tlb karşılaştım. Bu proje daha önce karşılşatığım problemleri çözmemi ve yeni fikirler üretmede ufkumu açmamı sağladı. Fakat bu proje eski bir teknoloji (MKTYPLIB.EXE) ile derlendiği için yalnız 32 bit VBA/VB6 için kullanılabilir. Ben, Microsoft Interface Definition Language (MIDL.EXE) uygulaması ile hem 32, hem de 64 bit olarak TLB derlemeyi başardım. Handle ve Pointer kullanımı gerektiği durumlarda 32 ve 64 bit olarak ayrı ayrı derlenmesi zorunludur. Bunlar olmasaydı 32 bitlik bir TLB, 64 VBA ile de (veya tersi) kullanılabilirdi. Bu başlıkta Type Library (.tlb) dosyasının bize sağlayacağı faydaları göstereceğim.
TLB dosyası ilk olarak harici kitaplıklardaki metotları erken bağlama yöntemi ile çağırabilmemize yarar. Bildiğiniz gibi erken bağlama çağrıları hızlıdır. Eğer TLB' yi WinAPI metotlarını çağırmak için derlediysek, bu metotların çağrıları çok hızlı olacak. Ayrıca deklarasyon hatası veya mimari uyumsuzluğu gibi sorunlarımız da olmayacaktır.
Ufkumu açan şey ise, "acaba mümkün mü?" diyerek bulduğum bir çözüm. Bildiğiniz gibi MSForms TextBox, ComboBox ve CheckBox gibi nesneleri çalışma zamanı oluşturduğumuzda veya ortak Event oluşturduğumuzda Enter ve Exit olayları görülebilir değildi. Dünyada VBA tartışma platformlarında bunun bir Bug olduğu konusunda çokca konuşuldu ancak her nedense Microsoft tarafından bir türlü düzeltilmedi. Bu sorunun çözümü için neler yapılmadı ki... Class içinde Do-Loop döngüsünden tutun da, Windows pencere mesajları ile Form kontrolüne kadar farklı dolambaçlı ve tehlikeli (appcrash) çözümler üretildi. Oysa bunun çözümü bu iki Event'i TLB script dosyasında kopyala/yapıştır yapmak kadar kolay oldu. Başlarda FM20.DLL dosyasını patch' leyerek yayınlamayı düşünmüşdüm. Daha sonra harici TLB' ler olarak yayınlamakta karar kıldım.
Son olarak, bu TLB dosyalarının sisteme kaydedilmesi gerekmiyor. Bilgisayarınzda herhangi bir lokasyona yerleştirip References kutusunda Browse tuşu ile lazım olanı (32/64 bit olanı) eklemeniz yeterlidir. Yardım için Object Browser penceresindeki açıklamalar ile örnek Excel dosyasındaki kodlardan yararlanabilirsiniz.
Yazının sonunda bu çözümlerin kaynak kodlarını, derlenmiş TLB dosyalarını ve örnek Excel dosyasını indirebilirsiniz.
Kolay gelsin...
Download : Source & Compiled & Example Files (177 Kb)
Eline sağlık dostum....
YanıtlaSilEmeğinize sağlık.
YanıtlaSilTebrikler.. Elinize emeğinize sağlık..
YanıtlaSilElinize, emeğinize sağlık
YanıtlaSil