procedure TForm1.DBGrid1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
Cell: TGridCoord;
begin
inherited;
Cell:=DBGrid1.MouseCoord(X,Y);
if (Cell.Y>0) then //Cell.Y=0表示移动到标题上了,不对
begin
DBGrid1.Hint:=format('年龄为:%g',[ADOQueryOrder0.FieldbyName('年龄').AsFloat]);
DBGrid1.ShowHint:=True;
end else
begin
DBGridEh3.Hint:='';
DBGridEh3.ShowHint:=False;
end;
end;
------------
procedure Tmain_f.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Cell:TGridCoord;
begin
inherited;
Cell:=DBGrid1.MouseCoord(X,Y);
if (Cell.Y>0)then //Cell.Y=0表示移动到标题上了,不对
begin
if DBGrid1.SelectedField.FieldName='City' then
begin
DBGrid1.Hint:=DBGrid1.SelectedField.AsString;
DBGrid1.ShowHint:=True;
end;
end else
begin
DBGrid1.Hint:='';
DBGrid1.ShowHint:=False;
end;
end;
===============================================
用hint比较麻烦
用一个label来显示吧,将label放在panel里,panel颜色设成clInfoBk;
在dbgrid的oncellclick里写
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
size1:size;
po:tpoint;
begin
label1.Caption:=dbgrid1.SelectedField.AsString;
gettextextentpoint32(getdc(dbgrid1.Handle),pchar(label1.caption),length(label1.caption),size1);
panel1.Width:=size1.cx;
getcursorpos(po);
panel1.Top:=po.y-form1.Top;
panel1.Left:=po.X-form1.Left;
panel1.Visible:=true;
end;
当鼠标经过panel里将panel隐藏
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
panel1.Visible:=false;
end;
============================
//参考
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Table1: TTable;
procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
FGridCoord: TGridCoord;
FMousePoint: TPoint;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
vGridCoord: TGridCoord;
begin
vGridCoord := TDBGrid(Sender).MouseCoord(X, Y);
if (FGridCoord.X = vGridCoord.X) and (FGridCoord.Y = vGridCoord.Y) then Exit;
FMousePoint := Point(X, Y);
FGridCoord := vGridCoord;
TDBGrid(Sender).Refresh;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
vGridCoord: TGridCoord;
begin
vGridCoord := TDBGrid(Sender).MouseCoord(Rect.Left, Rect.Top);
if (FGridCoord.X = vGridCoord.X) and (FGridCoord.Y = vGridCoord.Y) then
Caption := Column.Field.DisplayText;
end;
========================
Label1.Caption:=DBGrid1.SelectedField.AsString +DBGrid1.SelectedField.FieldName;
if DBGrid1.SelectedField.FieldName='City' then
DBGrid1.Hint:=DBGrid1.SelectedField.AsString;
Shift: TShiftState; X, Y: Integer);
var
Cell: TGridCoord;
begin
inherited;
Cell:=DBGrid1.MouseCoord(X,Y);
if (Cell.Y>0) then //Cell.Y=0表示移动到标题上了,不对
begin
DBGrid1.Hint:=format('年龄为:%g',[ADOQueryOrder0.FieldbyName('年龄').AsFloat]);
DBGrid1.ShowHint:=True;
end else
begin
DBGridEh3.Hint:='';
DBGridEh3.ShowHint:=False;
end;
end;
------------
procedure Tmain_f.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Cell:TGridCoord;
begin
inherited;
Cell:=DBGrid1.MouseCoord(X,Y);
if (Cell.Y>0)then //Cell.Y=0表示移动到标题上了,不对
begin
if DBGrid1.SelectedField.FieldName='City' then
begin
DBGrid1.Hint:=DBGrid1.SelectedField.AsString;
DBGrid1.ShowHint:=True;
end;
end else
begin
DBGrid1.Hint:='';
DBGrid1.ShowHint:=False;
end;
end;
===============================================
用hint比较麻烦
用一个label来显示吧,将label放在panel里,panel颜色设成clInfoBk;
在dbgrid的oncellclick里写
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
size1:size;
po:tpoint;
begin
label1.Caption:=dbgrid1.SelectedField.AsString;
gettextextentpoint32(getdc(dbgrid1.Handle),pchar(label1.caption),length(label1.caption),size1);
panel1.Width:=size1.cx;
getcursorpos(po);
panel1.Top:=po.y-form1.Top;
panel1.Left:=po.X-form1.Left;
panel1.Visible:=true;
end;
当鼠标经过panel里将panel隐藏
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
panel1.Visible:=false;
end;
============================
//参考
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Table1: TTable;
procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
FGridCoord: TGridCoord;
FMousePoint: TPoint;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
vGridCoord: TGridCoord;
begin
vGridCoord := TDBGrid(Sender).MouseCoord(X, Y);
if (FGridCoord.X = vGridCoord.X) and (FGridCoord.Y = vGridCoord.Y) then Exit;
FMousePoint := Point(X, Y);
FGridCoord := vGridCoord;
TDBGrid(Sender).Refresh;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
vGridCoord: TGridCoord;
begin
vGridCoord := TDBGrid(Sender).MouseCoord(Rect.Left, Rect.Top);
if (FGridCoord.X = vGridCoord.X) and (FGridCoord.Y = vGridCoord.Y) then
Caption := Column.Field.DisplayText;
end;
========================
Label1.Caption:=DBGrid1.SelectedField.AsString +DBGrid1.SelectedField.FieldName;
if DBGrid1.SelectedField.FieldName='City' then
DBGrid1.Hint:=DBGrid1.SelectedField.AsString;