Pointer in einen Structure Inhalt übergeben ? (Erledig)
Verfasst: 28.08.2014 13:30
Hallo Leute,
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
Das Problem wo Ich in Moment nicht dahinter komme, Ist einen Pointer an einer Structure Variable zu übergeben ?
Wenn Ich z.B es so mache dann hat Slider01 den Pointer. Das klappt auch
Nun wollte Ich in einer Procedure diesen Pointer einer Structure Varable übergeben
Nur dann Kommt wenn ich darauf zugreifen will der fehler Gadget nicht inialisiert ?
Hab den Fehler man man aber naja nur so lernt man
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)