Grid中如何取得当前编辑光标的位置并判断其上下文?(100分)

  • 主题发起人 主题发起人 VCLZip
  • 开始时间 开始时间
V

VCLZip

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做到类似Delphi的Code Insight那样的动态提示,所以要取得当前
编辑光标的位置和左右字符串,好根据上下文产生动态提示,怎么办?
 
TStringGrid/TDrawGrid 都是从 TCustomGrid 继承来的, TCustomGrid 有一个
InplaceEditor 属性(protected)是从TCustomEdit继承来的, TCustomEdit 具有
你所要的功能。

由于 InplaceEditor 是一个保护属性,故不能在 StringGrid 中使用它。如果在我
们的程序中从 TCustomGrid 继承一个 TMyGrid,并将 InplaceEditor 属性说明成
published 就可以直接使用它了。

在编辑状态就可以用得到 InplaceEditor 的 SelStart,SelLength,SelText 等
属性。
 
刚刚试了一下,我的办法完全可行,样例如下:
uses ..., Grids;

Interface

type
TMyGrid = class(TStringGrid)
published
property InplaceEditor
//******
end;
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
MyGrid: TMyGrid;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var p: integer;
begin
p:=MyGrid.InplaceEditor.selStart;
edit1.text:=IntToStr(p);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyGrid:=TMyGrid.create(self);
MyGrid.parent:=self;
MyGrid.left:=20;
MyGrid.Top:=100;
MyGrid.Options:=MyGrid.Options + [goEditing];
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
MyGrid.free;
end;
end.

新建一个APP, 加上一个 TButton 和一个 TEdit, 上述程序可以运行。
 
俄国人的RX控件里的TRxDBGrid,具有huizhang先生所说的InplaceEditor
属性,还有许多其他很好的功能,推荐使用。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部