Bagikan melalui


Edit Operasi Teks Kontrol

Sistem secara otomatis memproses semua operasi teks yang dimulai pengguna dan memberi tahu aplikasi ketika operasi selesai.

Topik berikut membahas operasi teks yang dimulai pengguna dan respons aplikasi:

Memilih Kontrol Edit

Pengguna dapat memilih kontrol edit dengan mengkliknya dengan mouse atau dengan menekan tombol TAB untuk berpindah ke kontrol tersebut. Metode tab adalah bagian dari antarmuka keyboard yang telah ditentukan sebelumnya yang disediakan sistem. Untuk deskripsi lengkap antarmuka ini, lihat Kotak Dialog. Saat pengguna memilih kontrol edit, sistem memberi kontrol fokus keyboard (lihat "Fokus dan Aktivasi Keyboard" di Tentang Input Keyboard) dan menyoroti teksnya dengan menggunakan video terbalik.

Mengatur dan Mengambil Teks

Aplikasi dapat mengatur teks kontrol edit dengan menggunakan fungsi SetWindowText, fungsi SetDlgItemText, atau dengan mengirim kontrol pesan WM_SETTEXT.

Untuk mengambil semua teks dari kontrol edit, pertama-tama gunakan fungsi GetWindowTextLength atau pesan WM_GETTEXTLENGTH untuk menentukan ukuran buffer yang diperlukan untuk memuat teks. Selanjutnya, ambil teks dengan menggunakan fungsi GetWindowText, fungsi GetDlgItemText, atau pesan WM_GETTEXT.

Memilih Teks

Setelah memilih kontrol edit, pengguna dapat memilih teks dalam kontrol dengan menggunakan mouse atau keyboard. Aplikasi dapat mengambil posisi karakter awal dan akhir dari pilihan saat ini dalam kontrol edit dengan mengirim kontrol pesan EM_GETSEL . Nilai pengembalian untuk posisi akhir adalah satu yang lebih besar dari karakter terakhir dalam pilihan (yaitu, posisi karakter pertama mengikuti karakter terakhir yang dipilih).

Aplikasi juga dapat memilih teks dalam kontrol edit dengan mengirim kontrol pesan EM_SETSEL dengan indeks karakter awal dan akhir untuk pilihan. Misalnya, aplikasi dapat menggunakan EM_SETSEL dengan EM_REPLACESEL untuk menghapus teks dari kontrol edit.

Ketiga pesan ini berlaku untuk kontrol pengeditan satu baris dan multibaris.

Mengganti Teks

Aplikasi dapat mengganti teks yang dipilih dalam kontrol edit dengan mengirim kontrol pesan EM_REPLACESEL dengan penunjuk ke teks pengganti. Jika tidak ada pilihan saat ini, EM_REPLACESEL menyisipkan teks pengganti pada titik penyisipan. Aplikasi mungkin menerima kode pemberitahuan EN_ERRSPACE jika teks pengganti melebihi memori yang tersedia. Pesan ini berlaku untuk kontrol pengeditan baris tunggal dan multibaris.

Aplikasi dapat menggunakan EM_REPLACESEL untuk menggantikan bagian dari teks kontrol edit atau fungsi SetDlgItemText untuk mengganti semuanya.

Mengubah Font yang Digunakan oleh Kontrol Edit

Aplikasi dapat mengubah font yang digunakan kontrol pengeditan dengan mengirim pesan WM_SETFONT. Sebagian besar aplikasi melakukan ini saat memproses pesan WM_INITDIALOG. Mengubah font tidak mengubah ukuran kontrol edit; aplikasi yang mengirim pesan WM_SETFONT mungkin harus mengambil metrik font untuk teks dan menghitung ulang ukuran kontrol edit. Untuk informasi selengkapnya tentang font dan metrik font, lihat Font dan Teks.

Potong Salin Tempel dan Hapus Operasi

