非常に面倒なので、メモ コントロールでテキストの選択を無効にする方法はありますか。
メモは読み取り専用です。
4 に答える
考え直したほうがいいと思います。コントロールが読み取り専用モードで使用されていることは承知していますが、エンド ユーザーがテキストの一部をコピーしたい場合はどうすればよいでしょうか? 次に、問題のパーツを選択できる必要があります。
それでも、すべての種類の選択を無効にする必要があることが確実な場合、最も簡単な方法は のTRichEdit
代わりにを使用し、TMemo
単純に行うことです。
procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
RichEdit1.SelLength := 0;
end;
onMouseUp イベントを使用することもできます
procedure TForm1.Memo1MouseUp(Sender: TObject: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Memo1.SelLength > 0 then
Memo1.SelLength := 0;
end;
しかし、それではキーボードでの選択が止まりません..
または、onEnter を使用して、フォーカスをフォーム上の別のコントロールに変更することもできます。
procedure TForm1.Memo1Enter(Sender: TObject);
begin
Edit1.SetFocus;
end;
TRichEdit と TMemo をいじくり回して、涙が出るほど退屈しました。はい、オブジェクトのイベント処理でいくつかのトリックを行うことができますが、それでも目的の効果ではなく、カーソルがどこかで点滅してしまいます。したがって、私が見つけた最善の方法は、TLabel を使用することでした。Borland C++ Builder 6 を使用していますが、\n は TLabel のインライン テキスト文字列で正しく変換されます。そう、
Label1->Caption = "this is a test of the emergency\n"
"broadcast station, this is only\n"
"a test. If this had been an\n"
"actual emergency, blah blah blah...\n";
うまく動作します。私はファイルから読み込もうとしたことはありませんが、ストリームが見たとおりであれば、それも機能すると確信しています。とにかく表示したいテキストを入力または読み取る必要があるため、これは、各行に多数の TLabels を使用する代わりにうまく機能するはずです。ワードラップが気になる場合は、その部分を別途処理する必要があります。静的な場合は、例で行ったように手動で実行してください。これが役立つか、少なくともアイデアが得られることを願っています...
- アトムキー -