简单问题,如何在tmemo中知道自己所在的行数和列数
请告诉在那个事件中写,怎么写。谢谢,在线等,在线结分 问题点数:50、回复次数:5Top
1 楼xch28(①日蚀)回复于 2003-06-01 16:37:04 得分 0
up一下。Top
2 楼feng93017(Edge)回复于 2003-06-01 18:02:22 得分 0
Delphi中有控件MEMO,当使用应控件输入内容或编辑时,如何确定光标当前的位置呢?这时就可以调用WINDOWS API中的EM_LINEFROMCHAR和EM_LINEINDEX消息来确定MEMO控件中光标的当前行和列,具体调用方法的过程如下:
procedure TForm1.Button1Click(Sender: TObject);
var
LineNum:longint;
CharsBeforeLine:longint;
begin
LineNum := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,
Memo1.SelStart,0);
CharsBeforeLine:=SendMessage(Memo1.Handle,EM_LINEINDEX,
LineNum,0);
Label1.Caption:='Line: '+IntToStr(LineNum + 1);
Label2.Caption:='Position: '+IntToStr((Memo1.SelStart -
CharsBeforeLine)+1);
end;
//另一种方法
定义变量iLine: Integer;
{ 使用em_LineFromChar消息 }
iLine := Memo1.Perform(em_LineFromChar, $FFFF, 0);
{ 第一行为0 }
messageDlg('行号: ' + IntToStr(iLine), mtInformation,[mbOK], 0 ) ;
Top
3 楼xch28(①日蚀)回复于 2003-06-02 08:23:02 得分 0
为什么都不行?
第一个总是1,1,
第二个方法总是0?
Top
4 楼findcsdn(searchcsdn)回复于 2003-06-02 09:15:43 得分 50
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
col, lin, str: integer;
begin
SendMessage(memo1.Handle, EM_GETSEL, 0, Longint(@str));
lin := SendMessage(memo1.Handle, EM_LINEFROMCHAR, str, 0);
col := SendMessage(memo1.Handle, EM_LINEINDEX, lin, 0);
col := str - col;
caption := inttostr(lin) + ' ' + inttostr(col);
end;Top
5 楼xch28(①日蚀)回复于 2003-06-04 09:55:33 得分 0
cool method,i like:)Top