Ada empat pesan untuk memindahkan teks antara kontrol edit dan clipboard. Pesan WM_COPY menyalin pilihan saat ini (jika ada) dari kontrol edit ke clipboard tanpa menghapusnya dari kontrol edit. Pesan WM_CUT menghapus pilihan saat ini (jika ada) dalam kontrol edit dan menyalin teks yang dihapus ke clipboard. Pesan WM_CLEAR menghapus pilihan saat ini (jika ada) dari kontrol edit, tetapi tidak menyalinnya ke clipboard (kecuali pengguna menekan tombol SHIFT). Pesan WM_PASTE menyalin teks dari clipboard ke kontrol edit pada titik penyisipan. Keempat pesan ini berlaku untuk kontrol pengeditan satu baris dan multibaris.

Microsoft Windows NT 4.0 dan yang lebih baru: Kontrol pengeditan menyertakan menu konteks bawaan yang memudahkan pengguna untuk memindahkan teks antara kontrol edit dan clipboard. Menu konteks muncul saat pengguna mengklik kanan kontrol. Perintah di menu konteks mencakup Batalkan, Potong, Salin, Tempel, Hapus, dan Pilih Semua.

Memodifikasi Teks

Pengguna dapat memilih, menghapus, atau memindahkan teks dalam kontrol edit. Sistem mempertahankan bendera internal untuk setiap kontrol pengeditan yang menunjukkan apakah konten kontrol telah dimodifikasi. Sistem menghapus bendera ini ketika membuat kontrol dan mengatur bendera setiap kali teks dalam kontrol dimodifikasi. Aplikasi dapat mengambil bendera modifikasi dengan mengirim kontrol pesan EM_GETMODIFY . Aplikasi kemudian dapat mengatur atau menghapus bendera modifikasi dengan mengirim kontrol pesan EM_SETMODIFY. Pesan ini berlaku untuk kontrol pengeditan satu baris dan multibaris.

Membatasi Teks yang Dimasukkan Pengguna

Batas default untuk jumlah teks yang dapat dimasukkan pengguna dalam kontrol edit adalah 32 KB. Aplikasi dapat mengubah batas default dengan mengirim kontrol pesan EM_SETLIMITTEXT . Pesan ini menetapkan batas keras ke jumlah byte yang dapat dimasukkan pengguna ke kontrol edit, tetapi tidak memengaruhi teks yang sudah berada dalam kontrol saat pesan dikirim atau teks disalin ke kontrol oleh fungsi SetDlgItemText atau pesan WM_SETTEXT. Misalnya, aplikasi menggunakan fungsi SetDlgItemText untuk menempatkan 500 byte dalam kontrol edit, dan pengguna juga memasukkan 500 byte (total 1.000 byte). Jika aplikasi kemudian mengirim pesan EM_SETLIMITTEXT membatasi teks yang dimasukkan pengguna ke 300 byte, 1.000 byte yang sudah ada di kontrol edit tetap ada, dan pengguna tidak dapat menambahkan teks lagi. Di sisi lain, jika aplikasi mengirim pesan EM_SETLIMITTEXT membatasi teks yang dimasukkan pengguna ke 1.300 byte, 1.000 byte tetap ada, tetapi pengguna dapat menambahkan 300 byte lagi.

Ketika pengguna mencapai batas karakter kontrol edit, sistem mengirim pesan WM_COMMAND aplikasi yang berisi kode pemberitahuan EN_MAXTEXT. Kode pemberitahuan ini tidak berarti bahwa memori telah habis, tetapi batas untuk teks yang dimasukkan pengguna telah tercapai; pengguna tidak dapat memasukkan teks lagi. Untuk mengubah batas ini, aplikasi harus mengirim kontrol pesan EM_SETLIMITTEXT baru dengan batas yang lebih tinggi.

Sebagai contoh penggunaan EM_SETLIMITTEXT dan EN_MAXTEXT, misalkan aplikasi harus membatasi pengguna hingga tidak lebih dari empat karakter dalam kontrol edit. Aplikasi akan menggunakan EM_SETLIMITTEXT untuk menentukan batas empat karakter. Jika pengguna mencoba memasukkan karakter kelima, sistem akan mengirim kode pemberitahuan EN_MAXTEXT ke aplikasi.

Operasi Karakter dan Garis

