goo blog サービス終了のお知らせ 

サンデープログラマーの開発室

サンデープログラマーの開発室を秘密に公開。
ちょっとしたTipsもあるかも?

【Tips】C++Builder の TMemo の選択範囲のテキストを取得したい

2008-11-10 18:17:58 | Weblog
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) ;