掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
StringGridで検索した文字列のフォーカスを維持するには? (ID:9710)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
また基本的なところ?でつまづいている気がします。教えてください。 検索ダイアログで文字検察するとき、事前のフォーカスが消えてしまい、検索された文字列も、検索ダイアログを消すかフォームをクリックするまでハイライトされません。 過去ログにあったHideSelectionも探したのですが、TInplaceEditのプロパティの中には見当たらず、文法エラーで受け付けてももらえませんでした。 どう振舞ったらよいのでしょうか? 長いですが、コードのおおよそを記載します。 {検索メニューをクリック} procedure THwdForm.Find1Click(Sender: TObject); begin if StringGrid1.ControlCount > 0 then begin FindDialog1.FindText := TInplaceEdit(StringGrid1.Controls[0]).SelText; FindDialog1.Execute; end; end; {「次を検索」ボタンを押す} procedure THwdForm.FindDialog1Find(Sender: TObject); begin if FindDialog1.FindText = '' then ShowMessage('空文字列は検索できません') else begin FindWork(Sender, FindDialog1.FindText); // FindDialog1.CloseDialog; //これをしないとハイライトしないのが困る end; end; {同列を次行から下まで検索する} procedure THwdForm.FindWork(Sender: TObject; FText: String); var i: Integer; FoundAt, StartPos: Integer; begin with StringGrid1 do begin for i:=Row+1 to RowCount-1 do begin StartPos := 0; FoundAt := Pos(FText, Cells[Col, i]); if FoundAt > 0 then break; end; if FoundAt = 0 then ShowMessage('以降の行に検索文字列は見当たりません') else begin Row := i; Setfocus; with TInplaceEdit(Controls[0]) do begin SelStart := FoundAt + StartPos - 1; SelLength := Length(FText); end; end; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.