CanvasGadget - DrawImage und CheckboxGadget

Anfängerfragen zum Programmieren mit PureBasic.
Marty2PB
Beiträge: 16
Registriert: 14.03.2014 00:00

CanvasGadget - DrawImage und CheckboxGadget

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: CanvasGadget - DrawImage und CheckboxGadget

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Marty2PB
Beiträge: 16
Registriert: 14.03.2014 00:00

Re: CanvasGadget - DrawImage und CheckboxGadget

Beitrag von Marty2PB »

:allright: Woah, great... Setparent_ perfekt. Das isses. Danke ts-soft
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: CanvasGadget - DrawImage und CheckboxGadget

Beitrag von ts-soft »

Solange Du auf die Ereignisse verzichten kannst :mrgreen: , sollte es helfen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Marty2PB
Beiträge: 16
Registriert: 14.03.2014 00:00

Re: CanvasGadget - DrawImage und CheckboxGadget

Beitrag 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.
Marty2PB
Beiträge: 16
Registriert: 14.03.2014 00:00

Re: CanvasGadget - DrawImage und CheckboxGadget

Beitrag 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
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: CanvasGadget - DrawImage und CheckboxGadget

Beitrag 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
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: CanvasGadget - DrawImage und CheckboxGadget

Beitrag von edel »

Da braucht es doch gar keine API, einfach auf dem Gadget erstellen und fertig.
Antworten