string grid
検索ダイアログを使用してテキスト検索を行う方法はありますか? テキストを見つけて、テキストが見つかったときに通常どおり背景を強調表示する必要があります。
ありがとう!
string grid
検索ダイアログを使用してテキスト検索を行う方法はありますか? テキストを見つけて、テキストが見つかったときに通常どおり背景を強調表示する必要があります。
ありがとう!
このような:
procedure TForm1.FormClick(Sender: TObject);
begin
FindDialog1.Execute(Handle)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FindDialog1.Options := [frDown, frHideWholeWord, frHideUpDown];
end;
procedure TForm1.FindDialog1Find(Sender: TObject);
var
CurX, CurY, GridWidth, GridHeight: integer;
X, Y: integer;
TargetText: string;
CellText: string;
i: integer;
GridRect: TGridRect;
begin
CurX := StringGrid1.Selection.Left + 1;
CurY := StringGrid1.Selection.Top;
GridWidth := StringGrid1.ColCount;
GridHeight := StringGrid1.RowCount;
Y := CurY;
X := CurX;
if frMatchCase in FindDialog1.Options then
TargetText := FindDialog1.FindText
else
TargetText := AnsiLowerCase(FindDialog1.FindText);
while Y < GridHeight do
begin
while X < GridWidth do
begin
if frMatchCase in FindDialog1.Options then
CellText := StringGrid1.Cells[X, Y]
else
CellText := AnsiLowerCase(StringGrid1.Cells[X, Y]);
i := Pos(TargetText, CellText) ;
if i > 0 then
begin
GridRect.Left := X;
GridRect.Right := X;
GridRect.Top := Y;
GridRect.Bottom := Y;
StringGrid1.Selection := GridRect;
Exit;
end;
inc(X);
end;
inc(Y);
X := StringGrid1.FixedCols;
end;
end;
このコードは、後方検索 (「up」) をサポートするように簡単に拡張できます。また、「単語全体に一致」機能を実装することもできます。
おそらく、セル全体ではなく、一致したテキストのみを選択したいですか? それからする
if i > 0 then
begin
GridRect.Left := X;
GridRect.Right := X;
GridRect.Top := Y;
GridRect.Bottom := Y;
StringGrid1.Selection := GridRect;
GetParentForm(StringGrid1).SetFocus;
StringGrid1.SetFocus;
StringGrid1.EditorMode := true;
TCustomEdit(StringGrid1.Components[0]).SelStart := i - 1;
TCustomEdit(StringGrid1.Components[0]).SelLength := length(TargetText);
Exit;
end;
代わりは。しかし、これは検索ダイアログからフォーカスを奪うので、ユーザーは Return を押して次の一致を選択することができず、煩わしいかもしれません。