我向listbox发送EM_SETSEL消息,和向RichEdit发送EM_SETCURSEL消息为什么都没反应啊,接收他们消息的控件有什么要求吗,还有在发送EM_SETSEL消息后为什么还要发一条EM_SCROLLCARET消息啊,这条消息是干什么用的啊?
解决方案 »
- delphi xe2 64位嵌入汇编问题???
- 关于数据库安全的提问
- 这论坛不准让人发帖回帖,有什么意思
- 用Delphi在Oracle里往新建的临时表里插入数据为什么说新建的表处于ReadOnly不能修改!着急啊!
- 如何取最后一个字
- 刚学习DELPHI通信编程,请各位高手指点,给点资料!!
- 初学者问题:有没有控件可以选择文件夹?
- circluar unit reference to 'unit1'
- RESTORE DATABASE 能将数据库从本机恢复到其它机器的SERVER上吗?
- DCOM配置问题求救!!!!!
- 三层中客户端如何能通过ClientDataSet连接AdoStoredPro,并获得记录集
- TForm.Create(..) 用什么函数将创建的窗体释放更好???
如何改变RichEdit的游标位置
请问在RichEdit中我想将游标(文字)移动到某一位置要怎麽用呢?我用SendMessage可以取得行数、列数,然後要用那个参数或是函数才能移动游标呢?这个需要自已处理, 例如本信所附的程式 --// 指定输入游标的位置
procedure SetCaret(RTF: TRichEdit; var Row, Col: word);
var
i, iStopLine, iSelStart: integer;
begin
if (RTF = nil) then Exit;
if Row = 0 then Row := 1;
if Col = 0 then Col := 1; // 到第 Row 列, Col 行共几个字元
iStopLine := Row - 1;
iSelStart := 0;
for i := 0 to RTF.Lines.Count - 1 do
begin
if i = iStopLine then
begin
if Length(RTF.Lines[i]) >= Col then
Inc(iSelStart, Col)
else
Inc(iSelStart, Length(RTF.Lines[i]) + 2);
Break;
end;
Inc(iSelStart, Length(RTF.Lines[i]) + 2);
end;
if iSelStart > 0 then Dec(iSelStart); // 以设定标记的方式指定游标位置
SendMessage(RTF.Handle, EM_SETSEL, iSelStart, iSelStart); // 再次侦测游标位置
Row := SendMessage(RTF.Handle, EM_LINEFROMCHAR, RTF.SelStart, 0);
Col := RTF.SelStart - SendMessage(RTF.Handle, EM_LINEINDEX, Row, 0); // 卷到游标所在位置
SendMessage(RTF.Handle, EM_SCROLLCARET, 0, 0);
end;procedure TForm1.Button1Click(Sender: TObject);
var
iRow, iCol: word;
begin
iRow := 17;
iCol := 3;
SetCaret(RichEdit1, iRow, iCol);
RichEdit1.SetFocus;
end;
如果是的话,就改变brush的颜色