DBGrid的当前光标位置(200分)

  • 主题发起人 主题发起人 mytw2002
  • 开始时间 开始时间
M

mytw2002

Unregistered / Unconfirmed
GUEST, unregistred user!
如何得出DBGrid当前焦点文字中的光标位置,及设定当前焦点文字的光标位置?
 
DBGrid中如何定位焦点?
TdrawGrid(Dbgrid1).Col:=1;
Dbgrid1.SetFocus;
 
To tomboy:
并不是问“DBGrid中如何定位焦点”,而是在DBGrid已聚焦的情况下,
如何得出DBGrid当前焦点文字中的光标位置,及设定当前焦点文字的光标位置?
 
好像通過
mouse.CursorPos.X,
mouse.CursorPos.Y可得當前光標位置。
 
通过onmousemove事件中的X,Y就可以得到当前鼠标的位置.
 
想什麼:=TdrawGrid(Dbgrid1).Col不就行了嗎!
 
To zxb200, hbezwwl:
要得到的不是鼠标位置,而是光标位置!
 
列:
dbgrid1.SelectedIndex+1;
tdrawgrid(dbgrid1).Col);
行:
dbgrid1.DataSource.DataSet.recno;
tdrawgrid(dbgrid1).Row)
 
To sydanlong, zxb200:
要得到的不是当前光标在DBGrid的坐标位置,而是在DBGrid已聚焦的情况下,
如何得出DBGrid当前焦点文字中的光标位置,及设定当前焦点文字的光标位置?
例如:
在DBGrid的某一坐标位置中,文字为“abcdefg”,当前光标在文字ef之间,
这是应得出光标在文字“abcdefg”的位置,即5;
设定当前焦点文字的光标位置为2时,光标应停留在文字bc之间。
 
不好办,聚焦时show一个edit作为中转,
Edit有selstart属性设置光标。
 


来自:雪鹰, 时间:2002-4-4 11:35:00, ID:1022768 | 编辑
用GETCARETPOS!

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;



来自:雪鹰, 时间:2002-4-4 11:40:00, ID:1022780 | 编辑
刚才的是获取CARET,也就是编辑框那条闪烁竖线的位置,我想你要的应该是这个吧?
另外还有SetCaretPos,设置caret位置.
如果要知道老鼠位置就,GetCursorPos,设置老鼠位置:SetCursorPos.
坐标转换:ClientToScreen,ScreenToClient;



 
系统函数就是getcaretpos,但是的出来的是在edit框的坐标,你还要根据字体宽度计算出
是在第几个字后面,我不大会^_^.
如果都是英文就简单,得出的坐标假设(x,y),那么换算成字体位置就是:
pos:=(x-2)/nowfontwidth;
(对于有些字体每个字的宽度是一样的,这好办。但有些字体不同字宽度不一样,这就不好办。)
 
获得当前一串string的宽度,方法如下:
var
size:tagSize;
myhdc:HDC;
begin
myhdc:=GetDC(DBGrid1.Handle);
GetTextExtentPoint32 (Myhdc, Pchar(DbGrid1.SelectedField.AsString),
StrLen(PChar(DbGrid1.SelectedField.AsString)), size);
REleaseDc(DBGrid1.Handle,myhdc);
showmessage(inttostr(size.cx))
end;
这样就基本解决这个问题了。
累加每个字的宽度,直到达到caret的位置,共累加了几个字,caret的位置就是多少。

不过我觉得我这样方法好土!你说是吧,呵呵^_^
.
还不给分?
 
To 雪鹰:
用你提供的方法能取得DBGrid当前焦点文字中的光标位置,
但不能设定DBGrid当前焦点文字的光标位置,如何设定?
 
如何设定DBGrid当前焦点文字的光标位置??
 
后退
顶部