Отключить правую кнопку мыши

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Отключить правую кнопку мыши

Сообщение McLion »

Всем привет,

не подскажите как отключить правую кнопку мыши (или виндовский меню) во всей форме (Form1)? Не хочу, что бы в memo или edit виндовские меню открывались.

Спасибо!
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

"Привязать" к необходимым компонентам пустой PopupMenu...
Дешево и сердито. Кросс и без выкрутасов :lol:
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Ни чё так идея... а можно это как-то глобально сделать, одним "ударом" для всех edit и memo?
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 567
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

Можно.

Код: Выделить всё

 
for i:=0 to ComponentCount-1 do
    if Components[i] is TEdit then
     (Component[i] as TEdit).PopupMenu:=PopupMenu1;


А вообще по правильному отлавливать нужно клик мыши на форме,
но кроссплатформенно не получится. Для Windows задействовать Messages, для Linux xlib или gtk
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Благодарствую! :D
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

по правильному отлавливать нужно клик мыши на форме,
по правильному может долго оказаться (если под кросс). Плюс возможны условия.
А так... Пробежал по компонентам и будет работать без отладки и поисков почему не работает.

п.с.
одного не пойму: ЗАЧЕМ так "резать" пользователя?
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

pupsik писал(а):одного не пойму: ЗАЧЕМ так "резать" пользователя?


Это софт для терминала, работать можно только пальцем, выполнять заказы. Больше чем это пользователю не надо.
Аватара пользователя
AlphaBlend
постоялец
Сообщения: 207
Зарегистрирован: 22.05.2016 09:13:10

Сообщение AlphaBlend »

Код: Выделить всё


{ Если только для  Edit  и  Memo  может вот так поможет ?  Хотя  такой  вариант  уже предлагали }
type

Tfunctions = class
  procedure OnPopup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
end;

  procedure Tfunctions.OnPopup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
     if Button = mbRight then showmessage('Можно ничего не  делать , а  можно что-нибудь сделать!');
  end;

var

  i:Cardinal;
  FalsePopup:TpopupMenu;
  functions:Tfunctions;

begin

  {
    Если использовать первый вариант - надо закомментировать или удалить второй
    И  наоборот - Если использовать второй  вариант - отказаться  от первого
    Хотя  они оба  работают вместе , но это мне кажется  не  нужно так ..
  }

  FalsePopup:=TpopupMenu.Create(nil);
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);

  with Application.MainForm do
         begin
             For i:=0 to Application.MainForm.ComponentCount-1 do
               begin

                  { РАНЕЕ  ПРЕДЛОЖЕННЫЙ ВАРИАНТ }{ первый  вариант , предложенный  WAYFARER }

                   if (Components[i] is Tmemo) then (Components[i] as TMemo).PopupMenu:=FalsePopup;
                   if (Components[i] is TEdit) then (Components[i] as TEdit).PopupMenu:=FalsePopup;

                   { ТОЖЕ МОЖЕТ БЫТЬ ПОЛЕЗНО ^_^ }{ второй вариант }

                   functions:=Tfunctions.Create;

                   if (Components[i] is Tmemo) then (Components[i] as TMemo).OnMouseDown:=@Functions.OnPopup;
                   if (Components[i] is TEdit) then (Components[i] as TEdit).OnMouseDown:=@Functions.OnPopup;
              end;
        end;

  Application.Run;
  {  работает в Linux и  Windows  ^_^ }
                                                                                           
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

AlphaBlend в лине (думаю не только) OnMouseDown так не сработает :)

Добавлено спустя 12 минут 17 секунд:
Кстати:

Код: Выделить всё

procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
  Handled := True;
end;
попроще будет :wink:
Аватара пользователя
AlphaBlend
постоялец
Сообщения: 207
Зарегистрирован: 22.05.2016 09:13:10

Сообщение AlphaBlend »

в Debian прекрасно сработало . Я на Debian и код был написан и испытан на нем же :roll:
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

эх... конеШно сработает... Т.е. выведёт сообщение. А вот блокировать дефолтный не будет...
Аватара пользователя
AlphaBlend
постоялец
Сообщения: 207
Зарегистрирован: 22.05.2016 09:13:10

Сообщение AlphaBlend »

будет . Проверьте
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

Повторюсь: дефолтный Popup так не убрать...
А вот Memo1ContextPopup вполне на это способен :D
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
AlphaBlend
постоялец
Сообщения: 207
Зарегистрирован: 22.05.2016 09:13:10

Сообщение AlphaBlend »

а так везде отключается попуп-меню :)

Код: Выделить всё

 Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  FalsePopup:=TpopupMenu.Create(nil);
  with Application.MainForm do
     begin
        For i:=0 to ComponentCount-1 do
           begin
              (Components[i] as Tcontrol).PopupMenu:=FalsePopup;
            end;
        end;
  Application.Run;                     


Добавлено спустя 2 минуты 43 секунды:
кроме заголовка окна . Но раз приложения для терминала пишется , то рамки окна не будет же :roll:
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

А можно и не везде. И без цикла. :wink:

п.с.
Хотя "пустышка" проще :twisted:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить