procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_shift then
begin
epos:=sendmessage(memo1.handle,em_lineindex,memo1.SelStart,0);
if spos<epos then
showmessage('right')
else
showmessage('left');
end;
end;procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_shift then
spos:=sendmessage(memo1.handle,em_lineindex,memo1.SelStart,0);end搞定,你试一试,符合要求就给
Shift: TShiftState);
begin
if key=vk_shift then
begin
epos:=sendmessage(memo1.handle,em_lineindex,memo1.SelStart,0);
if spos<epos then
showmessage('right')
else
showmessage('left');
end;
end;procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_shift then
spos:=sendmessage(memo1.handle,em_lineindex,memo1.SelStart,0);end搞定,你试一试,符合要求就给
解决方案 »
- 找到一份人脸检测的小程序,不过是JAVA的,通过调用JNI2OpenCV.dll这个链接库完成功能,不知能不能改成delphi的,请大侠们给看一下指点一二多谢.
- 如何实现程序主菜单的键盘快捷键自定义
- 如何得到查询的进度?
- 简单的StringGrid问题,快来拿分!
- 请问我怎么找不到TMIDASPageProducer这个控件呢?
- 怎么样用tadotable控件插入一条记录呢
- 怎么在程序中动态生成控件啊?帮帮忙
- 程序运行时,主窗体不可见,而是显示登录窗体,登录成功后再显示主窗体,如何做?
- 一个奇怪的问题?
- 关于‘MAILTO’问题难倒英雄HAN
- 招:身在深圳的技术开发人员一人
- 招聘 Delphi 程序员 同时熟悉c/c++
另外,lpos,spos,epos都是全局变量
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
lpos:=sendmessage(memo1.handle,em_linefromchar,memo1.SelStart,0);
end;
var
i: integer;
T: integer;
begin
T:=0;
for i:=0 to memo1.CaretPos.Y-1 do
begin
T:=T+Length(MEmo1.Lines[i])+1;
end;
T:=T+memo1.CaretPos.X+1;
if T=Memo1.SelStart then showmessage('left') else
if T=Memo1.SelStart+memo1.SelLength then showmessage('Right');
end;
If Memo1.CaretPos.x+Memo1.SelLength>Memo1.SelStart then showmessage('Right') else showmessage('Left');
Memo1.CaretPos.x我这为什么不是当前光标的横坐标哪?
例如我只有一行字符,选择第3,4个字符,
光标在第三个字符前面,
用Memo1.CaretPos.x得到的是4,???
就是Memo1.CaretPos.x的问题因为他始终=(SelEnd)选择内容的最后位置
可我也得用鼠标选择阿!
如果在SelText的左边,memo1.Lines.Text[memo1.SelStart]则是memo1.SelText的起始字符,否则memo1.Lines.Text[memo1.SelStart-1]则是memo1.SelText的结束字符。
如果想确定光标所在地行列,则这样写:
function GetRow(memo: TMemo): Longint;
begin
Result := memo.Perform(EM_LINEFROMCHAR, -1, 0);
end;function GetColumn(memo: TMemo): Longint;
begin
Result := memo.SelStart - memo.Perform(EM_LINEINDEX, -1, 0);
end;
当两边的字符都是一样的就判断不准了!!!!function GetColumn(memo: TMemo): Longint;
begin
Result := memo.SelStart - memo.Perform(EM_LINEINDEX, -1, 0);
end;memo.Perform(EM_LINEINDEX, -1, 0); 返回的结果是光标前n行的字符数之和
当选择多行内容时GetColumn返回值就 <0 了最终还是得不到正确的结果!!!