Ada beberapa pesan yang mengembalikan informasi tentang karakter dan baris dalam kontrol edit. Sebagian besar pesan mengembalikan indeks, biasanya angka berbasis nol, untuk merujuk ke karakter atau baris. Misalnya, dalam kontrol edit baris tunggal yang berisi karakter n, indeks garis adalah nol dan karakter diindeks dari nol hingga n-1. Dalam kontrol edit multibaris yang berisi baris m dan karakter n, garis diindeks dari nol hingga m-1, dan karakter diindeks dari nol hingga n-1. Perhatikan bahwa pengindeksan karakter mengabaikan pemisah baris.

Aplikasi dapat menentukan jumlah karakter dalam kontrol edit dengan mengirim pesan WM_GETTEXTLENGTH ke kontrol edit. Pesan ini mengembalikan panjang, dalam karakter (tidak termasuk karakter null yang mengakhiri), teks dalam kontrol edit satu baris atau multibaris. Pesan EM_LINELENGTH mengembalikan panjang, dalam karakter, dari baris yang ditentukan oleh indeks karakter karakter dalam baris. Panjang yang dikembalikan tidak menyertakan karakter yang dipilih. Aplikasi dapat menggunakan pesan ini dalam kontrol edit satu baris atau multibaris.

Pesan EM_GETFIRSTVISIBLELINE mengembalikan indeks berbasis nol dari baris paling atas yang terlihat dalam kontrol pengeditan multibaris, atau indeks berbasis nol dari karakter pertama yang terlihat dalam kontrol edit baris tunggal. Aplikasi dapat menyalin baris dari kontrol edit ke buffer dengan mengirim pesan EM_GETLINE ke kontrol edit. Baris ditentukan oleh indeks barisnya dan kata pertama dari buffer penerima berisi jumlah maksimum byte yang akan disalin ke buffer. Nilai yang dikembalikan adalah jumlah byte yang disalin. Pesan ini juga dapat digunakan dalam kontrol edit satu baris atau multibaris.

Ada pesan unik yang tersedia untuk mengembalikan informasi tentang baris dalam kontrol pengeditan multibaris. Pesan EM_GETLINECOUNT mengembalikan jumlah baris dalam kontrol edit. Pesan EM_LINEFROMCHAR mengembalikan indeks baris yang berisi indeks karakter tertentu. Pesan EM_LINEINDEX mengembalikan indeks karakter pertama dalam baris tertentu.

Menggulir Teks dalam Kontrol Edit

Untuk menerapkan pengguliran dalam kontrol edit, Anda dapat menggunakan gaya gulir otomatis yang dibahas dalam Edit Tipe Kontrol dan Gaya, atau Anda dapat secara eksplisit menambahkan bilah gulir ke kontrol edit. Untuk menambahkan bilah gulir horizontal, gunakan gaya WS_HSCROLL; untuk menambahkan bilah gulir vertikal, gunakan gaya WS_VSCROLL. Kontrol edit dengan bilah gulir memproses pesan bilah gulirnya sendiri. Untuk informasi terperinci tentang menambahkan bilah gulir untuk mengedit kontrol, lihat Bilah Gulir.

Sistem menyediakan tiga pesan yang dapat dikirim aplikasi ke kontrol edit dengan bilah gulir. Pesan EM_LINESCROLL dapat menggulir kontrol edit multibaris baik secara vertikal maupun horizontal. Parameter lParam menentukan jumlah baris untuk menggulir secara vertikal dimulai dari baris saat ini dan parameter wParam menentukan jumlah karakter untuk digulir secara horizontal, dimulai dari karakter saat ini. Kontrol edit tidak mengakui pesan pengguliran horizontal jika memiliki gaya ES_CENTER atau ES_RIGHT. Pesan EM_LINESCROLL hanya berlaku untuk kontrol pengeditan multibaris.

Pesan EM_SCROLL menggulir kontrol edit multibaris secara vertikal. Parameter wParam menentukan tindakan pengguliran. Pesan EM_SCROLL hanya berlaku untuk kontrol pengeditan multibaris. EM_SCROLL memiliki efek yang sama dengan pesan WM_VSCROLL.

Pesan EM_SCROLLCARET menggulir tanda sisipan ke tampilan dalam kontrol edit.

Pengaturan Perhentian Tab dan Margin

