Прошу помощи в правильном определении событий над каждым ImageGadet. В следующем примере, событие определяется только в том месте, где элементы не накладываются:
Procedure GadgetMouseHandler(hWnd, uMsg, wParam, lParam) Protected stat.s, sysProc = GetProp_(hWnd, "sysProc") Protected gadgetNo = GetProp_(hWnd, "gadgetNo") Select uMsg Case #WM_LBUTTONDOWN stat = "#WM_LBUTTONDOWN " + Str(gadgetNo) Case #WM_LBUTTONUP stat = "#WM_LBUTTONUP " + Str(gadgetNo) Case #WM_LBUTTONDBLCLK stat = "#WM_LBUTTONDBLCLK " + Str(gadgetNo) Case #WM_RBUTTONDOWN stat = "#WM_RBUTTONDOWN " + Str(gadgetNo) Case #WM_RBUTTONUP stat = "#WM_RBUTTONUP " + Str(gadgetNo) Case #WM_RBUTTONDBLCLK stat = "#WM_RBUTTONDBLCLK " + Str(gadgetNo) EndSelect If IsGadget(gadgetNo) And stat Debug stat EndIf ProcedureReturn CallWindowProc_(sysProc, hWnd, uMsg, wParam, lParam) EndProcedure Procedure SetGadgetCallback(gadgetNo) Protected sysProc = SetWindowLongPtr_(GadgetID(gadgetNo), #GWL_WNDPROC, @GadgetMouseHandler()) SetProp_(GadgetID(gadgetNo), "gadgetNo", gadgetNo) SetProp_(GadgetID(gadgetNo), "sysProc", sysProc) EndProcedure ;- Enumeration #Window = 0 Enumeration Gadgets 100 #ImgGadget1 #ImgGadget2 EndEnumeration Enumeration Images #Image1 #Image2 EndEnumeration Define wFlags.i = #PB_Window_SystemMenu | #PB_Window_ScreenCentered OpenWindow(#Window, 0, 0, 390, 240, "ImageGadget Events", wFlags) CreateImage(#Image1, 200, 200, 32) StartDrawing(ImageOutput(#Image1)) Box(0,0, 200, 200,#Blue) DrawingMode(#PB_2DDrawing_Transparent) DrawText(8, 5, "#ImgGadget1") StopDrawing() ImageGadget(#ImgGadget1, 20, 20, 0, 0, ImageID(#Image1)) CreateImage(#Image2, 300, 100, 32) StartDrawing(ImageOutput(#Image2)) Box(0,0,300,100,#Red) DrawingMode(#PB_2DDrawing_Transparent) DrawText(8, 5, "#ImgGadget2") StopDrawing() ImageGadget(#ImgGadget2, 70, 70, 0, 0, ImageID(#Image2)) ; SetGadgetCallback(#ImgGadget1) SetGadgetCallback(#ImgGadget2) While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend