PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » аналог события delphi OnMouseMove на button


аналог события delphi OnMouseMove на button

Сообщений 1 страница 6 из 6

1

как отследить наезд курсора на кнопку? Цель - повторить программку на делфи (исходник утерян). Писал давно и всё забыл. Есть также попытка создания аналога на asm, но на делфи лучше: если на Asm можно догнать кнопку, то на делфи кнопку не догнать (без специального софта не отправить событие онклик). Программы и исходник на асм прилагаются.

https://wdfiles.ru/2a9qp

0

2

Можете отслеживать событие #WM_MOUSEMOVE и проверять когда курсор окажется на кнопке.
Или воспользуйтесь функцией TrackMouseEvent().

0

3

BCN_HOTITEMCHANGE

0

4

https://g0blinish.ucoz.ru/pb-dsk/flatb3d.zip

0

5

Код:

Здесь реализован наезд и уход с гаджетов #WC_BUTTON
Сплит-кнопка, кнопка, чек, радио.
Код возвращает координаты и размеры гаджета на который наехали\уехали.
Где это использовать и как модернизировать, это ваши проблемы. 

Работает только если нет рисования.
При рисовании кнопки не получают #WM_NOTIFY, только сплит получает. 
кому надо рисованное, то канвас или #WC_STATIC, на них можно реализовать

EnableExplicit
Macro pb : " " : EndMacro
Global win1, NewMap but()
Structure NMBCHOTITEM
hdr.NMHDR
dwFlags.l
EndStructure

#BS_SPLITBUTTON    = 12
#BCN_FIRST         = -1250
#BCN_HOTITEMCHANGE = #BCN_FIRST+1
#HICF_MOUSE        = 1
#HICF_ENTERING     = 16 
#HICF_LEAVING      = 32

Procedure MyCallback(hWnd, uMsg, wParam, lParam)
Protected res, s.s
Protected *nmHI.NMBCHOTITEM, rc.RECT, wp.WINDOWPLACEMENT
res=#PB_ProcessPureBasicEvents
wp\Length=SizeOf(WINDOWPLACEMENT)
Select uMsg
Case #WM_NOTIFY
;{
*nmHI = lParam
If *nmHI\hdr\code = #BCN_HOTITEMCHANGE
GetWindowRect_(*nmHI\hdr\hwndFrom, rc); на столе
GetWindowPlacement_(*nmHI\hdr\hwndFrom, wp); в окне
ForEach but()
If but()=*nmHI\hdr\hwndFrom
s=MapKey(but())
Select *nmHI\dwFlags
Case #HICF_MOUSE|#HICF_ENTERING
;{
Debug s+"  наехал"
; координаты и размеры на столе
Debug ""+rc\left+pb+rc\top+pb+rc\right+pb+rc\bottom
; координаты и размеры в окне
Debug ""+wp\rcNormalPosition\left+pb+wp\rcNormalPosition\top+pb+wp\rcNormalPosition\right+pb+wp\rcNormalPosition\bottom
;}
Case #HICF_MOUSE|#HICF_LEAVING
;{
Debug s+"  уехал"
;}
EndSelect; = *nmHI\dwFlags
EndIf
Next
EndIf; = *nmDD\hdr\code
;} = #WM_NOTIFY

EndSelect; = uMsg
ProcedureReturn res
EndProcedure

Procedure senior()
Protected ev, f1

win1=OpenWindow(1234, 870, 690, 500, 310, "text")
SetWindowCallback(@MyCallback())

f1=#WS_CHILD|#WS_VISIBLE|#BS_SPLITBUTTON
but("split")=CreateWindow_(#WC_BUTTON, "кнопка с меню", f1, 10,  10, 200, 35, win1, 0, 0, 0)
f1=#WS_CHILD|#WS_VISIBLE|#BS_PUSHLIKE
but("button")=CreateWindow_(#WC_BUTTON, "простая кнопка", f1, 230, 10, 200, 35, win1, 0, 0, 0)
f1=#WS_CHILD|#WS_VISIBLE|#BS_AUTORADIOBUTTON|#WS_BORDER
but("radio")=CreateWindow_(#WC_BUTTON, "радио", f1, 10,  70, 200, 35, win1, 0, 0, 0)
f1=#WS_CHILD|#WS_VISIBLE|#BS_AUTOCHECKBOX|#WS_BORDER
but("check")=CreateWindow_(#WC_BUTTON, "чек", f1, 230, 70, 200, 35, win1, 0, 0, 0)

Repeat
ev=WaitWindowEvent()
If GetAsyncKeyState_(#VK_ESCAPE)=32768:Break:EndIf
Until ev=#PB_Event_CloseWindow
EndProcedure

senior()

 

0

6

Всем спасибо! Буду разбираться и пилить опрос, как немного разберусь с делами)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » аналог события delphi OnMouseMove на button