Aplikasi dapat mengatur perhentian tab dalam kontrol pengeditan multibaris dengan menggunakan pesan EM_SETTABSTOPS. (Default untuk perhentian tab adalah delapan karakter.) Saat aplikasi menambahkan teks ke kontrol edit, karakter tab dalam teks secara otomatis menghasilkan ruang hingga perhentian tab berikutnya. Pesan EM_SETTABSTOPS tidak secara otomatis menyebabkan sistem menggambar ulang teks. Untuk melakukannya, aplikasi dapat memanggil fungsi InvalidateRect. Pesan EM_SETTABSTOPS hanya berlaku untuk kontrol pengeditan multibaris.

Aplikasi dapat mengatur lebar margin kiri dan kanan untuk kontrol edit dengan menggunakan pesan EM_SETMARGINS. Setelah mengirim pesan ini, sistem akan menggambar ulang kontrol edit untuk mencerminkan pengaturan margin baru. Aplikasi dapat mengambil lebar margin kiri atau kanan dengan mengirim pesan EM_GETMARGINS. Secara default, margin kontrol edit diatur cukup lebar untuk mengakomodasi overhang horizontal karakter terbesar (lebar ABC negatif) untuk font saat ini yang digunakan dalam kontrol edit.

Menyembunyikan Input Pengguna

Aplikasi dapat menggunakan karakter kata sandi dalam kontrol edit untuk menyembunyikan input pengguna. Saat karakter kata sandi diatur, karakter tersebut ditampilkan sebagai pengganti setiap karakter jenis pengguna. Saat karakter kata sandi dihapus, kontrol menampilkan karakter jenis pengguna. Jika aplikasi membuat kontrol edit baris tunggal menggunakan gaya ES_PASSWORD, karakter kata sandi default adalah tanda bintang (*). Aplikasi dapat menggunakan pesan EM_SETPASSWORDCHAR untuk menghapus atau menentukan karakter kata sandi yang berbeda dan pesan EM_GETPASSWORDCHAR untuk mengambil karakter kata sandi saat ini. Pesan ini hanya berlaku untuk kontrol pengeditan baris tunggal.

Menggunakan Bilangan Bulat

Ada dua fungsi konversi bilangan bulat untuk kontrol edit yang dirancang hanya berisi angka. Fungsi SetDlgItemInt membuat representasi string dari bilangan bulat tertentu (ditandatangani atau tidak ditandatangani) dan mengirim string ke kontrol edit. SetDlgItemInt tidak mengembalikan nilai. Fungsi GetDlgItemInt membuat bilangan bulat (ditandatangani atau tidak ditandatangani) dari representasi stringnya dalam kontrol edit. GetDlgItemInt mengembalikan bilangan bulat (atau nilai kesalahan).

Membatalkan Operasi Teks

Setiap kontrol edit mempertahankan bendera batalkan yang menunjukkan apakah aplikasi dapat membalikkan atau membatalkan operasi terbaru pada kontrol edit (membatalkan penghapusan teks, misalnya). Kontrol edit mengatur bendera batalkan untuk menunjukkan bahwa operasi dapat dibatalkan dan mengatur ulang untuk menunjukkan bahwa operasi tidak dapat dibatalkan. Aplikasi dapat menentukan pengaturan bendera batalkan dengan mengirim kontrol pesan EM_CANUNDO.

Aplikasi dapat membatalkan operasi terbaru dengan mengirim kontrol pesan EM_UNDO . Operasi dapat dibatalkan asalkan tidak ada operasi kontrol edit lain yang terjadi terlebih dahulu. Misalnya, pengguna dapat menghapus teks, mengganti teks (membatalkan penghapusan), lalu menghapus teks lagi (membatalkan penggantian). Pesan EM_UNDO berlaku untuk kontrol edit satu baris dan multibaris dan selalu berfungsi untuk kontrol pengeditan baris tunggal.

Aplikasi dapat mengatur ulang bendera urungkan kontrol edit dengan mengirim kontrol pesan EM_EMPTYUNDOBUFFER. Sistem secara otomatis mengatur ulang bendera batalkan setiap kali kontrol edit menerima pesan EM_SETHANDLE atau WM_SETTEXT. Fungsi SetDlgItemText mengirim pesan WM_SETTEXT .

Menangani Wordwrap dan Pemisah Baris

