2

画面の幅は、一部のテキストフィールドを表示するのに十分ではありません。自動ラップする方法がわからないので、簡単にできるとは思えません。

だから、私は次のようなことをするだろうと思いました

procedure TForm1.FormMouseMove(Sender: TObject;
    Shift: TShiftState; X,Y: Integer);

   var column, row : Integer;
begin
  myDbGrid.MouseToCell(X, Y, column, row);
  myDbGrid.Hinst := myDbGrid.Cells(column, row); // <==== ooops
end;

または、それを実行しOnShowHintてマウス座標を取得し、それらを列と行に変換します(より効率的)

しかし、もちろん、TDbGridにはがありませんCells。ユーザーがグリッドの「セル」の上にマウスを移動したときに、コントロールのヒントを設定する方法はありますか?

4

2 に答える 2

10

このコードを使用します:

type
 THackGrid = class(TDBGrid);

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Cell: TGridCoord;
  ActRec: Integer;
begin
  Cell := DBGrid1.MouseCoord(X, Y);
  if dgIndicator in DBGrid1.Options then
    Dec(Cell.X);
  if dgTitles in DBGrid1.Options then
    Dec(Cell.Y);
  if THackGrid(DBGrid1).DataLink.Active and (Cell.X >= 0) and
    (Cell.Y >= 0) then
  begin
    ActRec := THackGrid(DBGrid1).DataLink.ActiveRecord;
    try
      THackGrid(DBGrid1).DataLink.ActiveRecord := Cell.Y;
      Caption := DBGrid1.Columns[Cell.X].Field.AsString;
    finally
      THackGrid(DBGrid1).DataLink.ActiveRecord := ActRec;
    end;
  end;
end;
于 2012-10-25T10:43:43.423 に答える
1

これは、グリッドに接続されたデータセットの値の1つをヒントとして表示する私のプログラムから直接取得したコードです(簡略化されていますが)。

procedure TMainForm.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
 MousePos: TGridCoord; // X = Column, Y = Row

begin
 MousePos:= DBGrid1.MouseCoord (X, Y);
 if mousepos.X = 6  // we are over the 'tops' field
  then mainform.hint:= qPeopleTops.asstring;  // show for current person
end;
于 2012-10-25T10:27:08.837 に答える