Aracılığıyla paylaş


Denetim Metni İşlemlerini Düzenle

Sistem, kullanıcı tarafından başlatılan tüm metin işlemlerini otomatik olarak işler ve işlemler tamamlandığında uygulamaya bildirir.

Aşağıdaki konular kullanıcı tarafından başlatılan metin işlemlerini ve uygulamanın yanıtını ele alır:

Düzenleme Denetimi Seçme

Kullanıcı, fareyle tıklayarak veya sekme tuşuna basarak bir düzenleme denetimi seçebilir. Sekme yöntemi, sistemin sağladığı önceden tanımlanmış bir klavye arabiriminin parçasıdır. Bu arabirimin tam açıklaması için bkz. İletişim Kutuları. Kullanıcı bir düzenleme denetimi seçtiğinde sistem denetime klavye odağını verir (klavye girişi hakkında "Klavye Odağı ve Etkinleştirme" bölümüne bakın) ve ters video kullanarak metni vurgular.

Metin Ayarlama ve Alma

Bir uygulama, SetWindowText işlevini, SetDlgItemText işlevini kullanarak veya denetime bir WM_SETTEXT iletisi göndererek düzenleme denetiminin metnini ayarlayabilir.

Düzenleme denetiminden tüm metni almak için, önce GetWindowTextLengthişlevini veya WM_GETTEXTLENGTH iletisini kullanarak metni içermek için gereken arabellek boyutunu belirleyin. Ardından, GetWindowText işlevini, GetDlgItemText işlevini veya WM_GETTEXT iletisini kullanarak metni alın.

Metin Seçme

Düzenleme denetimini seçtikten sonra, kullanıcı fareyi veya klavyeyi kullanarak denetimdeki metni seçebilir. Uygulama, denetime bir EM_GETSEL iletisi göndererek düzenleme denetimindeki geçerli seçimin başlangıç ve bitiş karakter konumlarını alabilir. Bitiş konumunun dönüş değeri, seçimdeki son karakterden (yani, seçilen son karakteri izleyen ilk karakterin konumu) büyük bir değerdir.

Bir uygulama, denetime seçimin başlangıç ve bitiş karakter dizinlerini içeren bir EM_SETSEL iletisi göndererek düzenleme denetimindeki metni de seçebilir. Örneğin, uygulama düzenleme denetiminden metin silmek için EM_REPLACESEL ile EM_SETSEL kullanabilir.

Bu üç ileti hem tek satırlı hem de çok satırlı düzenleme denetimleri için geçerlidir.

Metni Değiştirme

Uygulama, düzenleme denetimindeki seçili metni değiştirmek için denetime bir EM_REPLACESEL iletisi göndererek yeni metni işaretçiyle değiştirebilir. Geçerli bir seçim yoksa, EM_REPLACESEL ekleme noktasına yeni metni ekler. Değiştirme metni kullanılabilir belleği aşarsa uygulama bir EN_ERRSPACE bildirim kodu alabilir. Bu ileti hem tek satırlı hem de çok satırlı düzenleme denetimleri için geçerlidir.

Uygulama, düzenleme denetiminin metninin bir kısmını değiştirmek için EM_REPLACESEL veya tümünü değiştirmek için SetDlgItemTextişlevinikullanabilir.

Düzenleme Denetimi Tarafından Kullanılan Yazı Tipini Değiştirme

Uygulama, WM_SETFONT iletisini göndererek düzenleme denetiminin kullandığı yazı tipini değiştirebilir. Çoğu uygulama, WM_INITDIALOG iletisini işlerken bunu yapar. Yazı tipinin değiştirilmesi düzenleme denetiminin boyutunu değiştirmez; WM_SETFONT iletisini gönderen uygulamaların metnin yazı tipi ölçümlerini alması ve düzenleme denetiminin boyutunu yeniden hesaplaması gerekebilir. Yazı tipleri ve yazı tipi ölçümleri hakkında daha fazla bilgi için bkz. Yazı Tipleri ve Metin.

Kesme Kopyalama Yapıştırma ve Temizleme İşlemleri

Düzenleme denetimiyle pano arasında metin taşımak için dört ileti vardır. WM_COPY iletisi, düzenleme denetiminden silmeden geçerli seçimi (varsa) bir düzenleme denetiminden panoya kopyalar. WM_CUT iletisi, düzenleme denetimindeki geçerli seçimi (varsa) siler ve silinen metni panoya kopyalar. WM_CLEAR iletisi, geçerli seçimi (varsa) düzenleme denetiminden siler, ancak panoya kopyalamaz (kullanıcı SHIFT tuşuna basmadığı sürece). WM_PASTE iletisi, metni panodan ekleme noktasındaki düzenleme denetimine kopyalar. Bu dört ileti hem tek satırlı hem de çok satırlı düzenleme denetimleri için geçerlidir.

