覚書:C++Builder Memoコンポーネントで文字列検索

C++Builder のMemo コンポーネントで、文字列を検索し、その場所へ

カーソルを移動するには、どうしたらいいだろう?

EMBARCADERO や他のサイトにも情報があったけど、よくわからないな~

C++Builder Tips - メモコンポーネントとメッセージ

 

とりあえず、いろいろやってみたら、動いたの、残しておきます

 

//前方へ検索

 int iMemoRow_ = Memo1->Perform(EM_LINEFROMCHAR,-1,0);
 UnicodeString Key = Edit1->Text;
 if(Key == "") return;
 int c = Memo1->Lines->Count;
 UnicodeString Line;
 int pos;
 for(int i=iMemoRow_+1;i<c;i++){
  Line = Memo1->Lines->Strings[i];
  pos = Line.Pos(Key);
  if(pos){
    iMemoRow_ = i;
    break;
  }else{
   iMemoRow_ = 0;
  }
 }
 Memo1->SelStart = Memo1->Perform(EM_LINEINDEX,iMemoRow_,0);
 Memo1->Perform(EM_SCROLLCARET,0,0);
 Memo1->SetFocus();

 

 

//後方へ検索

 int iMemoRow_ = Memo1->Perform(EM_LINEFROMCHAR,-1,0);
 UnicodeString Key = Edit1->Text;
 if(Key == "") return;
 int c = Memo1->Lines->Count;
 UnicodeString Line;
 int pos;
 for(int i=iMemoRow_-1;i>0;i--){
  Line = Memo1->Lines->Strings[i];
  pos = Line.Pos(Key);
  if(pos){
    iMemoRow_ = i;
    break;
  }else{
   iMemoRow_ = c;
  }
 }
 Memo1->SelStart = Memo1->Perform(EM_LINEINDEX,iMemoRow_,0);
 Memo1->Perform(EM_SCROLLCARET,0,0);
 Memo1->SetFocus();