不明就里?
2008-04-09 04:17:58来源:互联网 阅读 ()
如果读者的编译器为10.0版以下,可以这样解决:
对TMemo的句柄发送EM_LINEFROMCHAR来获得当前字符的行数,进行一下Interger $#@60;-$#@62; String的变换就是行号了,而获得当前光标所在的列数就稍微复杂一点:
先对TMemo的句柄发送EM_GETSEL来获得当前光标对于所在字符的选择数(该返回值是一个DWORD,低位WORD为选择起始值,高位WORD为选择数),这个数包含了从TMemo文本缓冲开始以来的字符,因此,必须减去当前行以前的所有字符的另外一个数,这另外一个数可以对TMemo的句柄发送EM_LINEINDEX来获得。
也就是:
行数= SendMessage(Handle, EM_LINEFROMCHAR, -1, 0);
列数= LongRec(SendMessage(Handle, EM_GETSEL, 0, 0)).Hi -
SendMessage(Handle, EM_LINEINDEX, -1, 0);
如果你正在使用Delphi 5,那么这一切都在TMemo.CaretPos的TPoint这个属性里,其X正是列值,而Y为行值。
为了正常显示行列号,建议读者使用消息来处理。这是为了正确处理用户在打字时按下诸如: Home、End之类的键。
一个范例:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls;
const
WM_USERGETPOS = WM_USER 100; //定义绘出行列号的消息
type
TForm1 = class(TForm)
Memo1: TMemo;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
protected
{ protected declarati }
procedure DrawMyPos(var Msg: TMessage);message WM_USERGETPOS; //消息事件
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.DrawMyPos(var Msg: TMessage);var
L1,L2: Integer;begin
L1 := Memo1.CaretPos.y;
L2 := Memo1.CaretPos.x;
StatusBar1.SimpleText := IntToStr(L1) : IntToStr(L2);
//格式为行:列显示end;
procedure TForm1.FormCreate(Sender: TObject);begin
Memo1.Clear;
PostMessage(Handle,WM_USERGETPOS,0,0);
//显示初始化end;
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);begin
PostMessage(Handle,WM_USERGETPOS,0,0);
//响应用户的按键end;
procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);begin
PostMessage(Handle,WM_USERGETPOS,0,0);
//响应鼠标的定位end;
end.
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:在Window右下角的添加图标
下一篇:用Delphi实现远程屏幕抓取
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash