2012-03-13 7 views
0

私はBDS 2006で私のアプリケーションの編集ボックスをマウスで右クリックしないようにしたいと考えています。 私はそれについてgoogledし、次のコードを見つけました。編集ボックスのマウス右クリックを避ける

これはフォームの有効化によって書かれています。

for i := 0 to Self.ControlCount-1 do 
    begin 
    if Self.Controls[i].ClassName = 'TEdit' then 
    begin 
     noPopUp := TPopupMenu.create(Self.Controls[i]); 
     TEdit(Self.Controls[i]).PopupMenu := noPopup; 
    end; 
end; 

これは、その親フォームで編集ボックスの正常に動作し、それはEDIT1のため正常に動作しますが、そこに多くの編集ボックスはフォーム上にあるので、私は、forループを書きました。しかし、グループボックスやパネルにエディットボックスがある場合、これらのパネルとグループボックスはフォームの子になります。

私の質問は、フォームが親ではないときに編集ボックスを右クリックするのを無効にする方法です。

+2

編集ごとにポップアップを作成する必要はなく、複数の編集コントロールに同じポップアップを割り当てることができます。いずれの場合でも、空のポップアップを使用する代わりに、 'OnContextPopup'のイベントハンドラを設定し、 'Handled'パラメータを 'True'に設定する方が良いでしょう。 –

答えて

0

ないそこまでで解決策:この

for i := 0 to Self.ComponentCount-1 do 
    begin 
    if Self.Components[i].ClassName = 'TEdit' then 
    begin 
     noPopUp := TPopupMenu.create(Self.Components[i]); 
     TEdit(Self.Components[i]).PopupMenu := noPopup; 
    end; 
end; 
1

この受け入れ答えのような成分を有する代替コントロールは、不必要なメモリを割り当てます。作成されたTPopupMenuは決して解放されないので、メモリリークも発生すると考えることができます。しかし、各TPopupMenuのCreate(AOwner)はこれを防ぎ、このメモリをTEditのFreeで解放します。

このしようと、不必要なメモリアロケーションを避けるために:これは、あなたがやりたいことがenoughtです

for i := 0 to Self.ComponentCount-1 do 
    if Self.Components[i] is TEdit then 
     TEdit(Self.Components[i]).OnContextPopUp := MyContextPopup; 

procedure TForm1.MyContextPopup(Sender: TObject; MousePos: TPoint; 
    var Handled: Boolean); 
begin 
    Handled := True; 
end; 

とループ内を!

よろしくお願いいたします。

関連する問題