テキストダブルクリック時の選択範囲を補正するには?

解決


KEN  2007-03-10 09:50:51  No: 25253

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;
    }

  }
}

//---------------------------------------------------------------------------


なんでC++Builderコード?  2007-03-12 04:41:39  No: 25254

>試しにデバッガで実行するとうまく動きますが、外すと動かないのです。
どちらの場合も問題なく動くけど、環境依存?
なら、POSTしてみたら?
PostMessage(Handle, WM_APP, RichEdit1.SelStart, RichEdit1.SelLength);


KEN  2007-03-13 11:18:32  No: 25255

レスありがとうございました。

レス頂いた方法でためして、うまく動作することを確認しました。
原因は、他のプログラムにも若干関係してるかもしれないので機種依存かは
はっきりつかめませんが、ありがとうございました。

DELPHIとC++Builderを持ってるのですが現在C++Builderで組むことが多いもので
失礼しました。m(__)m


KEN  2007-03-13 11:19:15  No: 25256

解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加