WindowCallback für 2D-Zeichnungen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

WindowCallback für 2D-Zeichnungen?

Beitrag von Delle »

Code: Alles auswählen

Window...

StartDrawing(WindowOutput()):DrawingMode(4):Box(9,61,107,157,RGB(0,0,123)):StopDrawing()

Repeat

EventID = WaitWindowEvent()
     If EventID=#PB_Event_CloseWindow:End:EndIf

Forever
Sobald man das Fenster verkleinert und wieder groß macht, ist die Box weg... bei dem 2D-Draw-Beispiel bleiben die Sachen aber stehen...

Muss da in die Schleife noch ein Callback oder sowas?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Wenn du mittels [c]WindowOutput()[/c] aufs Fenster malen willst, musst
du dir natürlich einen Callback anfertigen, der die Bilddaten immer wieder
auffrischt, wenn ein Fenster darüber verschoben wurde oder ähnliches.
Einfacher geht es allerdings mit einem [c]ImageGadget()[/c]
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Hm, hab schon einen Callback drin für PURECOLOR... wie muss der aussehen, damit er "neutral" für das ganze Fenster gilt?
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

NicTheQuick hat geschrieben:Einfacher geht es allerdings mit einem [c]ImageGadget()[/c]
Einfacher und besser.
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Also nur einen Rahmen als Bild?
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Wie meinen?
Ein ImageGadget kann doch Images anzeigen.
Und auf Images kannst du problemlos zeichnen.
(Dann darf man aber nicht vergessen, das ImageGadget mit SetGadgetState(ImageID) zu aktualisieren.)
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Das funzt auch wieder nicht... der Rand soll für ein ListIconGadget sein,
jetzt wird der Rahmen zwar schön aktualisiert, dafür verschwindet das ListIconGadget darüber ;)

Code: Alles auswählen

...

ImageGadget(#listrand,9,61,107,157,Rand)
ListIconGadget(#liste,8,60,130,160,"",110)

Repeat

SetGadgetState(#listrand,Rand)

Forever
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

am meisten lernt man immernoch aus beispielcodes:

Code: Alles auswählen

#Width = 640
#Height = 480

If OpenWindow(0, 0, 0, #Width, #Height,  #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Test")
  
  If CreateGadgetList(WindowID(0))
  
    If CreateImage(0, #Width, #Height)
      
      If StartDrawing(ImageOutput())
        
        For i = 0 To 1000
          Box(Random(#Width), Random(#Height), Random(#Width), Random(#Height), RGB(Random(255), Random(255), Random(255)))
        Next
        
        StopDrawing()
        
        ImageGadget(0, 0, 0, #Width, #Height, ImageID())
        
        Repeat
          WinEvent.l = WaitWindowEvent()
        Until WinEvent = #PB_Event_CloseWindow
        
      EndIf
      
    EndIf
    
  EndIf
  
EndIf

End
hoffe es hilft. :wink:

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Prinzip verstanden, nur wiegesagt lassen sich die Inhalt des Gadgets darüber dann nicht mehr anklicken .-(
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Zeigt alles korrekt an, Items leider nicht anklickbar:

Code: Alles auswählen

ImageGadget(#listrand,9,61,107,157,Rand) 
ListIconGadget(#liste,8,60,130,160,"",110)
Items anklickbar, nach Minimize allerdings fehlt das LIG:

Code: Alles auswählen

ListIconGadget(#liste,8,60,130,160,"",110)
ImageGadget(#listrand,9,61,107,157,Rand)
Antworten