Microsoft Windows NT 4.0 ve üzeri: Düzenleme denetimi, kullanıcının düzenleme denetimiyle pano arasında metin taşımasını kolaylaştıran yerleşik bir bağlam menüsü içerir. Kullanıcı denetime sağ tıkladığında bağlam menüsü görüntülenir. Bağlam menüsündeki komutlar Geri Al, Kes, Kopyalakopyala , Yapıştır , Silsil ve TümSeç 'i içerir.

Metni Değiştirme

Kullanıcı düzenleme denetiminde metin seçebilir, silebilir veya taşıyabilir. Sistem, denetimin içeriğinin değiştirilip değiştirilmediğini belirten her düzenleme denetimi için bir iç bayrak tutar. Sistem, denetimi oluşturduğunda bu bayrağı temizler ve denetimdeki metin her değiştirildiğinde bayrağı ayarlar. Uygulama, denetime bir EM_GETMODIFY iletisi göndererek değişiklik bayrağını alabilir. Uygulama daha sonra denetime bir EM_SETMODIFY iletisi göndererek değişiklik bayrağını ayarlayabilir veya temizleyebilir. Bu iletiler hem tek satırlı hem de çok satırlı düzenleme denetimlerine uygulanır.

Kullanıcı Girilen Metni Sınırlama

Kullanıcının düzenleme denetimine girebileceği metin miktarı için varsayılan sınır 32 KB'tır. Bir uygulama, denetime bir EM_SETLIMITTEXT iletisi göndererek varsayılan sınırı değiştirebilir. Bu ileti, kullanıcının düzenleme denetimine girebileceği bayt sayısıyla sabit bir sınır ayarlar, ancak ileti gönderildiğinde zaten denetimde olan metinleri veya SetDlgItemText işlevi veya WM_SETTEXT iletisi tarafından denetime kopyalanan metinleri etkilemez. Örneğin, uygulamanın düzenleme denetimine 500 bayt yerleştirmek için SetDlgItemText işlevini kullandığını ve kullanıcının 500 bayt (toplam 1.000 bayt) girdiğinizi varsayalım. Uygulama daha sonra kullanıcı tarafından girilen metni 300 baytla sınırlayan bir EM_SETLIMITTEXT iletisi gönderirse, düzenleme denetiminde zaten bulunan 1.000 bayt orada kalır ve kullanıcı daha fazla metin ekleyemez. Öte yandan, uygulama kullanıcı tarafından girilen metni 1.300 baytla sınırlayan bir EM_SETLIMITTEXT iletisi gönderirse, 1.000 bayt kalır, ancak kullanıcı 300 bayt daha ekleyebilir.

Kullanıcı bir düzenleme denetiminin karakter sınırına ulaştığında, sistem uygulamaya EN_MAXTEXT bildirim kodu içeren bir WM_COMMAND iletisi gönderir. Bu bildirim kodu, belleğin tükendiği anlamına gelmez, ancak kullanıcı tarafından girilen metin sınırına ulaşıldığı anlamına gelir; kullanıcı daha fazla metin giremez. Bu sınırı değiştirmek için uygulamanın denetime daha yüksek sınıra sahip yeni bir EM_SETLIMITTEXT iletisi göndermesi gerekir.

EM_SETLIMITTEXT ve EN_MAXTEXTkullanımına örnek olarak, uygulamanın düzenleme denetiminde kullanıcıyı dört karakterden fazla sınırlamaması gerektiğini varsayalım. Uygulama, dört karakterlik bir sınır belirtmek için EM_SETLIMITTEXT kullanır. Kullanıcı beşinci karakter girmeyi denediğinde sistem uygulamaya bir EN_MAXTEXT bildirim kodu gönderir.

Karakter ve Çizgi İşlemleri

Düzenleme denetimindeki karakterler ve satırlar hakkında bilgi döndüren birkaç ileti vardır. İletilerin çoğu bir karaktere veya satıra başvurmak için genellikle sıfır tabanlı bir sayı olan bir dizin döndürür. Örneğin, n karakter içeren tek satırlı düzenleme denetiminde, satır dizini sıfırdır ve karakterler sıfırdan n-1'e dizinlenir. M çizgileri ve n karakter içeren çok satırlı düzenleme denetiminde, satırlar sıfırdan m-1'e, karakterler ise sıfırdan n-1'e dizinlenir. Karakter dizini oluşturmanın satır sonlarını yoksaydığını unutmayın.

