Вверх ↑
Этот топик читают: Гость
Ответов: 28
Рейтинг: 0
#1: 2023-08-29 09:06:41 ЛС | профиль | цитата
Всем привет!
Есть на каком-нибудь компоненте точка, выдающая сигнал о нажатии на кнопку мыши вне формы программы?
карма: 0

0
Ответов: 537
Рейтинг: 14
#2: 2023-08-29 11:30:02 ЛС | профиль | цитата
В справке есть готовый код

Add(MainForm,3662738,287,189)
{
Left=20
Top=105
Width=93
Height=55
Caption="Code_Key"
BorderStyle=4
Point(Handle)
link(onCreate,1836759:doPopup,[(331,209)(331,233)(275,233)(275,258)])
}
Add(Timer,1020196,287,140)
{
Interval=10
link(onTimer,12421531:doEvent1,[])
}
Add(Keyboard,10463908,406,140)
{
Key=35
}
Add(ArrayEnum,14390339,406,189)
{
link(onItem,13824301:doEvent,[])
link(Array,10463908:Keys,[])
}
Add(ChangeMon,656270,511,196)
{
link(onData,2743265:doText,[])
}
Add(IndexToChanel,13824301,462,189)
{
Point(Data)
link(onEvent2,656270:doData,[])
link(Data,14390339:Index,[(468,177)(444,177)(444,233)(419,233)])
}
Add(Hub,12421531,336,140)
{
link(onEvent1,10463908:doReadKey,[])
link(onEvent2,14390339:doEnum,[(387,153)(387,195)])
}
Add(Label,2743265,560,196)
{
Width=87
Height=31
Align=5
Font=[MS Sans Serif,24,1,0,1]
Caption="0"
AutoSize=1
Alignment=2
}
Add(WinTools,1836759,287,245)
{
link(Handle,3662738:Handle,[])
}

карма: 4

0
Ответов: 28
Рейтинг: 0
#3: 2023-08-30 06:01:33 ЛС | профиль | цитата
Спасибо, Sersey, как вариант можно использовать, но ИМХО это не событие нажатия (OnClick) - это опрос состояния "А не нажата ли?", и очень частый опрос (100 раз в сек.).
Если заредить частоту опроса, то программа может и не понять, что кнопка была нажата.
карма: 0

0
Ответов: 263
Рейтинг: 18
#4: 2023-08-30 17:52:38 ЛС | профиль | цитата
Тоже была необходимость отслеживать нажатия кнопки мыши. На форуме нашел эту схему. Не помню где и кто автор схемы, однако ему спасибо!

Add(MainForm,2953706,182,161)
{
Point(Handle)
link(onCreate,15561254:doPopup,[])
}
Add(InlineCode,12360657,329,399)
{
@Hint=#24:Глобальный перехват мыши|
EventPoints=#2:ev|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Share,Debug,windows,messages;|0:|4:type|27: tagMSLLHOOKSTRUCT = record|12: pt:TPoint;|18: mouseData:dword;|14: flags:dword;|13: time:dword;|23: dwExtraInfo:^Cardinal|5: end;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|17: ev:THI_Event;|0:|23: constructor Create;|33: destructor Destroy; override;|0:|5: end;|0:|14:var H:THandle;|20: hac:THiAsmClass;|0:|14:implementation|0:|49:function hook(code,w,l:integer):Lresult; stdcall;|15:var str:string;|25: ll:tagMSLLHOOKSTRUCT;|15: d:LongWord;|5:begin|38: ll := tagMSLLHOOKSTRUCT(pointer(l)^);|0:|26: d := ll.mouseData shr 16;|46: if d and $8000 <> 0 then d := d or $FFFF0000;|0:|30: str := Int2Str(w)+Int2Str(d);|25: _hi_OnEvent(hac.ev,str);|38: result := CallNextHookEx(H,code,w,l);|4:end;|0:|31:constructor THiAsmClass.Create;|5:begin|18: inherited Create;|13: hac := self;|48: H := SetWindowsHookEx(14, @hook, hInstance, 0);|82: if H = 0 then messagebox(ReadHandle,'Ошибка перехвата мыши','ERROR',mb_iconhand);|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|24: UnhookWindowsHookEx(H);|19: inherited Destroy;|4:end;|0:|4:end.|
link(ev,14423304:doAdd,[])
}
Add(Memo,14423304,385,399)
{
Left=10
Top=5
Width=160
Height=260
AddType=1
ScrollBars=2
}
Add(InfoTip,13344029,315,196)
{
Info=#20:5120 - движение мыши|55:522ХХХ - прокрутка колеса, где ХХХ - значение прокрутки|18:5130 - нажатие ЛКМ|21:5140 - отпускание ЛКМ|18:5160 - нажатие ПКМ|21:5170 - отпускание ПКМ|21:5190 - нажатие колеса|24:5200 - отпускание колеса|33:5231 - нажатие 1-й боковой кнопки|36:5241 - отпускание 1-й боковой кнопки|33:5232 - нажатие 2-й боковой кнопки|35:5242 - отпускание 2-й боковй кнопки|
Frame=2
Transparent=1
HAlign=0
Width=316
Height=172
Margin=5
}
Add(WinTools,15561254,231,168)
{
link(Handle,2953706:Handle,[(237,156)(213,156)(213,205)(188,205)])
}

карма: 3

0
Ответов: 28
Рейтинг: 0
#5: 2023-08-31 07:30:10 ЛС | профиль | цитата
fox-video, то, что доктор прописал! Спасибо!
карма: 0

0
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)