Избегайте щелчка правой кнопкой мыши для поля ввода - PullRequest
0 голосов
/ 13 марта 2012

Я хочу избежать щелчка правой кнопкой мыши на полях редактирования моего приложения, которые я делаю в BDS 2006. Я погуглил об этом, и я нашел код следующим образом.

noPopUp := TPopupMenu.create(Edit1);
Edit1.PopupMenu := noPopup;

Это написано в форме активации. Он отлично работает для edit1, но в форме есть много полей для редактирования, поэтому я написал цикл for,

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;

Это прекрасно работает для полей редактирования, чьим родителем является форма. Но если на групповых полях или панелях есть поля редактирования, эти панели и групповые блоки, в свою очередь, становятся дочерними элементами формы.

Итак, мой вопрос: как отключить щелчок правой кнопкой мыши на полях редактирования, когда родитель не является формой?

Ответы [ 2 ]

1 голос
/ 14 февраля 2014

Этот принятый ответ выделяет ненужную память.Тогда вы можете подумать, что это также вызывает утечки памяти, потому что созданное TPopupMenu никогда не освобождается.Но Create (AOwner) каждого TPopupMenu предотвращает это, освобождая эту память на TEdit's Free.

Чтобы избежать ненужного выделения памяти, попробуйте это:

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

и в цикле:

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

Это достаточно для того, чтобы делать то, что вы хотите!

С уважением!

0 голосов
/ 14 марта 2012

Решение не так уж далеко: замените управление компонентом, как это

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...