AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
Delphi2010 置換の画面 2010/11/06
 
前回は[Dialogs]内の「FindDialog」(「検索」画面)について見ましたので今回も同じく[Dialogs]内の「ReplaceDialog」(「置換」画面)をみてみます。「置換」画面は Delphi6 にもあります。

 
「テスト21」を開いて、ボタン[置換](Button7)を追加しておき、この「置換」画面 ReplaceDialog を配置してみます。1つ目ですので Nameプロパティは「ReplaceDialog1」となります。アイコン絵となりますが実行時には「置換」画面が表示されます。

 
「置換」画面は、メモやリッチエディット等の文章入力用コンポーネントやデータ内で入力・登録している文章・文字列データの中からある特定の文字を検索し、それを別の文字に置き換える(入れ替える)機能を実行したい場合に利用できる画面です。「検索」画面と同様、この画面でなくとも、そういうフォーム画面を自作する事でも実現出来ますが、予め用意されている機能を利用すればその分簡単(楽)に出来ます、という感じのものです。
ボタン[置換](Button7)をクリックした時の処理を記述します。
procedure TForm1.Button7Click(Sender: TObject);
begin
 ReplaceDialog1.Execute ;
end;
これで「置換」画面が表示されます。次に、「置換」画面での[次を検索]ボタンをクリックした時の処理、ReplaceDialog1 の OnFindイベントハンドラを記述します。これは「検索」画面のものとほとんど同じです。
procedure TForm1.ReplaceDialog1Find(Sender: TObject);
var
 i : integer ;
begin
 i := AnsiPos(ReplaceDialog1.FindText,Memo1.Text);
 if (i > 0) then begin
  Memo1.SelStart := i-1 ;
  Memo1.SelLength := Length(ReplaceDialog1.FindText);
  Memo1.SetFocus ;
 end;
end;
次に、「置換」画面での[置換して次へ]ボタンをクリックした時の処理、ReplaceDialog1 の OnReplaceイベントハンドラを記述します。これも似たような感じです(※[全て置換]には対応していません)。
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
var
 i : integer ;
begin
 i := AnsiPos(ReplaceDialog1.FindText,Memo1.Text);
 if (i > 0) then begin
  Memo1.SelStart := i-1 ;
  Memo1.SelLength := Length(ReplaceDialog1.FindText);
  Memo1.SelText := ReplaceDialog1.ReplaceText ;
  Memo1.SetFocus ;
 end;
end;
これでとりあえず保存・コンパイル(再構築)・実行を行います。

テキトウに文章を入力して[置換]ボタンをクリック


「置換」画面が表示されます


「検索する文字列」に、探したい文字を入力し
[次を検索]ボタンをクリックすると
その箇所を反転文字(選択)状態にします
 

「置換後の文字列」に、置き換えたい文字を入力し
[置換して次に]ボタンをクリックすると
置換処理を行います
 
この場合、置換処理は行いますが、どこが変わったのかが分かりませんので、再度、その文字を選択状態にするように追記します。
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
var
 i : integer ;
begin
 i := AnsiPos(ReplaceDialog1.FindText,Memo1.Text);
 if (i > 0) then begin
  Memo1.SelStart := i-1 ;
  Memo1.SelLength := Length(ReplaceDialog1.FindText);
  Memo1.SelText := ReplaceDialog1.ReplaceText ;
  Memo1.SelStart := i-1 ;
  Memo1.SelLength := Length(ReplaceDialog1.ReplaceText);
  Memo1.SetFocus ;
 end;
end;
これで保存・コンパイル(再構築)・実行を行えば下記のようになります。

 
「印刷」「検索」画面などと同様、「置換」画面を表示(実行)するには Executeメソッドを利用します。「検索」画面同様、[OK]ボタンはありません。[次へ検索]ボタンをクリックすると、ReplaceDialog1 の OnFindイベントが実行されますので、そのイベントハンドラで検索を行わせるようにします。また、[置換して次に]ボタンをクリックすると、ReplaceDialog1 の OnReplaceイベントが実行されますので、そのイベントハンドラで置換を行わせるようにします。これらボタンをクリックしても、特別、閉じるという処理を入れない限り、「置換」画面は閉じられずそのまま画面に表示されています。[閉じる]ボタンをクリックすると閉じられます。「検索する文字列」で入力した文字は、ReplaceDialog1 の FindTextプロパティで設定/取得する事が出来ます。同様に、「置換後の文字列」で入力した文字は、ReplaceDialog1 の ReplaceTextプロパティで設定/取得する事が出来ます。
 
