RichEditコンポーネントでテキストをダブルクリックしたとき、
文字列が選択されますが、この選択文字の後半の数値を
省くような関数を作ったのですが、イベントが割り込んで
選択文字列が消されてしまいます。
試しにデバッガで実行するとうまく動きますが、外すと動かないのです。
どう対応すればいいでしょうか?
以下に作成したコードのサンプルですが、申し訳ありません。
C++Builderのコードですが勘弁してください。(^^)ゞ ぽりぽり
以下の関数をRichEditのマウスイベントに記述する。
RichEdit1MouseDown()
{
//ダブルクリックでラベルを選択する
SetLabelSel(Button,Shift);
}
//---------------------------------------------------------------------------
//ダブルクリックでラベルを選択する
void __fastcall TForm1::SetLabelSel(TMouseButton Button,TShiftState Shift)
{
//------------------------------------------------------------
// 選択範囲を強制する。(スペース、数値を外す)[OnMouseDownイベント]
//------------------------------------------------------------
if(Button == 0 && true == Shift.Contains(ssDouble)){ //左ダブルクリック
AnsiString str;
AnsiString text = RichEdit1->SelText;
long length = RichEdit1->SelLength;
//選択範囲チェック
for(long i=length;1<i;i--){
str = text.SubString(i,1);
else if(0 <= str.AnsiCompare("0") && 0 >= str.AnsiCompare("9")) //0〜9チェック
length--;
else
break;
}
//選択範囲再設定
if(RichEdit1->SelLength != length){
RichEdit1->SelLength = length;
}
}
}
//---------------------------------------------------------------------------
>試しにデバッガで実行するとうまく動きますが、外すと動かないのです。
どちらの場合も問題なく動くけど、環境依存?
なら、POSTしてみたら?
PostMessage(Handle, WM_APP, RichEdit1.SelStart, RichEdit1.SelLength);
レスありがとうございました。
レス頂いた方法でためして、うまく動作することを確認しました。
原因は、他のプログラムにも若干関係してるかもしれないので機種依存かは
はっきりつかめませんが、ありがとうございました。
DELPHIとC++Builderを持ってるのですが現在C++Builderで組むことが多いもので
失礼しました。m(__)m
解決しました。
ツイート | ![]() |