Отключить правую кнопку мыши
Модератор: Модераторы
Отключить правую кнопку мыши
Всем привет,
не подскажите как отключить правую кнопку мыши (или виндовский меню) во всей форме (Form1)? Не хочу, что бы в memo или edit виндовские меню открывались.
Спасибо!
не подскажите как отключить правую кнопку мыши (или виндовский меню) во всей форме (Form1)? Не хочу, что бы в memo или edit виндовские меню открывались.
Спасибо!
"Привязать" к необходимым компонентам пустой PopupMenu...
Дешево и сердито. Кросс и без выкрутасов
Дешево и сердито. Кросс и без выкрутасов
Ни чё так идея... а можно это как-то глобально сделать, одним "ударом" для всех edit и memo?
Можно.
А вообще по правильному отлавливать нужно клик мыши на форме,
но кроссплатформенно не получится. Для Windows задействовать Messages, для Linux xlib или gtk
Код: Выделить всё
for i:=0 to ComponentCount-1 do
if Components[i] is TEdit then
(Component[i] as TEdit).PopupMenu:=PopupMenu1;А вообще по правильному отлавливать нужно клик мыши на форме,
но кроссплатформенно не получится. Для Windows задействовать Messages, для Linux xlib или gtk
Благодарствую! 
по правильному может долго оказаться (если под кросс). Плюс возможны условия.по правильному отлавливать нужно клик мыши на форме,
А так... Пробежал по компонентам и будет работать без отладки и поисков почему не работает.
п.с.
одного не пойму: ЗАЧЕМ так "резать" пользователя?
pupsik писал(а):одного не пойму: ЗАЧЕМ так "резать" пользователя?
Это софт для терминала, работать можно только пальцем, выполнять заказы. Больше чем это пользователю не надо.
- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
Код: Выделить всё
{ Если только для 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 в лине (думаю не только) OnMouseDown так не сработает 
Добавлено спустя 12 минут 17 секунд:
Кстати:
попроще будет 
Добавлено спустя 12 минут 17 секунд:
Кстати:
Код: Выделить всё
procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
Handled := True;
end;- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
в Debian прекрасно сработало . Я на Debian и код был написан и испытан на нем же 
эх... конеШно сработает... Т.е. выведёт сообщение. А вот блокировать дефолтный не будет...
- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
будет . Проверьте
Повторюсь: дефолтный Popup так не убрать...
А вот Memo1ContextPopup вполне на это способен
А вот Memo1ContextPopup вполне на это способен
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
а так везде отключается попуп-меню
Добавлено спустя 2 минуты 43 секунды:
кроме заголовка окна . Но раз приложения для терминала пишется , то рамки окна не будет же
Код: Выделить всё
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 секунды:
кроме заголовка окна . Но раз приложения для терминала пишется , то рамки окна не будет же
А можно и не везде. И без цикла.
п.с.
Хотя "пустышка" проще
п.с.
Хотя "пустышка" проще
У вас нет необходимых прав для просмотра вложений в этом сообщении.
