Here's my first solution, but still think about...
Code: Select all
;-TOP
;- Module
DeclareModule __MyResizeGadget
Declare FixResizeGadget(Gadget, x, y, width, height)
EndDeclareModule
Module __MyResizeGadget
EnableExplicit
; Link https://www.purebasic.fr/english/viewtopic.php?f=24&t=71269
; Canvas Gadget Container Bugfix
Procedure FixResizeGadget(Gadget, x, y, width, height)
ResizeGadget(Gadget, x, y, width, height)
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
Protected rect.NSRect, sv, container
sv = CocoaMessage(0, GadgetID(Gadget), "subviews")
If CocoaMessage(0, sv, "count")
container = CocoaMessage(0, sv, "objectAtIndex:", 0)
If container
CocoaMessage(@rect, GadgetID(Gadget), "frame")
rect\origin\x = 0
rect\origin\y = 0
CocoaMessage(0, container, "setFrame:@", @rect)
EndIf
EndIf
CompilerEndIf
; Here not work, because to late :(
If GadgetType(Gadget) = #PB_GadgetType_ListIcon
; PostEvent(#PB_Event_Gadget, GetActiveWindow(), Gadget, #PB_EventType_Resize)
EndIf
EndProcedure
EndModule
; -----------------------------------------------------------------------------
;- Macro
DeclareModule MyResizeGadget
Macro ResizeGadget(Gadget, x, y, width, height)
__MyResizeGadget::FixResizeGadget(Gadget, x, y, width, height)
EndMacro
EndDeclareModule
Module MyResizeGadget
EndModule
; -----------------------------------------------------------------------------
CompilerIf #PB_Compiler_IsMainFile
UseModule MyResizeGadget
Procedure SizeWindow()
ResizeGadget(0, 5, 5, WindowWidth(0) - 10, WindowHeight(0) - 10)
EndProcedure
Procedure EventHandlerListIconGadget()
Select EventType()
Case #PB_EventType_Resize
Debug "Resize ListIconGadget"
Default
Debug EventType()
EndSelect
EndProcedure
If OpenWindow(0, 100, 100, 300, 100, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
ListIconGadget(0, 5, 5, 290, 90, "Name", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Address", 250)
AddGadgetItem(0, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(0, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
BindGadgetEvent(0, @EventHandlerListIconGadget())
BindEvent(#PB_Event_SizeWindow, @SizeWindow())
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_SizeWindow
; Here works
PostEvent(#PB_Event_Gadget, GetActiveWindow(), 0, #PB_EventType_Resize)
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
CompilerEndIf