Seite 1 von 2

Bild vom Window entfernen

Verfasst: 16.03.2007 14:44
von Thomas
Hi,
wie kann ich ein Image, dass ich mit StartDrawing(WindowOutput(#Window)) auf ein Fenster gezeichnet habe, wieder entfernen?

Verfasst: 16.03.2007 15:04
von Kaeru Gaman
mit nem Box() drüberzeichnen.

...außerdem ist das bild eh nicht permanent... beim nächsten refresh isses weg.
wisch mal mit nem anderen fenster drüber, dann verschwindets schon.

Verfasst: 16.03.2007 15:05
von Jilocasin
Eigentlich "gar nicht"

Du kannst nur den Fensterinhalt löschen neu zeichnen, ungefähr so...

Code: Alles auswählen

CreateImage(0, 200, 200)


OpenWindow(0, 0, 0, 300, 300, "Blubber", #PB_Window_SystemMenu)

CreateGadgetList(WindowID(0))
ButtonGadget(0, 20, 15, 100, 24, "Mach hinne!")

StartDrawing(WindowOutput(0))
  DrawImage(ImageID(0), 50, 50)
StopDrawing()



Repeat
  EventID = WaitWindowEvent()
  
  If EventID = #PB_Event_Gadget ; Gibt ja nur 1 Gadget....
    WindowID = WindowID(0)
    
    InvalidateRect_(WindowID, 0, #True) ; <------- Dasda
  EndIf
Until WaitWindowEvent() = #WM_CLOSE
//edit: Kaeru war schneller ^^

Verfasst: 16.03.2007 15:37
von bobobo
wer direkt auf ein Fenstermalt ist eh selbst Schuld.

Mal auf ein Imagegadget und alles wird gut.
:)

Verfasst: 16.03.2007 17:04
von Thomas
bobobo hat geschrieben:wer direkt auf ein Fenstermalt ist eh selbst Schuld.

Mal auf ein Imagegadget und alles wird gut.
:)
wenns so einfach wäre, würde ich es auch machen, ...

@Jilocasin:
es soll halt alles weg sein, dass ich zuvor draufgezeichnet habe. 8)

Verfasst: 16.03.2007 17:08
von Jilocasin
Thomas hat geschrieben:@Jilocasin:
es soll halt alles weg sein, dass ich zuvor draufgezeichnet habe. 8)
Ja, hastes mal ausprobiert? :mrgreen:

Verfasst: 16.03.2007 17:32
von Kaeru Gaman
Thomas hat geschrieben:wenns so einfach wäre, würde ich es auch machen, ...
was ist denn daran so schwierig?
was würdest du denn machen wollen, was aufm fensterhintergrund besser funktioniert als auf nem image?

Verfasst: 16.03.2007 18:48
von Thomas
Ich will ein Image (max 64x64 Pixel) mit transparenten Stellen auf nem Window darstellen.
Ich machs so:
ich mal die sichtbaren Stellen Punkt für Punkt auf das Fenster.

Blos mit dem hier gibts nur ein Problem:

Code: Alles auswählen

InvalidateRect_(WindowID(#HauptFenster), 0, #True)
Der Code ist OK, aber es wird der ganze Bildschirm neu gezeichnet; das flackert bei mir!!! :o
Gibt es ne möglichkeit, dass nur der Bereich, wo das Image ist, neu "gezeichnet" wird (das das Bild weg ist, und das Fenster nicht flackert)?

Verfasst: 16.03.2007 23:39
von Green Snake
So

Code: Alles auswählen

Define Rect.RECT
Rect\Left   = 0   ;Hier gibst du die Koordinaten an.
Rect\Top    = 0
Rect\Right  = 100
Rect\Bottom = 100
InvalidateRect_(WindowID(#HauptFenster),@Rect,#True)
Aber das Image ist immernoch die bessere Lösung :allright:

Verfasst: 17.03.2007 17:30
von Thomas
Ich werd's mal mit dem ImageGadget versuchen, aber wo krig ich dir Farbe von dem ImageGadget her?