C++ Builder Tips


置換機能の実装


置換ダイアログを表示して置換動作を行います。
TMemoとしてNowEditを配置し、テキスト検索をするソースです。
void __fastcall TMainForm::ReplaceDialogReplace(TObject *Sender)
{
    TSearchTypes SearchTypes;
    int SearchStart = NowEdit->SelStart+NowEdit->SelLength;
    bool ReplaceAllFlag;
    bool ReplaceEndFlag = false;
    unsigned int SearchResult;
    
    if(ReplaceDialog->Options.Contains(frWholeWord)){
        SearchTypes << stWholeWord;
    }
    if(ReplaceDialog->Options.Contains(frMatchCase)){
        SearchTypes << stMatchCase;
    }
    if(ReplaceDialog->Options.Contains(frReplaceAll)){
        ReplaceAllFlag = true;
    }
    if(ReplaceAllFlag == true){
      SearchStart = 0;
      while(ReplaceEndFlag ==false){
        SearchResult = NowEdit->FindText(ReplaceDialog->FindText,SearchStart,NowEdit->Text.Length(),SearchTypes);
         if(SearchResult == -1){
           ShowMessage("  置換終了  ");
           ReplaceEndFlag = true;
        }
        else{
          NowEdit->SelStart = SearchResult;
           NowEdit->SelLength = ReplaceDialog->FindText.Length();
          NowEdit->SelText = ReplaceDialog->ReplaceText;
          SearchStart = NowEdit->SelStart+NowEdit->SelLength;
        }
      }
    }
    else{
        while(ReplaceEndFlag == false){
         SearchResult = NowEdit->FindText(ReplaceDialog->FindText,SearchStart,NowEdit->Text.Length(),SearchTypes);
         if(SearchResult == -1){
           ShowMessage("見つかりませんでした");
           ReplaceEndFlag = true;
          }
          else{
            NowEdit->SelStart = SearchResult;
            NowEdit->SelLength = ReplaceDialog->FindText.Length();
           switch(MessageBox(Handle,"置換しますか?","確認",MB_YESNOCANCEL)){
             case IDYES:
               NowEdit->SelText = ReplaceDialog->ReplaceText;
               SearchStart = NowEdit->SelStart+NowEdit->SelLength;
               break;
             case IDNO:
               SearchStart = NowEdit->SelStart+NowEdit->SelLength;
               break;
             case IDCANCEL:
               return;
           }
          }
        }
    }
}


目次に戻る
Copyright(c) 2008 WoodenSoldier Software