Seite 1 von 1

CanvasGadget - DrawImage und CheckboxGadget

Verfasst: 14.03.2014 00:11
von Marty2PB
Ja Moin und hallo an alle <)

Irgendwie funktioniert diese Kombination nicht.
Ich habe ein Panel. auf diesem Zeichne ich mit Canvas und DrawImage ein Bild. Auf diesen Bild liegt ein Checkbox Gadget.
Wenn das Fenster sich nun öffnet und ich auf den Reiterim Panel gehe ist alles (Strings, etc..) da. Nur nicht die Checkbox.
Die erscheint erst wenn man mit der Maus drüberfährt/Hovert. :?
Wenn ich dass Canvas Gadget weglasse ist die Checkbox an Ort und stelle und sichtbar.

Ich benutze : PureBasic 5.21 LTS Beta 3 (Windows - x64)


Habe schon verschiedene Kombination Probiert in welcher Reihen folge die Gadgets erscheinen. Gibst dafür eine
Lösung wie die drei Sachen zusammen funktionieren?

gruss Marty

Re: CanvasGadget - DrawImage und CheckboxGadget

Verfasst: 14.03.2014 00:29
von ts-soft
Überlappende Gadgets werden von PB nicht unterstützt, somit kann es nicht funktionieren.
Evtl. kannst Du Dich behelfen, indem Du das Canvas nach dem Zeichnen disableds:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 200, 200)
  CheckBoxGadget(1, 90, 90, 40, 25, "bla")
  StartDrawing(CanvasOutput(0))
  Circle(90, 90, 90, RGB(Random(255), Random(255), Random(255)))
  StopDrawing()
  DisableGadget(0, #True)
  Repeat
  Until  WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
und mit etwas API gehts auch schöner:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 200, 200)
  CheckBoxGadget(1, 90, 90, 40, 25, "bla")
  StartDrawing(CanvasOutput(0))
  Circle(90, 90, 90, RGB(Random(255), Random(255), Random(255)))
  StopDrawing()
  SetParent_(GadgetID(1), GadgetID(0))
  Repeat
  Until  WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: CanvasGadget - DrawImage und CheckboxGadget

Verfasst: 14.03.2014 01:02
von Marty2PB
:allright: Woah, great... Setparent_ perfekt. Das isses. Danke ts-soft

Re: CanvasGadget - DrawImage und CheckboxGadget

Verfasst: 14.03.2014 01:35
von ts-soft
Solange Du auf die Ereignisse verzichten kannst :mrgreen: , sollte es helfen.

Re: CanvasGadget - DrawImage und CheckboxGadget

Verfasst: 14.03.2014 12:14
von Marty2PB
Stimmt /:->

Dadurch werden dann auch Stringgadget unbrauchbar. Nur nicht mit Disable Gadget(#Canvas). Aber wenn das Canvas wiederum disabled ist dann gehen Checkboxen wieder nicht.

Re: CanvasGadget - DrawImage und CheckboxGadget

Verfasst: 14.03.2014 14:58
von Marty2PB
ich mach das so... wiso egentlich nicht gleich

Code: Alles auswählen

ImageGadget(#_SKINBASE_T03,0, 0, 478, 402,ImageID(#_SKINIMAGE_T03))
         DisableGadget(#_SKINBASE_T03, #True)
und habe alle elemente aktiv

Re: CanvasGadget - DrawImage und CheckboxGadget

Verfasst: 14.03.2014 21:44
von Danilo
Marty2PB hat geschrieben::allright: Woah, great... Setparent_ perfekt. Das isses. Danke ts-soft
Da Du WinAPI benutzen möchtest, kannst Du es so wie hier machen:

Code: Alles auswählen

Procedure GadgetToFront(gadget)
    SetWindowPos_(GadgetID(gadget),#HWND_TOP,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
EndProcedure

Procedure GadgetToBack(gadget)
    SetWindowPos_(GadgetID(gadget),#HWND_BOTTOM,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
EndProcedure

Procedure GadgetZOrderFix(gadget)
    SetWindowLongPtr_(GadgetID(gadget),#GWL_STYLE,GetWindowLongPtr_(GadgetID(gadget),#GWL_STYLE)|#WS_CLIPSIBLINGS|#WS_CLIPCHILDREN)
EndProcedure




Procedure DrawCanvas(canvas)
    If StartDrawing(CanvasOutput(canvas))
        For y = 0 To OutputHeight() Step 10
            For x = 0 To OutputWidth() Step 10
                Box(x,y,10,10,RGB($40,$40,$40))
                Box(x+5,y,5,5,RGB($60,$60,$60))
                Box(x,y+5,5,5,RGB($60,$60,$60))
            Next
        Next
        StopDrawing()
    EndIf
EndProcedure

OpenWindow(0,100,200,640,480,"Test")
canvas = CanvasGadget(#PB_Any,0,0,640,480)
btn1   = ButtonGadget(#PB_Any,20,20,100,30,"Test")
btn2   = ButtonGadget(#PB_Any,30,40,100,30,"Test")
btn3   = ButtonGadget(#PB_Any,40,60,100,30,"Test")
chk1   = CheckBoxGadget(#PB_Any,20,100,100,20,"Checkbox 1")
str1   = StringGadget(#PB_Any,20,130,100,20,"StringGadget")
opt1   = OptionGadget(#PB_Any,20,160,100,20,"Option 1")
opt2   = OptionGadget(#PB_Any,20,180,100,20,"Option 2")
opt3   = OptionGadget(#PB_Any,20,200,100,20,"Option 3")

GadgetZOrderFix(canvas)
GadgetZOrderFix(btn1)
GadgetZOrderFix(btn2)
GadgetZOrderFix(btn3)
GadgetZOrderFix(chk1)
GadgetZOrderFix(str1)
GadgetZOrderFix(opt1)
GadgetZOrderFix(opt2)
GadgetZOrderFix(opt3)

GadgetToBack(canvas)

;GadgetToFront(btn2)
;GadgetToFront(chk1)

DrawCanvas(canvas)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: CanvasGadget - DrawImage und CheckboxGadget

Verfasst: 15.03.2014 13:39
von edel
Da braucht es doch gar keine API, einfach auf dem Gadget erstellen und fertig.