TMemo 内で範囲選択されたテキストを取得したい場合のサンプル。
もっと効率良いやり方はないものなのか??
肝は得られる iX の値は何文字目になっていること。SubString はバイト単位なので、当然狂うので面倒だけど以下のようなプログラムを書いてみた。まぁ、できることはできるw
--------------------------------------------------
int x , c ;
int iY = memo->Perform(EM_LINEFROMCHAR,memo->SelStart, 0) ;
int iX = memo->SelStart - memo->Perform(EM_LINEINDEX,
memo->Perform(EM_LINEFROMCHAR,memo->SelStart, 0), 0) ;
// 選択されている行の文字列
AnsiString tst = memo->Lines->Strings[iY] ;
// 選択されている文字まで
for ( c = 0 , x = 0 ; c <= iX ; ) {
if ( tst.ByteType(x) == mbSingleByte )
x ++ ;
else x += 2 ;
c ++ ;
}
AnsiString AnsiResult = tst.SubString(x,memo->SelLength) ;
もっと効率良いやり方はないものなのか??
肝は得られる iX の値は何文字目になっていること。SubString はバイト単位なので、当然狂うので面倒だけど以下のようなプログラムを書いてみた。まぁ、できることはできるw
--------------------------------------------------
int x , c ;
int iY = memo->Perform(EM_LINEFROMCHAR,memo->SelStart, 0) ;
int iX = memo->SelStart - memo->Perform(EM_LINEINDEX,
memo->Perform(EM_LINEFROMCHAR,memo->SelStart, 0), 0) ;
// 選択されている行の文字列
AnsiString tst = memo->Lines->Strings[iY] ;
// 選択されている文字まで
for ( c = 0 , x = 0 ; c <= iX ; ) {
if ( tst.ByteType(x) == mbSingleByte )
x ++ ;
else x += 2 ;
c ++ ;
}
AnsiString AnsiResult = tst.SubString(x,memo->SelLength) ;