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

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

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

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

Сообщение McLion » 14.06.2016 22:05:42

Всем привет,

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

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

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

Сообщение pupsik » 15.06.2016 04:07:58

"Привязать" к необходимым компонентам пустой PopupMenu...
Дешево и сердито. Кросс и без выкрутасов :lol:
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение McLion » 15.06.2016 14:36:40

Ни чё так идея... а можно это как-то глобально сделать, одним "ударом" для всех edit и memo?
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

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

Сообщение WAYFARER » 15.06.2016 15:02:31

Можно.
Код: Выделить всё

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


А вообще по правильному отлавливать нужно клик мыши на форме,
но кроссплатформенно не получится. Для Windows задействовать Messages, для Linux xlib или gtk
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

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

Сообщение McLion » 15.06.2016 15:25:38

Благодарствую! :D
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

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

Сообщение pupsik » 15.06.2016 15:28:55

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

п.с.
одного не пойму: ЗАЧЕМ так "резать" пользователя?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение McLion » 15.06.2016 15:31:09

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


Это софт для терминала, работать можно только пальцем, выполнять заказы. Больше чем это пользователю не надо.
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

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

Сообщение AlphaBlend » 15.06.2016 23:02:57

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

{ Если только для  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  ^_^ }
                                                                                           
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение pupsik » 15.06.2016 23:42:58

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

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

Код: Выделить всё
procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
  Handled := True;
end;
попроще будет :wink:
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение AlphaBlend » 15.06.2016 23:56:59

в Debian прекрасно сработало . Я на Debian и код был написан и испытан на нем же :roll:
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение pupsik » 15.06.2016 23:59:42

эх... конеШно сработает... Т.е. выведёт сообщение. А вот блокировать дефолтный не будет...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение AlphaBlend » 16.06.2016 00:00:31

будет . Проверьте
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение pupsik » 16.06.2016 00:06:26

Повторюсь: дефолтный Popup так не убрать...
А вот Memo1ContextPopup вполне на это способен :D
У вас нет необходимых прав для просмотра вложений в этом сообщении.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение AlphaBlend » 16.06.2016 00:22:18

а так везде отключается попуп-меню :)
Код: Выделить всё
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:
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение pupsik » 16.06.2016 00:52:53

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

п.с.
Хотя "пустышка" проще :twisted:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 252

Рейтинг@Mail.ru