検索の処理については、「検索」画面と同じですので再度説明する必要はないでしょう。置換の処理は、検索を行って選択状態(SelStart、SelLength)にしたあと、選択文字を置き換える事(SelText)によって置換を行うようにしています。ここではメモ Memo1 に対してそのような処理を行っていますが、リッチエディットであれば FindTextメソッドで検索をした後に置換処理を行えば良いでしょう。その他の場合、データを順番にチェックしていくというような事を行う場合もあります。どういうデータを置換しようとしているのかにも依ります。
 
「置換」画面には、「検索」画面同様、「□単語単位で探す」「□大文字と小文字を区別する」という検索条件を指定するチェックボックスがあります。これを利用するか否かはプログラマの自由です。この「置換」画面で指定したからといって自動的にそういう機能が付加される訳ではありません。その指定をした場合には、そういう機能を実現するためのコーディングを行う必要があります。
 
例えば「□大文字と小文字を区別する」であれば、チェックをしない=大文字小文字を区別しない=大文字小文字を同一視する=検索対象となる文字データを大文字又は小文字に変換して(AnsiUpperCase関数やAnsiLowerCase関数などを使って)検索を行う、という事もあれば、リッチエディットであればそのためのOptionsプロパティが用意されていたりします。
 
 
「検索」画面同様、「置換」画面の Optionsプロパティは、その外観や動作状態・状態取得などを行う事が出来ます。以下ヘルプより。
frDisableMatchCase検索ダイアログの[大文字と小文字を区別する]チェックボックスを無効(グレー表示)にする
frDisableUpDown検索の方向を指定する[Up]ボタンおよび[Down]ボタンを無効(グレー表示)にする。検索ダイアログだけで使用する
frDisableWholeWord検索ダイアログの[単語単位で探す]チェックボックスを無効(グレー表示)にする
frDownダイアログが開くときにデフォルトで[Down]ボタンを選択する。frDown フラグがオフの場合は,[Up]が選択される。デフォルトでは frDown はオン
frFindNextこのフラグはユーザーが[Find Next]ボタンをクリックするとオンになり,ダイアログが閉じるとオフになる
frHideMatchCaseダイアログの[大文字と小文字を区別する]チェックボックスを削除する
frHideWholeWordダイアログの[単語単位で探す]チェックボックスを削除する
frHideUpDownダイアログの[Up]ボタンと[Down]ボタンを削除する
frMatchCaseこのフラグはユーザーが[大文字と小文字を区別する]チェックボックスを選択するとオンになり,選択を解除するとオフになる。ダイアログが開くときにデフォルトでチェックボックスを選択するには,設計時に frMatchCase を設定する
frReplaceTReplaceDialog にのみ適用される。このフラグは,FindText 文字列の現在の一致(現在の一致のみ)を ReplaceText 文字列で置換することを示すためにシステムによって設定される。検索ルーチンでは使用しない
frReplaceAllTReplaceDialog にのみ適用される。このフラグは,FindText 文字列と一致するすべての文字列を ReplaceText 文字列で置換することを示すためにシステムによって設定される
frShowHelp[ヘルプ]ボタンがダイアログボックスに表示される
frWholeWordこのフラグは,ユーザーが[単語単位で探す]チェックボックスを選択するとオンになり,選択を解除するとオフになる。ダイアログが開くときにデフォルトでチェックボックスを選択するには,設計時に frWholeWord を設定する
 
 
<オブジェクトインスペクタ>での内容は以下のようになっています。

 

 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/11/06
 2010/11/06
▼2010/11/07
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.