1

全体的なアイデア: たとえば、Windows デスクトップでキーボードの「c」キーを押して、「Chrome」ショートカットに到達するまで模倣します。または、リストボックスを使用しているときは、リスト全体をスクロールする代わりに、必要な値の文字を押します。DBGridでこれを実行できるようにしたいので、文字を押すと、「名前列」の文字列の最初の文字が押されたキーと一致するというレコードにジャンプできます。

4

3 に答える 3

1

これは呼び出さincremental searchれ、Embarcadero CodeCentral のサイトに作成方法のサンプルがあります。DBGrid - Incremental search / filter

于 2013-06-06T18:08:02.387 に答える
0

RRUZの回答に対するあなたのコメントについて:

私は TEdit なしで動作させようとしましたが、数時間後にあきらめました。しかし、私はあなたを落胆させたくありません。私もそのような解決策に興味があります。正確なユース ケースによっては、エントリを dbgrid にキャッチし、ルックアップをトリガーする非表示の TEdit に渡すだけで十分な場合があります。(私の場合、これでは十分ではありませんでした。)これを行うには、次のコードを使用して DBGrid1KeyPress メソッドを追加します。

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
  msg: TWMKey;
begin
  msg.CharCode := Ord(KEY);
  PostMessage(Edit1.Handle, WM_CHAR, Ord(key), 0);
end;

また、グリッドのオプションから doEditing を削除し、場合によってはそれを ReadOnly に切り替える必要があります。

于 2013-06-07T08:44:15.540 に答える
0

TEdit を画面に表示せずにこれを行う方法は、次のイベント スニペットを追加することです。次のコードは、以前 RRUZ によって参照された Embarcadero CodeCentral のコードの上で機能します。

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key=VK_BACK then
    begin
      Edit1.Text := copy(Edit1.Text,1,length(Edit1.Text)-1);
    end;
end;

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in ['a'..'z'] + ['A'..'Z']  then
  begin
      Edit1.Text := Edit1.Text + Key;
  end;
end;

その後、編集ボックスを非表示に設定できます。必要なのは、リストに集中してキーを押すことだけです。

于 2014-01-21T08:42:57.373 に答える