Excel UserForm ile Metinleri Mors İşaretlerine Dönüştürün
Mors alfabesinde harfler ve rakamlar, kısa ve uzun işaretlerden oluşan dizilerle temsil edilir. Bu çalışma kitabı, girilen metindeki desteklenen karakterleri nokta ve çizgi dizilerine dönüştüren bir Excel VBA örneğidir. İşlem bir çalışma sayfası formülü üzerinden değil, frmMorse adlı kullanıcı formu üzerinden yapılır. Formun üst alanına düz metin yazılır; karşılık gelen Mors işaretleri alt alanda görünür. DİNLE düğmesi, oluşturulan işaret dizisini Windows ses işleviyle kısa ve uzun seslere dönüştürür. Dosya hem yazılı dönüşümün hem de VBA UserForm içinden ses üretiminin nasıl kurulabileceğini gösteren küçük bir uygulamadır.Çalışma Sayfası ve Formun Açılması
Çalışma kitabında Sheet1 adlı tek görünür çalışma sayfası bulunmaktadır. Sayfada veri tablosu, hesaplama formülü, grafik veya adlandırılmış aralık bulunmaz. Asıl arayüz, çalışma sayfasındaki ActiveX komut düğmesinden açılan kullanıcı formudur. Bu ayrım önemlidir: boş hücrelerin görülmesi, dosyanın dönüştürme özelliğinin eksik olduğu anlamına gelmez. Uygulamanın metin giriş ve sonuç alanları hücrelerde değil form üzerindedir. Çalışma sayfası, formu açan düğmeyi barındıran başlangıç alanı olarak kullanılır. Dosyada ayrı bir sonuç sayfası veya çevirileri satır satır arşivleyen kayıt tablosu mevcut değildir.Form başlığında ExcelDepo.Com 2017 marka bilgisi bulunur. Üst bölümde Düz Metin etiketi ve giriş kutusu, alt bölümde Morse Kodu etiketi ve sonuç kutusu yer almaktadır. Alt tarafta DİNLE ve KAPAT düğmeleri bulunmaktadır. Düz metin kutusundaki değişiklik olayı, dönüşüm yordamını çağırır. Dolayısıyla yazılı sonucun oluşması için her değişiklikten sonra ayrı bir hesapla düğmesine basılması gerekmez. DİNLE düğmesinin görevi metni dönüştürmekten farklıdır; sonuç kutusunda oluşturulan işaretleri sırayla seslendirme işlemini başlatır. KAPAT düğmesi kullanıcı formunu kapatır; çalışma kitabını doğrudan kapatan bir dosya yönetimi komutu değildir.
Desteklenen Karakterler ve Kod Dizileri
VBA kodunda iki paralel dizi tanımlanmıştır. İlk dizi 0 ile 9 arasındaki rakamları ve A ile Z arasındaki Latin harflerini içerir. İkinci dizi aynı sırayla bu karakterlerin Mors karşılıklarını tutar. Örneğin A harfi .- biçiminde, B harfi -... biçiminde ve C harfi -.-. biçiminde gösterilir. S harfinin karşılığı üç nokta, O harfinin karşılığı üç çizgidir. SOS metni yazıldığında sonuç alanında ... --- ... işaret dizisi oluşur. Her karakterin kodundan önce bir boşluk eklenir; bu nedenle sonuç metninin başında da bir boşluk bulunması mevcut uygulamanın davranışıdır.Rakamlar da aynı dönüşüm tablosuna dahildir. Sıfır beş çizgi, bir nokta ve dört çizgi, iki iki nokta ve üç çizgi, beş beş nokta ile temsil edilir. Altıdan dokuza kadar olan rakamlarda çizgiler ve noktalar aynı tanımlı sırayla kullanılır. Bu dosya, yalnızca harflerden oluşan kelimeler için hazırlanmış bir dönüştürücü değildir; desteklenen rakamlar da metin içinde işlenir. Ancak noktalama işaretlerinin tümü için standart Mors tablosu bulunmaz. Çevrilecek karakterin iki dizideki eşleşmesi belirleyicidir. Açıklamada desteklenmeyen bir sembol için standart bir Mors karşılığı bulunduğu varsayılmamalıdır.
Boşluklar ve Türkçe Karakterlerin Davranışı
Metin içinde bulunan normal boşluklar dönüşüm sırasında atlanır. Örneğin A B girişi, A ve B harflerinin kodlarını aralarındaki normal kod ayırıcı boşlukla gösterir. Kelimeler arasındaki boşluk için ayrıca eğik çizgi, yedi birimlik işaret veya belirgin bir kelime ayırıcı üretilmez. Bu nedenle çıktı, özgün metindeki bütün kelime sınırlarını koruyan bir gösterim değildir. Birden fazla boşluğun varlığı da ayrıca kayıt altına alınmaz. Yalnızca boş metin girilirse sonuç kutusu boş kalır. Uygulamanın metin dönüşümü bu basit karakter taramasına dayanır; biçimlendirilmiş metin veya paragraf yapısını koruyan bir araç değildir.Ç, Ğ, İ, Ö, Ş ve Ü karakterleri dönüşüm tablosundaki A–Z dizisinde yer almaz. Bunlar tanınan bir Mors işareti dizisine çevrilmek yerine sonuç alanında karakter olarak kalabilir. Küçük harfler VBA UCase işlemiyle büyütülür; sonuç, sistemin büyük harfe çevirme davranışından etkilenebilir. Özellikle Türkçe i ve İ ayrımı, İngilizce harf tablosuyla birlikte dikkate alınmalıdır. Küçük harfle yazılmış sos örneği gerçek Excel testinde SOS ile aynı Mors sonucunu vermiştir. Bu kontrol, bütün Türkçe metinlerin veya her yerel karakter dönüşümünün desteklendiği anlamına gelmez. Güvenilir bir örnek için desteklenen büyük Latin harfleri ve rakamlar kullanılmalıdır.
Desteklenmeyen İşaretler ve Tek Yönlü Dönüşüm
Girişteki nokta, çizgi, yıldız ve soru işareti özel olarak ünlem işaretine dönüştürülür. Bu davranış, bu sembollerin normal harf gibi Mors tablosunda aranmasını engelleyen mevcut kodun bir parçasıdır. Diğer desteklenmeyen karakterler de sonuç alanında nokta ve çizgi dışındaki işaretler olarak kalabilir. Seslendirme yordamı bu tür işaretlere rastladığında, kısa veya uzun Mors sesinden farklı bir uyarı sesi çağırır. Böylece sonuç kutusunda görünen her karakterin standart bir Mors karşılığı olduğu varsayılmamalıdır. Desteklenen giriş alanı ile uygulamanın hata işaretlerini gösterebilmesi iki ayrı özelliktir.Bu çalışma kitabı Mors kodunu okuyup normal metne geri çeviren bir çözüm içermez. Sonuç kutusuna bir işaret dizisi yazılması, uygulamanın o diziyi harflere çözdüğü anlamına gelmez. Kullanılan diziler ve arama işlemi, düz metindeki karakterin karşılığını bulmak için düzenlenmiştir. Dosyanın amacı metinden işaretlere geçişi ve mevcut sonuç dizisinin seslendirilmesini göstermektir. Bir mesajın iki yönlü kodlanıp çözülmesi, radyo üzerinden iletilmesi veya dış bir aygıttan alınması gibi özellikler bulunmaz. Ağ bağlantısı, otomatik e-posta gönderimi veya başka kişilere mesaj ileten bir işlem de incelenen VBA kodunda yer almamaktadır.
Seslendirme Mantığı ve Zamanlama
Kısa işaretler Windows kernel32 Beep işleviyle 1000 Hz frekansında 85 milisaniyelik çağrılar olarak üretilir. Uzun işaretlerde aynı frekans, 215 milisaniyelik süreyle kullanılır. Bu çağrıların ardından kısa bir bekleme uygulanır. Sonuç metnindeki boşluklar ayrıca varsayılan bekleme süresini çağırır. Nokta ve çizgi dışındaki işaretler için farklı frekanslı uyarı çağrısı bulunmaktadır. Bu süreler, uygulamadaki sabit VBA değerleridir; kullanıcı formunda hızı veya frekansı ayarlayan ayrı bir kontrol bulunmaz. Seslerin bir dosyaya kaydedilmesi, dışa aktarılması veya bir müzik oynatıcısına aktarılması da mevcut özellikler arasında değildir.Dinleme işlemi sırasında düğme, durdurma davranışı için aynı olay yordamını kullanır. Ses dizisi karakter karakter işlenir ve durdurma durumu kontrol edilir. Yordamların içinde DoEvents bulunduğu için bekleme sırasında Excel olaylarının işlenmesine fırsat verilir. Bu yapı, gerçek zamanlı ses motoru veya profesyonel Mors eğitimi zamanlayıcısı olarak değerlendirilmemelidir. Windows ses üretim işlevinin çağrısı başarılı olsa bile işitilen ses, aygıtın ve oturumun ses ayarlarına bağlıdır. Yapılan doğrulamada Windows API çağrısının başarılı dönüşü ve gerçek dinleme yordamının tamamlanması kontrol edilmiştir; bu kayıt, kullanıcı cihazındaki sesin işitildiğine dair bir garanti değildir.
Güncellenmiş VBA Uyumluluğu
Özgün çalışma kitabındaki Beep bildirimi, eski Declare sözdizimini kullanmaktadır. Güncellenmiş sürümde VBA7 ortamları için PtrSafe bildirimi eklenmiş, daha eski VBA ortamları için mevcut bildirim koşullu dalda korunmuştur. Beep işlevinin frekans ve süre parametreleri Long olarak kalmıştır; bunlar bellek adresi olmadığı için rastgele LongPtr değişikliği yapılmamıştır. Bu düzenleme, modern 64 bit Excel'de ilgili Windows işlevinin derlenebilmesini sağlar. Form denetimleri, dönüşüm dizileri, kısa ve uzun ses değerleri ile uygulamanın tek yönlü dönüşüm amacı korunmuştur. Özgün sürümler arşivlenmiş, güncelleme ayrı sürüm olarak hazırlanmıştır.Bekleme yordamında günün gece yarısında Timer değerinin sıfıra dönmesi de ele alınmıştır. Başlangıç ve güncel zaman arasındaki fark negatif olduğunda bir günlük saniye farkı eklenir. Böylece kısa bekleme süresinin gece yarısı geçişinde yanlış karşılaştırma nedeniyle uzaması önlenir. Bu değişiklik harflerin Mors karşılıklarını veya ses uzunluklarını değiştirmez. Hesaplanan geçen süre, aynı gün içindeki ve gece yarısını aşan örneklerde ayrı olarak kontrol edilir. Uygulamada yeni bir ağ servisi, yeni sayfa veya başka bir mesajlaşma özelliği eklenmemiştir; düzenleme mevcut Windows ses ve bekleme işlevinin çalışabilirliğine odaklanır.
Kullanım ve Doğrulama
Dosya Excel masaüstü uygulamasında açılır. VBA ve ActiveX denetimlerinin çalışmasına izin veren uygun güvenlik koşulları sağlanmalıdır; çevrim içi Excel'de aynı kullanıcı formu işleyişi vaat edilmez. Çalışma sayfasındaki düğme ile form açılır. Düz Metin alanına desteklenen harf ve rakamlar yazılır. Morse Kodu alanındaki sonuç incelenir; istenirse DİNLE düğmesiyle mevcut dizi seslendirilir. Uzun metin yerine kısa örneklerden başlanması, sonuçları harf tablosuyla karşılaştırmayı kolaylaştırır. Makrolar veya ActiveX denetimleri engellenmişse boş çalışma sayfasının görülmesi, dönüşümün çalıştığını kanıtlamaz.Gerçek Excel doğrulamasında SOS, ABC, bütün rakamlar, boş metin, aralıklı harfler, küçük harfli sos, özel semboller ve desteklenmeyen Türkçe karakterler kullanılmıştır. Formun kendi dönüşüm yordamı çalıştırılarak sonuç kutusundaki metin kontrol edilmiştir. Windows Beep çağrısı ve SOS dinleme yordamı da ayrı incelenmiştir. Bir test kopyası kaydedilip yeniden açılmış; aynı dönüşüm tekrar doğrulanmıştır. Galeride gerçek çalışma sayfası ile gerçek frmMorse kullanıcı formu görüntülenir. Dosya, VBA kullanıcı formu, karakter eşleştirme ve yerel ses çağrısı konularını birlikte incelemek isteyenler için somut ve sınırlı bir Mors alfabesi uygulama örneğidir.
Epey eski dosyalarımızdandır, hazırlayan @Selman hocamdır.
Bu vesileyle O'na da teşekkürler.