Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Необычная работа с МЫШКОЙ


Автор: dolphik 5.3.2007, 18:05
Всем доброго времени суток!
Разрабатываю тут програмку одну, и смотрю на свою мишку- в ней 5 кнопок, а обычно раньше у пользователей 3-левая,правая, на колесе. Но со временем народ расчехляеться и все покупают крутые мышки. Мне удобно с моёй мишкой работать в проводнике-2 клавиши замечательно подходят для перемещения взад,вперёд по папкам.
Так вот хочу использовать дополнительные кнопки мишки в своей проге, но встандарных делфи сонтролах обрабатываеться только 3 кнопкки 
Например обрабатываю вотето событие:
Код


procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

end;



где
 
Код


TMouseButton = (mbLeft, mbRight, mbMiddle);


Помогите пожалуйста добраться дло всех остальных кнопок мышки!

Автор: aktuba 5.3.2007, 18:12
Скорее всего дополнительные кнопки на мыши - это комбинации Alt/Ctrl/Shift + стандартные кнопки. Попробуй...

Автор: Snowy 5.3.2007, 19:08
2 способа.
1. Ловить WM_XBUTTONDOWN и WM_XBUTTONUP.
2. Проверять вручную состояние VK_XBUTTON1 и VK_XBUTTON2.

На форме 2 чекбокса
Код

const // константы честно добыты в неравном бою :)
  WM_XBUTTONDOWN = $020B; // сообщение нажатия
  WM_XBUTTONUP = $020C; // сообщение отжатия
  MK_XBUTTON1 = $20; // модификатор1 
  MK_XBUTTON2 = $40; // модификатор2
  VK_XBUTTON1 = 5; // Код X-кнопок
  VK_XBUTTON2 = 6; // последние две есть Delphi 2006

type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
  protected
    procedure WMXButtonDown(var Message: TWMMouse); message WM_XBUTTONDOWN; //Нажатие X-кнопки
    procedure WMXButtonUp(var Message: TWMMouse); message WM_XBUTTONUP; // Отпускание X-кнопки
  end;

var Form1: TForm1;

implementation

{$R *.dfm}

// Проверка состояния по коду в сообщении
procedure TForm1.WMXButtonDown(var Message: TWMMouse);
begin
  CheckBox1.Checked := Lo(Message.Keys) and MK_XBUTTON1 > 0;
  CheckBox2.Checked := Lo(Message.Keys) and MK_XBUTTON2 > 0;
end;

// Проверка состояния через GetKeyState
procedure TForm1.WMXButtonUp(var Message: TWMMouse);
begin
  CheckBox1.Checked := Hi(GetKeyState(VK_XBUTTON1)) > 0;
  CheckBox2.Checked := Hi(GetKeyState(VK_XBUTTON2)) > 0;
end;
Доп инфа в MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_xbuttondown.asp

Автор: dolphik 5.3.2007, 19:13
комбинации Alt/Ctrl/Shift эт соответсвенно нажаты ли клавиши Alt/Ctrl/Shift вовремя клика кнопками мыши....
а тут именно нуно обработать те кнопочки както...либо выловить какие события при кликах тех кнопок, но я не знаю как.

Автор: aktuba 5.3.2007, 19:15
Цитата

но я не знаю как.


Snowy тебе уже ответил...

Автор: Snowy 5.3.2007, 19:17
ПыСы. Без доп софта данный код точно работает.
Стандартный мышиный софт может вешать хук на данные события, подменяя своими.

Автор: MetalFan 6.3.2007, 10:15
вот вам еще кучу констант, связанных с XBUTTON сообщениями.

Код

 WM_XBUTTONDOWN              = $020B;
 WM_XBUTTONUP                    = $020C;
 WM_XBUTTONDBLCLK            = $020D;
 WM_NCXBUTTONDOWN         = $00AB;
 WM_NCXBUTTONUP               = $00AC;
 WM_NCXBUTTONDBLCLK       = $00AD;


значения констант нагло сперто из Win DDK )))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)