Uygulama, düzenleme denetimine WM_GETTEXTLENGTH iletisi göndererek düzenleme denetimindeki karakter sayısını belirleyebilir. Bu ileti, tek satırlı veya çok satırlı düzenleme denetimindeki metnin uzunluğunu (sonlandırıcı null karakter dahil değil) karakter olarak döndürür. EM_LINELENGTH iletisi, satırdaki bir karakterin karakter dizini tarafından belirtilen bir satırın uzunluğunu karakter olarak döndürür. Döndürülen uzunluk seçili karakter içermiyor. Bir uygulama bu iletileri tek satırlı veya çok satırlı düzenleme denetiminde kullanabilir.

EM_GETFIRSTVISIBLELINE iletisi, çok satırlı düzenleme denetiminde en üstteki görünür satırın sıfır tabanlı dizinini veya tek satırlı düzenleme denetimindeki ilk görünür karakterin sıfır tabanlı dizinini döndürür. Uygulama, EM_GETLINE iletisini düzenleme denetimine göndererek bir düzenleme denetimindeki satırı arabelleğe kopyalayabilir. Satır, satır dizini tarafından belirtilir ve alan arabelleğin ilk sözcüğü arabelleğe kopyalanacak en fazla bayt sayısını içerir. Dönüş değeri kopyalanan bayt sayısıdır. Bu ileti tek satırlı veya çok satırlı düzenleme denetiminde de kullanılabilir.

Çok satırlı düzenleme denetimindeki bir satır hakkındaki bilgileri döndürmek için kullanılabilecek benzersiz iletiler vardır. EM_GETLINECOUNT iletisi, düzenleme denetimindeki satır sayısını döndürür. EM_LINEFROMCHAR iletisi, belirtilen karakter dizinini içeren satırın dizinini döndürür. EM_LINEINDEX iletisi, belirtilen satırdaki ilk karakterin dizinini döndürür.

Düzenleme Denetiminde Metni Kaydırma

Düzenleme denetiminde kaydırma uygulamak için, Denetim Türlerini ve Stillerini Düzenle'nde açıklanan otomatik kaydırma stillerini kullanabilir veya düzenleme denetimine açıkça kaydırma çubukları ekleyebilirsiniz. Yatay kaydırma çubuğu eklemek için stil WS_HSCROLL kullanın; dikey kaydırma çubuğu eklemek için WS_VSCROLLstilini kullanın. Kaydırma çubukları içeren düzenleme denetimi kendi kaydırma çubuğu iletilerini işler. Denetimleri düzenlemek için kaydırma çubukları ekleme hakkında ayrıntılı bilgi için bkz. Kaydırma Çubukları.

Sistem, bir uygulamanın kaydırma çubuklarıyla düzenleme denetimine gönderebileceği üç ileti sağlar. EM_LINESCROLL iletisi, çok satırlı düzenleme denetimini hem dikey hem de yatay olarak kaydırabilir. lParam parametresi, geçerli satırdan başlayarak dikey olarak kaydıracak satır sayısını, wParam parametresi ise geçerli karakterden başlayarak yatay olarak kaydıracak karakter sayısını belirtir. Düzenleme denetimi, ES_CENTER veya ES_RIGHT stiline sahipse yatay kaydırma iletilerini kabul etmez. EM_LINESCROLL iletisi yalnızca çok satırlı düzenleme denetimleri için geçerlidir.

EM_SCROLL iletisi, çok satırlı düzenleme denetimini dikey olarak kaydırıyor. wParam parametresi kaydırma eylemini belirtir. EM_SCROLL iletisi yalnızca çok satırlı düzenleme denetimleri için geçerlidir. EM_SCROLL, WM_VSCROLL iletisiyle aynı etkiye sahiptir.

EM_SCROLLCARET iletisi, düzenleme denetiminde şapka işaretini görünüme kaydırıyor.

Sekme Duraklarını ve Kenar Boşluklarını Ayarlama

Bir uygulama, EM_SETTABSTOPS iletisini kullanarak çok satırlı düzenleme denetiminde sekme durakları ayarlayabilir. (Sekme durağı için varsayılan değer sekiz karakterdir.) Bir uygulama düzenleme denetimine metin eklediğinde, metindeki sekme karakterleri otomatik olarak bir sonraki sekme durağına kadar boşluk oluşturur. EM_SETTABSTOPS iletisi otomatik olarak sistemin metni yeniden çizmesine neden olmaz. Bunu yapmak için bir uygulama InvalidateRect işlevini çağırabilir. EM_SETTABSTOPS iletisi yalnızca çok satırlı düzenleme denetimleri için geçerlidir.

