2012-06-20 13 views
5

フォーム上のTStaticTextをダブルクリックすると、そのTStaticTextのキャプションがクリップボードにコピーされます。ダブルクリックイベントは必要ありません。Delphi XE2アプリでTStaticTextをダブルクリックすると、キャプションがクリップボードにコピーされます

再現する手順:勝利64を使用して

  • とDelphi XE2の更新4.
  • VCLを作成してアプリをフォーム。
  • フォームにTEditを配置します。
  • フォームにTStaticTextを配置します。キャプションを "TStaticText1Caption"に変更する
  • フォームに2番目のTStaticTextを配置します。キャプションを「TStaticText2Caption」に変更する
  • プログラムを実行する(F9)
  • テキストをTEditに入力します。すべて選択し、CTRL + Cでコピーします。
  • TEdit内のテキストを削除します。テキストを貼り付けて、テキストがコピーされたものであることを確認します。
  • TEdit内のテキストを削除します。
  • TStaticTextをダブルクリックします。
  • テキストをTEditに貼り付けます。コピーされた元のテキストではなく、TStaticTextのキャプションであることに注意してください。

私はすでにEmbarcaderoにバグレポートを提出しています。

私はTStaticTextsにダブルクリックイベントを割り当てようとしました。ダブルクリックイベントを実行してもキャプションはクリップボードにコピーされます。

procedure TForm1.StaticText1DblClick(Sender: TObject); 
begin 
    Edit1.Text := 'Hello'; 
end; 

procedure TForm1.StaticText2DblClick(Sender: TObject); 
begin 
    Edit1.Text := 'World'; 
end; 

これは私が試したTLabelや他のVCLコントロールでは起こりません。

ビジュアルデザインのために私たちのフォームにたくさんのTStaticTextがあり、TLabelsへの変更はオプションではありません。

誰にもこのようなことが起こらないようにする方法はありますか?

答えて

8

これはデルファイのバグではありません。この現象は、TStaticText VCLコンポーネントによって作成されたWindows Static Controlによって引き起こされます。あなたは(SS_NOTIFYスタイルがTCustomStaticText部品のCreateParamsをメソッドによって設定されSS_NOTIFYスタイルを設定した場合、あなたがそれらをダブルクリックするとWindows Vistaで起動する

は、スタティックテキストコントロールが自動的にクリップボードにその内容をコピーしますHow do I make it so that users can copy static text on a dialog box to the clipboard easily?

としては、あなたがそう

などのCreateParamsをメソッドをオーバーライド SS_NOTIFYスタイルを削除することができます回避)

お奨め講義

type 
    TStaticText = class(Vcl.StdCtrls.TStaticText) 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    end; 

    TForm1 = class(TForm) 
    StaticText1: TStaticText; 
    private 
    public 
    end; 

var 
    Form1: TForm42; 

implementation 

{$R *.dfm} 

{ TStaticText } 

procedure TStaticText.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    with Params do 
    Style := Style and not SS_NOTIFY; 
end; 

注:コントロールからこのスタイルを削除すると、ユーザーがコントロールをクリックまたはダブルクリックしたときにSTN_CLICKED、STN_DBLCLK、STN_DISABLE、およびSTN_ENABLE通知コードを受け取らないことに注意する必要があります。

+0

あなたがリンクしている記事によると、「SS_NOTIFY」静的コントロールの*ダブルクリック機能を無効にしたい場合は、静的コントロールをサブクラス化して、あなた自身。 " –

+0

はい、これも有効なオプションです。 – RRUZ

+0

私は答えを感謝します。私はVCLコントロールが古いデルファイと比較して新しいデルファイでどのように作成されるのかを内部的に変更したと思います。 Delphi 6からXE2への変換には、ほとんど問題はありませんでした。これが問題の原因となる代替案を見つける必要があります。 –

関連する問題