當前輸入行閃爍終於比較滿意的解決了。
以處理高亮匹配時,以前是直接在rt裡使用selectionstart、selectedtext替換原始文本;
首先將需要處理的文本處理完成,以RTF格式暫存到變數中,一次性替換到原始文本位置,效果有所好轉,但偶有閃爍,因為selectionlength的範圍過大;在行中間換行時,替換的是原行和新行,閃爍更為嚴重。
那就逐行處理,將一行文本處理後,存為RTF到變數,使用SendMessage的WM_SETREDRAW(&HB)訊息;
禁用重新整理;
SendMessage(Me.Handle, WM_SETREDRAW, 0, 0)
啟用重新整理;
SendMessage(Me.Handle, WM_SETREDRAW, 1, 0)
' 還回textbox中<br /> '禁止重新整理,清除範圍內各行的文字;<br /> Me.rt_AllowRefresh(False)<br /> MyBase.SelectionStart = _first<br /> MyBase.SelectionLength = _length<br /> MyBase.SelectedText = ""<br /> MyBase.SelectionLength = 0<br /> MyBase.SelectionStart = _first</p><p> '允許重新整理, 添加各行的文本;<br /> Me.rt_AllowRefresh(True)<br /> MyBase.SelectedRtf = m_buff.ToString
在清除原來文本時,禁止重新整理,rt的指定行的文本被刪除,但是由於RT沒有重新整理,看起來文本還存在,然後啟用重新整理,還迴文本,這樣文本更新速度很快,但是RT又重新整理了,所以看起來只是文字顏色變化而已。
上面的允許重新整理,是在第二重設插入點位置,這是因為,把允許重新整理放在第二重設插入點位置前,文字是不會閃爍的,但是該行最前方,總有一個插入點游標(“|”)的影子在閃爍(不輸入文字就沒有);
到此,一個比較完善代碼編輯器就完成了。
完整原始碼下載: http://download.csdn.net/detail/xiaoid/5088417