Uygulama, EM_SETMARGINS iletisini kullanarak düzenleme denetimi için sol ve sağ kenar boşluklarının genişliğini ayarlayabilir. Bu iletiyi gönderdikten sonra sistem düzenleme denetimini yeni kenar boşluğu ayarlarını yansıtacak şekilde yeniden çizer. Uygulama, EM_GETMARGINS iletisini göndererek sol veya sağ kenar boşluğunun genişliğini alabilir. Varsayılan olarak, düzenleme denetimi kenar boşlukları düzenleme denetiminde kullanılan geçerli yazı tipi için en büyük karakter yatay kullanma mesafesini (negatif ABC genişlikleri) barındıracak kadar geniş olarak ayarlanır.

Kullanıcı Girişini Gizleme

Uygulama, kullanıcı girişini gizlemek için düzenleme denetiminde parola karakteri kullanabilir. Parola karakteri ayarlandığında, kullanıcı tarafından girilen her karakterin yerine görüntülenir. Parola karakteri kaldırıldığında, denetim kullanıcının yazdığınız karakterleri görüntüler. Uygulama stil ES_PASSWORDkullanarak tek satırlı düzenleme denetimi oluşturursa, varsayılan parola karakteri yıldız işareti (*) olur. Bir uygulama, farklı bir parola karakterini kaldırmak veya tanımlamak için EM_SETPASSWORDCHAR iletisini ve geçerli parola karakterini almak için EM_GETPASSWORDCHAR iletisini kullanabilir. Bu iletiler yalnızca tek satırlı düzenleme denetimlerine uygulanır.

Tamsayıları Kullanma

Düzenleme denetimleri için yalnızca sayı içerecek şekilde tasarlanmış iki tamsayı dönüştürme işlevi vardır. SetDlgItemInt işlevi, belirtilen tamsayının dize gösterimini oluşturur (imzalı veya imzasız) ve dizeyi düzenleme denetimine gönderir. SetDlgItemInt değer döndürmez. GetDlgItemInt işlevi, düzenleme denetimindeki dize gösteriminden bir tamsayı (imzalı veya imzasız) oluşturur. GetDlgItemInt tamsayıyı (veya hata değerini) döndürür.

Metin İşlemlerini Geri Alma

Her düzenleme denetimi, bir uygulamanın düzenleme denetimindeki en son işlemi geri alıp alamayacağını (örneğin, metin silme işlemini geri alma) belirten bir geri alma bayrağı tutar. Düzenleme denetimi, işlemin geri alınabileceğini belirtmek için geri alma bayrağını ayarlar ve işlemin geri alınamayacağını belirtmek için sıfırlar. Uygulama, denetime bir EM_CANUNDO iletisi göndererek geri alma bayrağının ayarını belirleyebilir.

Bir uygulama, denetime bir EM_UNDO iletisi göndererek en son işlemi geri alabilir. Önce başka bir düzenleme denetimi işlemi gerçekleşmezse bir işlem geri alınabilir. Örneğin, kullanıcı metni silebilir, metni değiştirebilir (silmeyi geri alabilir) ve sonra metni yeniden silebilir (değiştirme işlemini geri alabilir). EM_UNDO iletisi hem tek satırlı hem de çok satırlı düzenleme denetimleri için geçerlidir ve her zaman tek satırlı düzenleme denetimleri için çalışır.

Uygulama, denetime bir EM_EMPTYUNDOBUFFER iletisi göndererek düzenleme denetiminin geri alma bayrağını sıfırlayabilir. Bir düzenleme denetimi bir EM_SETHANDLE veya WM_SETTEXT iletisi aldığında sistem geri alma bayrağını otomatik olarak sıfırlar. SetDlgItemText işlevi bir WM_SETTEXT iletisi gönderir.

Wordwrap ve Satır Sonlarını İşleme

Bir uygulama, bir sonraki satıra kaydırılması gereken sözcük veya sözcük parçasını bulmak için çok satırlı düzenleme denetimleriyle Wordwrap işlevlerini kullanabilir. Sistem tarafından sağlanan varsayılan Wordwrap işlevini kullanarak, satırlar her zaman sözcükler arasındaki boşluklarda biter. Bir uygulama, bir EditWordBreakProc Wordwrap işlevi sağlayarak ve düzenleme denetimine bir EM_SETWORDBREAKPROC iletisi göndererek kendi Wordwrap işlevini belirtebilir. Bir uygulama, denetime bir EM_GETWORDBREAKPROC iletisi göndererek geçerli Wordwrap işlevinin adresini alabilir.

