覚書: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();