ich habe leider immer noch nicht verstanden wie man eine neu Class erstellt um ein verhalten eines Gadgets zu überschreiben.
Ich habe ein Xcode Beispiel auf youtube gesehen und versucht das umzusetzen, aber komme nicht weiter.
https://www.youtube.com/watch?v=7MZJxPOo_xU
Kann mir mir das jemand erklären?
Code: Alles auswählen
ImportC ""
class_addMethod(Class.i, Selector.i, *Callback, Types.P-ASCII)
objc_allocateClassPair(ModelClass.i, NewClassName.P-ASCII, ExtraBytes.i)
objc_registerClassPair(NewClass.i)
object_setClass(ObjectToModify.i, NewClass.i)
sel_registerName(MethodName.P-ASCII)
EndImport
Global Window_0, Button_0
; Global AppDelegate.i = CocoaMessage(0, CocoaMessage(0, 0, "NSApplication sharedApplication"), "delegate")
; Global DelegateClass.i = CocoaMessage(0, AppDelegate, "class")
Procedure buttonCallback(object.i, selector.i, dummy.i)
Debug "Callback"
view = CocoaMessage(0, WindowID(Window_0), "contentView")
layer = CocoaMessage(0, view, "layer")
CocoaMessage(0, view, "updateLayer", #YES)
EndProcedure
Procedure OpenWindow_0(x = 0, y = 0, width = 450, height = 160)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Button_0 = ButtonGadget(#PB_Any, 160, 50, 130, 25, "OK")
buttonCell = CocoaMessage(0, GadgetID(Button_0), "cell")
customButtonClass = objc_allocateClassPair( CocoaMessage(0, buttonCell, "class"), "MyCustomButton", 0)
objc_registerClassPair(customButtonClass)
object_setClass(buttonCell, customButtonClass)
selector = sel_registerName("isHighLighted:")
If class_addMethod(customButtonClass, selector, @buttonCallback(), "v@:@") = #True
Debug "successful"
EndIf
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
Case #PB_Menu_Quit
ProcedureReturn #False
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case Button_0
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
OpenWindow_0()
Repeat
event = WaitWindowEvent()
Until Window_0_Events(event) = #False
End