Bir uygulama, kaydırılan metin satırlarının sonuna otomatik olarak bir yumuşak satır sonu karakteri (iki satır başı ve bir satır beslemesi) eklemek veya kaldırmak için çok satırlı düzenleme denetimini yönlendirebilir. Bir uygulama, düzenleme denetimine bir EM_FMTLINES iletisi göndererek bu özelliği açabilir veya kapatabilir. Bu ileti yalnızca çok satırlı düzenleme denetimleri için geçerlidir ve sabit satır sonuyla biten bir satırı etkilemez (bir satır başı ve kullanıcı tarafından girilen bir satır beslemesi). Ayrıca çok satırlı düzenleme denetimlerinde bir uygulama, kullanıcı düzenleme denetiminde ENTER tuşuna bastığında sistemin satır başı eklemesini istemek için ES_WANTRETURN stilini belirtebilir.

Noktaları ve Karakterleri Alma

Düzenleme denetiminin istemci alanında belirtilen bir noktaya en yakın karakteri belirlemek için EM_CHARFROMPOS iletisini denetime gönderin. İleti, noktaya en yakın karakterin karakter dizinini ve satır dizinini döndürür. Benzer şekilde, EM_POSFROMCHAR iletisini göndererek belirtilen karakterin istemci alanı koordinatlarını alabilirsiniz. İleti, belirtilen karakterin sol üst köşesinin x ve y koordinatlarını döndürür.

Dizeleri Otomatik Tamamlama

Otomatik tamamlama, bir düzenleme denetimine kısmen girilen dizeleri tam dizeler halinde genişletir. Örneğin, kullanıcı Windows Internet Explorer araç çubuğuna eklenmiş adres düzenleme denetimine bir URL girmeye başladığında, otomatik tamamlama dizeyi var olan kısmi dizeyle tutarlı bir veya daha fazla tam URL'ye genişletir. "mikrofon" gibi kısmi bir URL dizesi "https://www.microsoft.com" veya "https://www.microsoft.com/windows". Otomatik tamamlama genellikle düzenleme denetimleriyle veya eklenmiş düzenleme denetimine sahip denetimlerle kullanılır.

Daha fazla bilgi için IAutoComplete ve IAutoComplete2 arabirimi belgelerine bakın.

Denetimleri Düzenlemede Karmaşık Betik

karmaşık betik, yazdırılan formu basit bir şekilde yerleştirilmemiş bir dildir. Örneğin, karmaşık bir betik çift yönlü işlemeye, gliflerin bağlamsal olarak şekillendirilmesine veya karakterlerin birleştirilmesine izin verebilir. Standart düzenleme denetimleri, çok dilli metinleri ve karmaşık betikleri destekleyecek şekilde genişletildi. Bu yalnızca giriş ve görüntülemeyi değil, aynı zamanda karakter kümeleri üzerinde doğru imleç hareketini de içerir (örneğin Tay dili ve Devanagari betiğinde).

İyi yazılmış bir uygulama bu desteği değiştirmeden otomatik olarak alır. Yine sağdan sola okuma sırası ve sağ hizalama desteği eklemeyi düşünmelisiniz. Bu durumda, aşağıdaki örnekte gösterildiği gibi bu öznitelikleri denetlemek için düzenleme denetimi penceresinin genişletilmiş stil bayraklarını değiştirin.

// ID_EDITCONTROL is the control ID in the resource file.
HANDLE hWndEdit = GetDlgItem(hDlg, ID_EDITCONTROL);
LONG lAlign = GetWindowLong(hWndEdit, GWL_EXSTYLE) ;

// To toggle alignment
lAlign ^= WS_EX_RIGHT ;

// To toggle reading order
lAlign ^= WS_EX_RTLREADING ;

lAlign değerini ayarladıktan sonra, düzenleme denetimi penceresinin genişletilmiş stilini aşağıdaki gibi ayarlayarak yeni görüntüyü etkinleştirin.

// This assumes your edit control is in a dialog box. If not, 
// get the edit control handle from another source.

SetWindowLong(hWndEdit, GWL_EXSTYLE, lAlign);
InvalidateRect(hWndEdit, NULL, FALSE);

Uniscribe, karmaşık betikleri işlemek için ince denetim sağlayan başka bir işlev kümesidir. Daha fazla bilgi için bkz. uniscribe .