たびたびお世話になります。
FindDialogとReplaceDialogの処理のうち、検索の部分を共通化したいと思っております。こんな感じです。
//置き換え(ダイアログの検索キー)
procedure TForm1.ReplaceDialog1Find(Sender: TObject);
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
begin
1.検索プロシジャ呼び出し(Sender);
2.文字列の選択があれば置き換え処理
・・・・・・・・・・
SelLength := Length(ReplaceDialog1.FindText); //エラーにならず
end;
//検索(ダイアログの検索キー)
procedure TForm1.FindDialog1Find(Sender: TObject);
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
begin
検索プロシジャ呼び出し(Sender);
・・・・・・・・・
SelLength := Length(FindDialog1.FindText); //ここではエラーにならず
end;
//検索プロシジャ呼び出し(これから作りたい検索共通処理)
procedure TForm1.xxxxxxxxxxxx(Sender: TObject);
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
begin
SelLength := Length(Sender.FindText);
^^^^^^
end;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
"Sender"にオブジェクト(FindDialog1/ReplaceDialog1)が設定されているので
(Sender.classNameで確認)それぞれイベント処理で記述していた
検索時:SelLength := Length(FindDialog1.FindText);
置換時:SelLength := Length(ReplaceDialog1.FindText); を参考に
SelLength := Length(Sender.FindText); としてみましたが
エラー:未定義の識別子"FindText"となってしまいます。
なにを、どこで定義したらよいのでしょうか? どうかお願い致します。
Sender(TObjectクラス)には FindTextというメンバ関数はないので、
エラーになるのは当然ということで…なりすまし(‾〜‾)
if Sender is TFindDialog then SelLength := Length((Sender as TFindDialog).FindText); // 検索
if Sender is TReplaceDialog then SelLength := Length((Sender as TReplaceDialog).FindText); // 置換
なんとかFind/Replaceの処理を共通化しようとしたのですが、やはり個々に対応した方が確実なようです。お手間をかけました。ありがとうございました。
編集 削除