Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Внизкак определить какая из клавиш мышки нажата над TMenuItem? Найти похожие ветки
← →
BillyJeans © (2004-05-10 12:04) [0]Как определить какая из клавиш мышки нажата над TMenuItem в PopupMenu, правая или левая?
← →
Palladin © (2004-05-10 12:07) [1]GetKeyState
---
Помните! Чем выше качество вопроса, тем выше качество ответа.
← →
BillyJeans © (2004-05-10 15:05) [2]GetAsyncKeyState!!!
← →
BillyJeans © (2004-05-10 15:37) [3]блин, а ведь не работает в обработчике onClick TMenuItem"а...
может у кого была подобная ситуация?
← →
KilkennyCat © (2004-05-10 16:14) [4]приведите Ваш код. GetKeyState, равно как и GetAsyncKeyState, нормально работает...
← →
BillyJeans © (2004-05-10 17:24) [5]они оба работают, но в рамках формы.
вот нерабочий код, который всегда выводит 1 в заголовке :(
procedure TForm1.menu11Click(Sender: TObject);
begin
Caption := IntToStr(GetAsyncKeyState(VK_RBUTTON));
end;
← →
KilkennyCat © (2004-05-10 17:55) [6]Насчет рамок - неверно.
Ваш код не работает по одной простой причине - вызов происходит по клику. А кликом считается отпускание клавиши мыши!
← →
BillyJeans © (2004-05-10 18:20) [7]мне мужно определить клик был правой или левой клавишей... какие будут предложения?
← →
BillyJeans © (2004-05-11 08:46) [8]??
← →
Mim1 © (2004-05-11 09:07) [9]А зачем, вы пишите какой то сверхновый, сверхзаморочный интерфейс?
Про юзабилити читали? Я обчно как и всякий рядовой пользователь шелкаю левой кнопкой мышки.
← →
BillyJeans © (2004-05-11 09:10) [10]2 Mim1 © (11.05.04 09:07) [9]
очень смешно...
← →
Mim1 © (2004-05-11 09:16) [11][10] BillyJeans © (11.05.04 09:10)
А я серьезно, обычно в windows тяжело решать задачи для которых она не предназначена. Вот например посмотрите раздел winapi со всякими запиралками и т.п.
← →
BillyJeans © (2004-05-11 09:23) [12]2 Mim1 © (11.05.04 09:16) [11]
если желание поболтать, то в "потрепаться"...
← →
KilkennyCat © (2004-05-11 11:32) [13]Да нет проблем. Хотите правой щелкать, переключите свапом.
← →
BillyJeans © (2004-05-11 12:14) [14]отошли немного от темы...
Вроде бы простой вопрос, какую клавишу на мышке нажал пользователь, выбирая пункт PopupMenu, правую или левую???
← →
BillyJeans © (2004-05-11 15:11) [15]???
← →
KilkennyCat © (2004-05-11 16:03) [16]GetAsyncKeyState все таки использовать можно.
В таймере если сделать опрос.
Хоть не красиво, но будет работать.
Таймер включайте в onPopup.
← →
NAlexey © (2004-05-11 17:01) [17]Ну если ты такой настырный:
var
OldMHook: HHook = 0;
FShiftState: TShiftState;
function MouseHook(Code: Integer; wParam: Word; lParam: LongInt ): LongInt; stdcall;
function GetShiftState: TShiftState;
begin
Result := [];
if GetAsyncKeyState(VK_SHIFT) < 0 then
Include(Result, ssShift);
if GetAsyncKeyState(VK_CONTROL) < 0 then
Include(Result, ssCtrl);
if GetAsyncKeyState(VK_MENU) < 0 then
Include(Result, ssAlt);
if GetAsyncKeyState(VK_LBUTTON) < 0 then
Include(Result, ssLeft);
if GetAsyncKeyState(VK_MBUTTON) < 0 then
Include(Result, ssMiddle);
if GetAsyncKeyState(VK_RBUTTON) < 0 then
Include(Result, ssRight);
end;
begin
if Code = HC_ACTION then
begin
case Wparam of
WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN:
FShiftState := GetShiftState;
end;
end;
Result := CallNextHookEx(OldMHook, Code, wParam, lParam )
end;
procedure UnRegisterMouseHook;
begin
if OldMHook <> 0 then
begin
UnHookWindowshookEx(OldMHook);
OldMHook := 0;
end;
end;
procedure RegisterMouseHook;
begin
OldMHook := SetWindowsHookEx(WH_MOUSE, @MouseHook, 0, GetCurrentThreadID);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterMouseHook;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterMouseHook;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
if ssLeft in FShiftState then
Caption := "Left"
else
Caption := "";
end;
← →
NAlexey © (2004-05-11 17:02) [18]Ну если ты такой настырный:
var
OldMHook: HHook = 0;
FShiftState: TShiftState;
function MouseHook(Code: Integer; wParam: Word; lParam: LongInt ): LongInt; stdcall;
function GetShiftState: TShiftState;
begin
Result := [];
if GetAsyncKeyState(VK_SHIFT) < 0 then
Include(Result, ssShift);
if GetAsyncKeyState(VK_CONTROL) < 0 then
Include(Result, ssCtrl);
if GetAsyncKeyState(VK_MENU) < 0 then
Include(Result, ssAlt);
if GetAsyncKeyState(VK_LBUTTON) < 0 then
Include(Result, ssLeft);
if GetAsyncKeyState(VK_MBUTTON) < 0 then
Include(Result, ssMiddle);
if GetAsyncKeyState(VK_RBUTTON) < 0 then
Include(Result, ssRight);
end;
begin
if Code = HC_ACTION then
begin
case Wparam of
WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN:
FShiftState := GetShiftState;
end;
end;
Result := CallNextHookEx(OldMHook, Code, wParam, lParam )
end;
procedure UnRegisterMouseHook;
begin
if OldMHook <> 0 then
begin
UnHookWindowshookEx(OldMHook);
OldMHook := 0;
end;
end;
procedure RegisterMouseHook;
begin
OldMHook := SetWindowsHookEx(WH_MOUSE, @MouseHook, 0, GetCurrentThreadID);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterMouseHook;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterMouseHook;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
if ssLeft in FShiftState then
Caption := "Left"
else
Caption := "";
end;
← →
BillyJeans © (2004-05-11 17:23) [19]а ведь работает! ;) спасибо...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.04 c