Aplikasi dapat menggunakan fungsi Wordwrap dengan kontrol edit multibaris untuk menemukan fragmen kata atau kata yang harus dibungkus ke baris berikutnya. Menggunakan fungsi Wordwrap default yang disediakan oleh sistem, baris selalu berakhir di spasi antar kata. Aplikasi dapat menentukan fungsi Wordwrap sendiri dengan menyediakan fungsi EditWordBreakProc Wordwrap dan mengirim kontrol edit pesan EM_SETWORDBREAKPROC. Aplikasi dapat mengambil alamat fungsi Wordwrap saat ini dengan mengirim kontrol pesan EM_GETWORDBREAKPROC.

Aplikasi dapat mengarahkan kontrol edit multibaris untuk menambahkan atau menghapus karakter pemisah garis lunak (dua pengembalian gerbong dan umpan baris) secara otomatis di akhir baris teks yang dibungkus. Aplikasi dapat mengaktifkan atau menonaktifkan fitur ini dengan mengirim kontrol edit pesan EM_FMTLINES . Pesan ini hanya berlaku untuk kontrol pengeditan multibaris dan tidak memengaruhi garis yang diakhir dengan pemutusan baris keras (satu pengangkutan kembali dan umpan baris yang dimasukkan oleh pengguna). Selain itu, dalam kontrol edit multibaris, aplikasi dapat menentukan gaya ES_WANTRETURN untuk meminta sistem menyisipkan pengembalian pengangkutan saat pengguna menekan tombol ENTER dalam kontrol edit.

Mengambil Poin dan Karakter

Untuk menentukan karakter yang paling dekat dengan titik tertentu di area klien kontrol edit, kirim pesan EM_CHARFROMPOS ke kontrol. Pesan mengembalikan indeks karakter dan indeks baris karakter terdekat dengan titik tersebut. Demikian pula, Anda dapat mengambil koordinat area klien dari karakter tertentu dengan mengirim pesan EM_POSFROMCHAR. Pesan mengembalikan koordinat x dan y dari sudut kiri atas karakter yang ditentukan.

Pelengkapan Otomatis String

Pelengkapan otomatis memperluas string yang telah dimasukkan sebagian dalam kontrol edit ke dalam string lengkap. Misalnya, ketika pengguna mulai memasukkan URL di kontrol Edit alamat yang disematkan di toolbar Windows Internet Explorer, pelengkapan otomatis memperluas string menjadi satu atau beberapa URL lengkap yang konsisten dengan string parsial yang ada. String URL parsial seperti "mikrofon" mungkin diperluas ke "https://www.microsoft.com" atau "https://www.microsoft.com/windows". Pelengkapan otomatis biasanya digunakan dengan kontrol edit atau dengan kontrol yang memiliki kontrol edit yang disematkan.

Untuk informasi selengkapnya, lihat dokumentasi antarmuka IAutoComplete dan IAutoComplete2.

Skrip Kompleks dalam Edit Kontrol

Skrip kompleks adalah bahasa yang bentuk cetaknya tidak ditata dengan cara yang sederhana. Misalnya, skrip kompleks dapat memungkinkan penyajian dua arah, pembentukan glyph kontekstual, atau menggabungkan karakter. Kontrol edit standar telah diperluas untuk mendukung teks multibahasa dan skrip kompleks. Ini tidak hanya mencakup input dan tampilan, tetapi juga pergerakan kursor yang benar atas kluster karakter (misalnya dalam skrip Thai dan Devanagari).

Aplikasi yang ditulis dengan baik menerima dukungan ini secara otomatis, tanpa modifikasi. Sekali lagi, Anda harus mempertimbangkan untuk menambahkan dukungan untuk urutan baca kanan-ke-kiri dan perataan kanan. Dalam hal ini, alihkan bendera gaya yang diperluas dari jendela kontrol edit untuk mengontrol atribut ini, seperti yang ditunjukkan dalam contoh berikut.

// 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 ;

Setelah mengatur nilai lAlign , aktifkan tampilan baru dengan mengatur gaya yang diperluas dari jendela kontrol edit sebagai berikut.

// 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 adalah sekumpulan fungsi lain yang memberikan kontrol yang baik untuk memproses skrip yang kompleks. Untuk informasi selengkapnya, lihat Uniscribe.