events lost in tranparent window

Just starting out? Need help? Post your questions and find answers here.
williamvanhoecke
User
User
Posts: 66
Joined: Wed Jun 07, 2017 10:13 pm

events lost in tranparent window

Post by williamvanhoecke »

Hello i am trying to create a transparent window that contains buttons. Transparency is needed because the buttons control the image behind the window. (see image: https://photos.app.goo.gl/bMBo2dhqeButYnzYA)
Every button should fire an event and when clicking in the middle of the window underneath gets focus.
However some buttons never fire their event!
Anyone knows what is happening here ?

Code: Select all

Enumeration
  #SYMBOL_SIZE_UP_BUTTON
  #SYMBOL_SIZE_DOWN_BUTTON
  #SYMBOL_HFLIP_BUTTON
  #SYMBOL_VFLIP_BUTTON
  #SYMBOL_COPY_BUTTON
  #SYMBOL_SETTINGS_BUTTON
  #SYMBOL_EXIT_BUTTON
  #SYMBOL_DELETE_BUTTON
  #SYMBOL_ROTATE_LEFT_BUTTON
  #SYMBOL_ROTATE_RIGHT_BUTTON
  
  #SYMBOL_SIZE_TEXT
  #SYMBOL_ROTATE_TEXT
EndEnumeration  
butw = 25
maskcolor = RGB(0,0,0)


Declare Symbol_size_number()
Procedure Symbol_size_number()
  Debug EventGadget()  
EndProcedure  
Declare Symbol_rotate_number()
Procedure Symbol_rotate_number()
  Debug EventGadget()  
EndProcedure  

Declare Symbol_size_up_button()
Procedure Symbol_size_up_button()
  Debug EventGadget()  
EndProcedure
Declare Symbol_size_down_button()
Procedure Symbol_size_down_button()
  Debug EventGadget()  
EndProcedure

Declare Symbol_hflip_button()
Procedure Symbol_hflip_button()
  Debug EventGadget()  
EndProcedure
Declare Symbol_copy_button()
Procedure Symbol_copy_button()
  Debug EventGadget()  
EndProcedure  

Declare Symbol_setting_button()
Procedure Symbol_setting_button()
  Debug EventGadget()  
EndProcedure  
Declare Symbol_exit_button()
Procedure Symbol_exit_button()
  Debug EventGadget()  
EndProcedure

Declare Symbol_vflip_button()
Procedure Symbol_vflip_button()
  Debug EventGadget()  
EndProcedure  
Declare Symbol_delete_button()
Procedure Symbol_delete_button()
  Debug EventGadget()  
EndProcedure  

Declare Symbol_rotate_left_button()
Procedure Symbol_rotate_left_button()
  Debug EventGadget()  
EndProcedure  
Declare Symbol_rotate_right_button()
Procedure Symbol_rotate_right_button()
  Debug EventGadget()  
EndProcedure  

  img = CreateImage(#PB_Any,butw,butw,24,maskcolor)
  StartDrawing(ImageOutput(img))
    Circle(butw/2,butw/2,butw/2,RGB(0,0,255))    
  StopDrawing()

; Maak een borderless transparant venster met niet transparante controls
;hWnd = OpenWindow(#PB_Any, 100, 100, 200, 200, "", #PB_Window_BorderLess)
hWnd = OpenWindow(#PB_Any, 0, 0, 100, 160, "", #PB_Window_ScreenCentered)
  StringGadget(#SYMBOL_SIZE_TEXT,butw*1.6,0,butw*2,butw/3*2,"",#PB_String_Numeric | #PB_Text_Center): SetGadgetColor(#SYMBOL_SIZE_TEXT,#PB_Gadget_BackColor,RGB(87,255,87)): BindGadgetEvent(#SYMBOL_SIZE_TEXT, @Symbol_size_number())
  
  ;size up - size down========================================
  ImageGadget(#SYMBOL_SIZE_UP_BUTTON,GadgetX(#SYMBOL_SIZE_TEXT)-(butw/10*1),GadgetY(#SYMBOL_SIZE_TEXT)+GadgetHeight(#SYMBOL_SIZE_TEXT),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_SIZE_UP_BUTTON, @Symbol_size_up_button())
  
  ImageGadget(#SYMBOL_SIZE_DOWN_BUTTON,GadgetX(#SYMBOL_SIZE_UP_BUTTON)+(butw/10*14),GadgetY(#SYMBOL_SIZE_TEXT)+GadgetHeight(#SYMBOL_SIZE_TEXT),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_SIZE_DOWN_BUTTON, @Symbol_size_down_button())
  
  ;h flip - copy========================================
  ImageGadget(#SYMBOL_HFLIP_BUTTON,GadgetX(#SYMBOL_SIZE_TEXT)-(butw/10*14),GadgetY(#SYMBOL_SIZE_TEXT) + GadgetHeight(#SYMBOL_SIZE_TEXT) + (butw/10*9),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_HFLIP_BUTTON, @Symbol_hflip_button())
  
  ImageGadget(#SYMBOL_COPY_BUTTON,GadgetX(#SYMBOL_SIZE_TEXT)+(butw/10*26),GadgetY(#SYMBOL_SIZE_TEXT) + GadgetHeight(#SYMBOL_SIZE_TEXT) + (butw/10*9),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_COPY_BUTTON, @Symbol_copy_button())

  ;setting - exit========================================
  ImageGadget(#SYMBOL_SETTINGS_BUTTON,GadgetX(#SYMBOL_SIZE_TEXT)-(butw/10*19),GadgetY(#SYMBOL_SIZE_TEXT) + GadgetHeight(#SYMBOL_SIZE_TEXT) + (butw/10*24),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_SETTINGS_BUTTON, @Symbol_setting_button())
  
  ImageGadget(#SYMBOL_EXIT_BUTTON,GadgetX(#SYMBOL_SIZE_TEXT)+(butw/10*31),GadgetY(#SYMBOL_SIZE_TEXT) + GadgetHeight(#SYMBOL_SIZE_TEXT) + (butw/10*24),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_EXIT_BUTTON, @Symbol_exit_button())

  ;v flip - exit========================================
  ImageGadget(#SYMBOL_VFLIP_BUTTON,GadgetX(#SYMBOL_SIZE_TEXT)-(butw/10*14),GadgetY(#SYMBOL_SIZE_TEXT) + GadgetHeight(#SYMBOL_SIZE_TEXT) + (butw/10*39),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_VFLIP_BUTTON, @Symbol_vflip_button())
  
  ImageGadget(#SYMBOL_DELETE_BUTTON,GadgetX(#SYMBOL_SIZE_TEXT)+(butw/10*26),GadgetY(#SYMBOL_SIZE_TEXT) + GadgetHeight(#SYMBOL_SIZE_TEXT) + (butw/10*39),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_DELETE_BUTTON, @Symbol_delete_button())

  ;l rotate - r rotate========================================
  ImageGadget(#SYMBOL_ROTATE_LEFT_BUTTON,GadgetX(#SYMBOL_SIZE_TEXT)-(butw/10*1),GadgetY(#SYMBOL_SIZE_TEXT) + GadgetHeight(#SYMBOL_SIZE_TEXT) + (butw/10*48),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_ROTATE_LEFT_BUTTON, @Symbol_rotate_left_button())
  
  ImageGadget(#SYMBOL_ROTATE_RIGHT_BUTTON,GadgetX(#SYMBOL_SIZE_UP_BUTTON)+(butw/10*14),GadgetY(#SYMBOL_SIZE_TEXT) + GadgetHeight(#SYMBOL_SIZE_TEXT) + (butw/10*48),butw,butw,ImageID(img))
  BindGadgetEvent(#SYMBOL_ROTATE_RIGHT_BUTTON, @Symbol_rotate_right_button())

  StringGadget(#SYMBOL_ROTATE_TEXT,butw*1.5,butw/10*69,butw*2,butw/3*2,"",#PB_String_Numeric | #PB_Text_Center): SetGadgetColor(#SYMBOL_ROTATE_TEXT,#PB_Gadget_BackColor,RGB(255,255,90))
  BindGadgetEvent(#SYMBOL_ROTATE_TEXT, @Symbol_rotate_number())
  
  Prototype.i ProtoSetLayeredWindowAttributes(hwnd.i, crKey.i, bAlpha.i, dwFlags.i)
  Global SetLayeredWindowAttributes.ProtoSetLayeredWindowAttributes
  If OpenLibrary(0, "user32.dll"): SetLayeredWindowAttributes = GetFunction(0, "SetLayeredWindowAttributes"): EndIf  ; Load user32.dll voor SetLayeredWindowAttributes
  SetWindowColor(hWnd, maskcolor)                                                                                    ; Stel transparante kleur in (zwart)
  SetWindowLongPtr_(WindowID(hWnd), #GWL_EXSTYLE, GetWindowLongPtr_(WindowID(hWnd), #GWL_EXSTYLE) | #WS_EX_LAYERED)
  SetLayeredWindowAttributes(WindowID(hWnd), maskcolor, 0, #LWA_COLORKEY)

; Event loop
Repeat
  Event = WaitWindowEvent()
  If Event = #WM_LBUTTONDOWN
    Debug "hit"
  EndIf  
Until Event = #PB_Event_CloseWindow