1

WYSIWYG 編集用の単純なテキスト フィールドを作成しようとしています。ただし、特定の種類の書式設定のみを許可したい (たとえば、太字、斜体、下線、単一の見出しの種類、色や異なるフォントは許可しない)。

問題は、書式設定を受け入れることができるエディターを使用すると、誰かが別のプログラムで書式設定されたテキストを作成またはコピーしてから、それをテキスト フィールドに貼り付けるだけで、その書式設定がすべて一緒に行われ、私が興味のないことを許可することです。異なるフォント、色などとして。私はそれを許可したくありません。

せいぜい、サポートしていない書式設定を自動的に削除したいだけです。最悪の場合、単純にプレーンテキストとして貼り付けて、再フォーマットする必要があります。しかし、クリップボードをテキスト領域にダンプしたいだけではありません。

これを行う方法について何か考えはありますか?

4

2 に答える 2

1

新しいテキストフィールド/テキスト領域クラスを作成し、(a)クリップボードのテキストの処理に関して探していることを実行し、(b)デフォルトの貼り付けが行われないようにtrueを返すEditPasteメニューハンドラーを作成することをお勧めします。これは、ユーザーが編集メニューから手動で貼り付けを選択する可能性があるため、キーダウンイベントを使用するよりも安全です。

クリップボードオブジェクトを作成すると、クリップボードのテキストにアクセスできます。

テキストフィールドをサブクラス化し、メニューの貼り付けコマンドをインターセプトするには:

  1. プロジェクトを開いた状態で、[プロジェクトメニュー]>[追加]>[クラス]に移動します
  2. プロジェクトのタブで新しいクラスを選択し、プロパティパネルでスーパーをTextFieldに設定します
  3. クラスをダブルクリックして編集します
  4. クラスのツールバー中央にある[メニューハンドラーの追加]ボタンをクリックします
  5. メニュー項目名を「EditPaste」に変更します。「returntrue」の前にコードを入れ、必ずreturntrueのままにしてください。

コードは、テキストを手動でフォーマットして貼り付け、デフォルトの貼り付け機能をオーバーライドできます。

そのテキストフィールドにcommand-Vまたはcontrol-Vがあると、そのメニューハンドラーが起動します。実際の基本ではデフォルトのコンテキストメニューが作成されないため、コンテキストメニューはとにかく追加されます。したがって、これも制御できます。

テキストフィールドをウィンドウに追加するには、オブジェクトリストの上のフィルターをプロジェクトコントロールに変更し、そこからクラスをドラッグします。

于 2011-12-10T19:51:43.343 に答える
1

KeyDown イベントで貼り付けをインターセプトすることで、自分でペーストをインターセプトできます。次に、自分で解析することができます。ちょっと難しいかもしれませんが、それが唯一の方法だと思います。

貼り付け後に結果の StyleRun を解析し、不要な書式を取り除く方が簡単かもしれません。

または、True North Software の Formatted Text Control を見て、コントロールの貼り付けメソッドをオーバーライドし (すべてのソースを取得します)、自分で処理することもできます。

いずれにせよ、かなりの量の作業になると思います。

于 2011-11-20T06:03:14.377 に答える