在编辑框中当用鼠标或键盘选中文字时,编辑控件得到的是什么消息?如何截获该消息?(50分)

  • 主题发起人 主题发起人 alaclp
  • 开始时间 开始时间
A

alaclp

Unregistered / Unconfirmed
GUEST, unregistred user!
在编辑框中当用鼠标或键盘选中文字时,编辑控件得到的是什么消息?如何截获该消息?
我想override该消息处理过程
 
选中的消息有:
EM_SETSEL:
procedure TCustomEdit.SelectAll;
begin
SendMessage(Handle, EM_SETSEL, 0, -1);
end;

Param = (WPARAM) (INT) nStart; // starting position
lParam = (LPARAM) (INT) nEnd; // ending position


Parameters

nStart

Value of wParam. Specifies the starting character position of the selection.

nEnd

Specifies the ending character position of the selection.


相关的有:
EM_GETSEL, EM_REPLACESEL, EM_SCROLLCARET, EM_EXSETSEL
 
非常不错的方法,看样子你的功力不错
那么我能不能再问你一个难度问题?
是这样,我想编写一个语法高亮的编辑器(继承于TCustomRichEdit,它具有自动识别关键字
的能力.
这一点现在我已经基本实现了.
但是现在存在的问题是我重载了它的KeyUp事件,这样,当用户输入新的字符之后,我
就对当前行的所有词汇进行扫描,判断是否是所要的关键字。如果是,我就用
CurPos := MyEdit.SelStart;
NewPos := WordBeginPos;
MyEdit.SelStart := NewPos;
MyEdit.SelLength := WordLen;
if IsKey then
MyEdit.SelAttributes.Color := clBlue
else
MyEdit.SelAttributes.color := clBlack;
//再扫描下一个词汇。
MyEdit.SelStart := CurPos; //恢复光标位置
通过这种方法,我可以将当前行中所有的关键字高亮显示。
但是,因为程序中选择了文字;而Windows默认的被选择文字的背景色为黑色,
因此行扫描时就出现了闪烁现象。
那么,我又想如何修改系统默认选择文字的背景色,使它成为白色,而被选择
文字的前景色为黑色,这样就不会闪烁了。
我就查了Windows API使用手册,其中有关于GetSysColor和SetSysColors两个
函数用于获得和设置系统外观的颜色(手工也就是“显示”属性中的外观设置)。
通过SetSysColors函数倒是可以把系统选中文字的背景色设置为白色,前景色
设置为黑色,解决了这个问题。
但是,当用SetSysColors设置完颜色后,系统向所有窗口都发送了此颜色变更
的通知,因此,不但影响了其他应用程序的正常工作,同时,程序本身的速度
也有所下降。
请问:我如何更改被选中文字的背景色和前景色?或者,设置一个标志,当我
进行行扫描的时候阻止TMyEdit的重绘事件?再或者,系统色彩改变到底向程序
发送了什么消息,我能否模拟向指定窗口发送系统色彩改变的消息?
这个问题我在CSDN, Delphibbs,以及国外的一些网站发帖,都没有获得答案。
今天看到你的回答,我觉得你水平蛮高;因此,将问题和盘托出,希望你能
研究研究。

好,罗嗦了半天也不知道你是否感兴趣。

在此,先谢过了!!!!!! 当然,我想你这种高人用分数刺激未免太俗气了
(:〉不是小气啊,开个玩笑)
[:D]
 
小黄鱼:
怎么被难住了吗?
继续帮忙啊!我等着你
 
接受答案了.
 
对不起呀,好长时间没来,没有看到,怎么不用qq和我联系恩?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
631
import
I
后退
顶部