Habe mal wieder ein kleines Problem !
und zwar möchte Ich ein Modul basteln, soweit so gut.
hier mal ein Codeschnipsel wie Ich das gerne umsetzen wollte
Code: Alles auswählen
DeclareModule Image_gadget
; Slider Proceduren
Declare NewSlider (x, y, b, h, Sichtbar.f, Maximum.f, flags)
Declare SetSliderPos (*Id,pos.f)
;ImageGadget Proceduren
Declare NewImageGadget(Window, x, y, b, h, img = 0, scroll = 0,border=0)
EndDeclareModule
Module Image_gadget
Structure Slider
Slider.l
Pos.f :Sichtbar.f : Min.f : Max.f : Size.i
EndStructure
Structure Image
Image.i
x.i : y.i : Width.i : Hight.i
EndStructure
Structure GadgetImage
Gadget.i : Window.i : flags.i : factor.f
x.i : y.i : Width.i : Hight.i : QuellImage.i
Image.Image
SliderH.slider : SliderV.slider
EndStructure
Procedure SetSliderPos (*this.slider,pos.f)
*this\Pos=pos
SetGadgetState(*this\Slider,*this\Pos)
EndProcedure
Procedure NewSlider (x, y, b, h, Sichtbar.f, Maximum.f, flags)
Protected *this.slider = AllocateMemory(SizeOf(slider))
If (Not *this)
ProcedureReturn #False
EndIf
With *this
\Slider = ScrollBarGadget(#PB_Any, x, y, b, h, 0, Maximum, Sichtbar, flags)
\Pos = 0
\Sichtbar = Sichtbar
\Max = Maximum
\Min = 0
If Flags
\size = b + 4
Else
\size = h + 4
EndIf
EndWith
ProcedureReturn *this
EndProcedure
Procedure NewImageGadget(Window, x, y, b, h, img = 0, scroll = 0,border=0)
Protected *this.GadgetImage = AllocateMemory(SizeOf(GadgetImage))
If (Not *this)
ProcedureReturn #False
EndIf
InitializeStructure(*this,image)
InitializeStructure(*this,slider)
With *this
\Gadget = ImageGadget(#PB_Any, x, y, b, h,border)
\Window = Window
\x = x
\y = y
\Width = b
\hight = h
\factor = 1.0
If scroll
\Width = b - 20
\Hight = h - 20
\SliderH\Slider=NewSlider(\x, \y+\Hight + 2, \Width, 16, \Width,0, 0)
SetGadgetData(\SliderH\Slider, *this)
\SliderV\Slider=NewSlider(\x+\Width + 2, \y, 16, \Hight, \Hight,0, 1)
SetGadgetData(\SliderV\Slider, *this)
Else
\SliderH\Slider=-1
\SliderV\Slider=-1
EndIf
ProcedureReturn *this
EndWith
EndProcedure
EndModule
UseModule Image_gadget
If OpenWindow(0, 0, 0, 800, 600, "Test BindGadgetEvent ! ", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ImageGadget01= NewImageGadget(Window, 50,50, 300,300,1,1)
Slider01=NewSlider(0,0, 800, 16, 100, 200,0)
SetSliderPos(Slider01,20)
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Wenn Ich z.B es so mache dann hat Slider01 den Pointer. Das klappt auch
Code: Alles auswählen
If OpenWindow(0, 0, 0, 800, 600, "Test BindGadgetEvent ! ", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Slider01=NewSlider(0,0, 800, 16, 100, 200,0)
SetSliderPos(Slider01,20)
EndIf
Nur dann Kommt wenn ich darauf zugreifen will der fehler Gadget nicht inialisiert ?
Code: Alles auswählen
\SliderH\Slider=NewSlider(\x, \y+\Hight + 2, \Width, 16, \Width,0, 0)
SetGadgetData(\SliderH\Slider, *this)
Code: Alles auswählen
*dummy=NewSlider(\x+\Width + 2, \y, 16, \Hight, \Hight,0, 1)
\SliderV\Slider=*dummy\Slider
SetGadgetData(\SliderV\Slider, *this)