Genel Bakış
InkEdit (Microsoft InkEdit Control), kalem ya da dokunmatik girişle elle yazılan yazıyı tanıyıp metne çevirebilen, RichTextBox benzeri bir ActiveX denetimidir. Excel'in standart UserForm araç kutusunda yer almaz; Windows'ta Tablet PC/mürekkep bileşenleri kuruluysa Ek Denetimler (More Controls) listesinden eklenir. VBA ile çalışma sayfasına ya da UserForm'a yerleştirilip elle yazılan notların hücrelere aktarılmasında kullanılır.
Eklemek için şu adımları izleyin:
Denetime koddan erişmek için çoğu zaman geç bağlama kullanmak güvenlidir; böylece denetim kurulu olmayan bilgisayarda proje derlenirken hata vermez:
Makro çalışınca C sütununa sabitlerin sayısal değerleri yazılır. Örneğin IEM_Ink için 1, IEM_InkAndGesture için 2, IEM_InsertInk için 1 ve IES_Recognizing için 2 değeri görünür. Bu sayıları denetim kurulu olmayan bir bilgisayarda da InkMode ya da InkInsertMode özelliğine doğrudan atayabilirsiniz.
Makro her satırdaki metni B sütununa temizlenmiş biçimde yazar. İlk satırın sonucu Mehmet Kaya, ikinci satırın sonucu Ayşe Çelik olur. Gerçek projede aynı işlemi, InkEdit'ten gelen Text değerine uygulayıp sonucu hücreye yazarsınız.
Bu örnek, denetim ve MsgBox gerektirdiği için burada çalıştırılmaz. Denetim sayfada varsa kutudaki metin B2 hücresine yazılır; yoksa bir uyarı penceresi görünür. Çalışma sayfası denetimleri sayfa çalışma zamanında Object özelliğiyle kullanılır; bu nedenle ink değişkeni Object olarak tanımlanmıştır.
InkEdit nedir ve nasıl eklenir
InkEdit, Windows Tablet PC mürekkep (ink) altyapısının sunduğu bir denetimdir. Görünümü çok satırlı bir metin kutusuna benzer; ancak kullanıcı fareyle, kalemle ya da dokunmatik ekranla yazdığında çizgiler tanınır ve metne dönüştürülür. Klavyeyle yazılan metin de aynı kutuda tutulabilir.Eklemek için şu adımları izleyin:
- Çalışma sayfasına: Geliştirici > Denetimler > Ekle > Diğer Denetimler (Developer > Controls > Insert > More Controls) yolunu izleyin ve listeden InkEdit denetimini seçin.
- UserForm'a: VBA düzenleyicisinde araç kutusuna sağ tıklayıp Ek Denetimler (Additional Controls) seçeneğini açın ve InkEdit kutusunu işaretleyin.
- Bulunmuyorsa: bileşen bilgisayarda kayıtlı değildir. Bu durumda denetim listede görünmez ve kodda hata alırsınız.
Denetime koddan erişmek için çoğu zaman geç bağlama kullanmak güvenlidir; böylece denetim kurulu olmayan bilgisayarda proje derlenirken hata vermez:
VBA
4 satır
Dim ink As Object
Set ink = Worksheets("Sayfa1").OLEObjects("InkEdit1").Object
ink.InkMode = 1 ' mürekkep girişi açık
MsgBox ink.Text
Önemli özellikler
InkEdit'in özellikleri metin kutusu özellikleriyle mürekkebe özgü özelliklerden oluşur:- Text: kutudaki düz metni okur ya da yazar. Elle yazılıp tanınmış metin de buradan alınır.
- TextRTF: metni biçim bilgisiyle (RTF) birlikte verir.
- SelText, SelStart, SelLength: seçili metni, seçimin başlangıç konumunu ve uzunluğunu belirler.
- InkMode: mürekkep girişinin durumunu belirler: 0 kapalı (IEM_Disabled), 1 mürekkep açık (IEM_Ink), 2 mürekkep ve hareket (jest) tanıma açık (IEM_InkAndGesture).
- InkInsertMode: tanınan yazının nasıl ekleneceğini belirler: 0 metin olarak (IEM_InsertText), 1 mürekkep olarak (IEM_InsertInk).
- Status: denetimin durumunu verir: 0 boşta (IES_Idle), 1 yazı toplanıyor (IES_Collecting), 2 tanıma sürüyor (IES_Recognizing).
- UseMouseForInput: True ise fare de mürekkep girişi olarak kabul edilir; test için kullanışlıdır.
- Recognizer ve Factoid: kullanılacak el yazısı tanıyıcıyı ve beklenen girdi türünü (ör. sayı, tarih) belirler. Bu, tanıma başarısını artırır.
- MultiLine, Locked, ScrollBars, Enabled: standart metin kutusu davranışlarını denetler.
Önemli yöntemler ve olaylar
Yöntemler ve olaylar, mürekkep girişini izleyip tanıma sonucunu yakalamak için kullanılır:- Refresh: denetimi yeniden çizer.
- SetGestureStatus ve GetGestureStatus: hangi jestlerin (ör. silme, boşluk) tanınacağını ayarlar ya da sorgular.
- LoadFile ve SaveFile: içeriği dosyadan yükler ya da dosyaya kaydeder.
- Stroke: kullanıcı bir çizgi (vuruş) çizdiğinde oluşur.
- Gesture: bir jest algılandığında oluşur.
- Recognition: yazı tanınıp metne çevrildiğinde oluşur; tanınan metni hücreye aktarmak için en uygun yerdir.
- Change ve SelChange: metin ya da seçim değiştiğinde oluşur.
1. Sabitlerin sayısal değerlerini sayfaya yazma
Geç bağlamada InkEdit sabitleri tanınmaz; bu yüzden kodda sayısal değerlerini kullanırsınız. Aşağıdaki makro, sabitleri yerel Const olarak tanımlar ve değerlerini C sütununa yazar. Kodu standart bir modüle yapıştırın ve SabitleriYaz makrosunu çalıştırın.
VBA
27 satır
Option Explicit
Sub SabitleriYaz()
' InkMode sabitleri
Const IEM_Disabled As Long = 0
Const IEM_Ink As Long = 1
Const IEM_InkAndGesture As Long = 2
' InkInsertMode sabitleri
Const IEM_InsertText As Long = 0
Const IEM_InsertInk As Long = 1
' Status sabitleri
Const IES_Idle As Long = 0
Const IES_Collecting As Long = 1
Const IES_Recognizing As Long = 2
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("C2").Value = IEM_Disabled
ws.Range("C3").Value = IEM_Ink
ws.Range("C4").Value = IEM_InkAndGesture
ws.Range("C5").Value = IEM_InsertText
ws.Range("C6").Value = IEM_InsertInk
ws.Range("C7").Value = IES_Idle
ws.Range("C8").Value = IES_Collecting
ws.Range("C9").Value = IES_Recognizing
End Sub
InkEdit
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Sabit | Özellik | Değer |
| 2 | IEM_Disabled | InkMode | 0 |
| 3 | IEM_Ink | InkMode | 1 |
| 4 | IEM_InkAndGesture | InkMode | 2 |
| 5 | IEM_InsertText | InkInsertMode | 0 |
| 6 | IEM_InsertInk | InkInsertMode | 1 |
| 7 | IES_Idle | Status | 0 |
| 8 | IES_Collecting | Status | 1 |
| 9 | IES_Recognizing | Status | 2 |
SabitlerExcelDepo v1.0.0
2. Tanınan el yazısı metnini temizleme
El yazısı tanıma sonuçları çoğu zaman fazladan boşluk ve tutarsız büyük/küçük harf içerir. A sütunundaki tanınmış metinleri, InkEdit'in Text özelliğinden gelmiş gibi düşünün. Makro, fazla boşlukları siler ve her sözcüğün ilk harfini büyütür. Kodu standart bir modüle yapıştırıp MetniTemizle makrosunu çalıştırın.
VBA
18 satır
Option Explicit
Sub MetniTemizle()
Dim ws As Worksheet
Dim i As Long
Dim sonSatir As Long
Dim metin As String
Set ws = ActiveSheet
sonSatir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To sonSatir
' Fazla boşlukları temizle
metin = Application.WorksheetFunction.Trim(ws.Cells(i, 1).Value)
' Her sözcüğün ilk harfini büyüt
ws.Cells(i, 2).Value = StrConv(metin, vbProperCase)
Next i
End Sub
InkEdit
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Tanınan Metin | Temizlenmiş Metin |
| 2 | mehmet kaya | Mehmet Kaya |
| 3 | ayşe çelik | Ayşe Çelik |
| 4 | fatma öztürk | Fatma Öztürk |
| 5 | can aydın | Can Aydın |
| 6 | zeynep arslan | Zeynep Arslan |
El YazısıExcelDepo v1.0.0
3. InkEdit içeriğini hücreye aktarma
Çalışma sayfasına InkEdit1 adlı bir InkEdit denetimi eklediğinizi varsayın. Kullanıcı kutuya elle not yazar; makro bu notu B2 hücresine aktarır. Denetim yoksa makro hata vermeden uyarı gösterir. Kodu standart bir modüle yapıştırın ve denetimin bulunduğu sayfa etkinken ElYazisiniAktar makrosunu çalıştırın.
VBA
18 satır
Option Explicit
Sub ElYazisiniAktar()
Dim ink As Object
' Denetim yoksa hatayı yoksay ve kontrol et
On Error Resume Next
Set ink = ActiveSheet.OLEObjects("InkEdit1").Object
On Error GoTo 0
If ink Is Nothing Then
MsgBox "Bu sayfada InkEdit1 adlı denetim bulunamadı.", vbExclamation
Exit Sub
End If
' Tanınan metni hücreye yaz
ActiveSheet.Range("B2").Value = Trim(ink.Text)
End Sub
InkEdit
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Personel | Not Metni |
| 2 | Selin Yıldız |
Not FormuExcelDepo v1.0.0
Kullanırken dikkat edin
- Denetim her bilgisayarda yoktur: InkEdit, Excel ile gelen standart bir denetim değildir. Bileşen kurulu olmayan bir bilgisayarda dosya açıldığında denetim görünmeyebilir ya da hata alabilirsiniz. Dosyayı başkalarıyla paylaşacaksanız bunu önceden denetleyin.
- Geç bağlama kullanın: Denetimi Object türünde bir değişkenle kullanmak, başvuru eksik olduğunda derleme hatası almanızı önler. Böyle durumlarda sabit adları tanınmaz; sayısal değerleri kullanın ve gerekirse Const ile adlandırın.
- Yalnızca Windows: Denetim Windows'un mürekkep altyapısına dayanır. Excel'in Mac sürümünde ya da mürekkep bileşenleri kaldırılmış sistemlerde çalışmaz. Ayrıca 32 bit ve 64 bit Office sürümlerinde kayıtlı olan denetimler farklı olabilir.
- Tanıma başarısı: El yazısı tanıma, kullanılan tanıyıcının dil ayarına bağlıdır. Türkçe karakterlerin (ç, ğ, ı, ö, ş, ü) doğru tanınması için Türkçe tanıyıcının kurulu olduğundan emin olun. Sonucu hücreye yazmadan önce mutlaka gözle kontrol edin ya da Trim ile temizleyin.
- Olay yordamlarını açılır listeden oluşturun: Stroke, Gesture ve Recognition gibi olayların bağımsız değişkenleri vardır. Başlığı elle yazmak yerine kod penceresinin açılır listelerinden seçin; böylece bağımsız değişkenler doğru gelir.
- İlgili konular:
- TextBox: standart UserForm metin kutusu denetimi.
- Ek Denetimler: araç kutusuna ActiveX denetimi eklemek için kullanılır.
- OLEObjects: çalışma sayfasındaki ActiveX denetimlerine erişim koleksiyonu.
- UserForm: denetimleri barındıran kullanıcı formu.
- Trim ve StrConv: tanınan metni temizlemek için kullanılan VBA işlevleri.
- Geliştirici sekmesi: denetim ekleme ve tasarım modu işlemleri için gereklidir.
- KIRP: çalışma sayfasında fazla boşlukları silen işlev.