怎样获得DBGRID中输入时光标的坐标(不是鼠标的坐标)?(100分)

H

haczcg

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近在做一个项目的时候,想让用户在不别记忆的情况下根据提示输入一系列已经
存在的号码,就象DELPHI的CODE COMPLETE功能,但是不知道怎样获得输入位置的光标
的坐标,GETCURSORPOS是获得鼠标的坐标。
 
请问有人知道解决的方法吗?如果分少的话我可以全部送出我所有的分
 
GETFOCUS()
获得当前光标位置

例:在当前光标处插入字符串
SendMessage(GetFocus, EM_ReplaceSel, 1, LongInt(PChar('字符串')));

参考:
DBGrid中的当前光标位置插入文字
http://www.delphibbs.com/delphibbs/dispq.asp?lid=444024
 
GETFOCUS()用于获得键盘输入焦点控件的句柄的——它不能定位到控件的内部。

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if DBGrid1.Focused then
Caption:=DBGrid1.SelectedField.AsString; //获得焦点所在格的文本
end;
 
用API试试:
函数功能:该函数将插入标记的位置(按客户区坐标)信息拷贝到指定的POINT结构中。

函数原型:BOOL GetCaretPos(LPP0lNT IpPoint);

参数:

IpPoint:指向POINT结构的指针。该结构接收插入标记的客户坐标信息。

返回值:如果函数执行成功,那么返回值非零;如果函数执行失败,那么返回值为零。若想获取更多错误信息,请调用GetLastError函数。

备注:插入标记位置通常是按包含该插入标记的窗口的客户坐标形式给出的。

速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows:1.0及以上版本;头文件:Winuser.h;文件:user32.lib。

 
procedure Tform1.getpos;
var
mypoint:TPoint;
begin
getcaretpos(mypoint);
edit1.text:=inttostr(mypoint.x);
edit2.text:=inttostr(mypoint.y);

end;

procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
getpos;
end;
 
以下属性应该可定位的:
DBGrid1.selectedfield
DBFrid1.selectedindex
 
DBGrid1.SelectedField.AsString 只能获得已经POST的数据,显然是不行的。
 
我已经找到解决的方法了,通过Rect可以定位,呵呵。Rect下加一个ListBox,就可以实现
CODECOMPLETE的功能了。
 
接受答案了。
 

Similar threads

顶部