Page 1 of 1

Button in PanelGadget

Posted: Sun Jul 29, 2007 1:52 am
by milan1612
Hey guys,

Image

Does anybody know how to place a little button right there where the arrow points to?
Many Texteditors and IDEs use this to provide ability to close a Panel Item.

Any ideas?

EDIT: BTW "Unbenannt" means "Unknown" :D

Posted: Sun Jul 29, 2007 4:09 am
by netmaestro
Interesting little challenge, I think I covered all the bases:

http://www.purebasic.fr/english/viewtopic.php?t=28167

Let me know if I missed something.

Posted: Sun Jul 29, 2007 6:22 am
by hallodri

Code: Select all

;- 
Procedure _subclass_cb_(hWnd,uMsg,wParam,lParam)
   
   oldProc = getprop_(hWnd,"TCOldP")
   
   If #WM_LBUTTONDOWN = uMsg
      hti.TC_HITTESTINFO
      hti\pt\x  = (lParam & $FFFF)
      hti\pt\y  = (lParam >> 16 & $FFFF) 
      item = SendMessage_(hWnd,#TCM_HITTEST,0,@hti)
      If hti\flags & #TCHT_ONITEMICON
         RemoveGadgetItem(GetDlgCtrlID_(hWnd),item)
      EndIf 
   EndIf
  
  ProcedureReturn CallWindowProc_(oldProc,hWnd,uMsg,wParam,lParam)
EndProcedure

;- 
Procedure main()
	
   hWnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,640,480,"leer",#WS_OVERLAPPEDWINDOW)

   closeButton = CatchImage(0,?close_bmp_Start,?close_bmp_End-?close_bmp_Start)
   
   CreateGadgetList(hWnd)
   PanelGadget(0,0,0,640,480)
   For i = 0 To 4
      AddGadgetItem(0,i,"item "+Str(i),closeButton) 
   Next
   
   oldProc = setwindowlong_(GadgetID(0),#GWL_WNDPROC,@_subclass_cb_())
   Setprop_(GadgetID(0),"TCOldP",oldProc)
   
   Repeat
      event = WaitWindowEvent()
      
   Until event = #PB_Event_CloseWindow
	
EndProcedure:main()

DataSection
close_bmp_Start:
Data.l $00F64D42,$00000000,$00760000,$00280000,$00100000,$00100000,$00010000,$00000004,$00800000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$80000080,$80000000,$00800080,$00800000,$80800080,$80800000,$C0C00080,$000000C0,$FF0000FF
Data.l $FF000000,$00FF00FF,$00FF0000,$FFFF00FF,$FFFF0000,$008700FF,$00000000,$FF7F7800,$FFFFFFFF,$FF0FF7FF,$FFFFFFFF,$F00FF0FF
Data.l $FFFFFFFF,$FF0FF00F,$F0FFFF0F,$FF0FF0FF,$0FFFFFF0,$FF0FF0FF,$FFF00FFF,$FF0FF0FF,$FF0FF0FF,$FF0FF0FF,$FF0FF0FF,$FF0FF0FF
Data.l $FFF00FFF,$FF0FF0FF,$0FFFFFF0,$FF0FF0FF,$F0FFFF0F,$F00FF0FF,$FFFFFFFF,$FF0FF00F,$FFFFFFFF,$FF7FF0FF,$FFFFFFFF,$0087F7FF
Data.l $00000000
Data.b $00,$78
close_bmp_End:
EndDataSection



Posted: Sun Jul 29, 2007 1:10 pm
by milan1612
Hey thanks guys, just what I need :)