Seite 1 von 1

Zeichenbefehle in ImageGadget anwenden

Verfasst: 13.12.2007 13:59
von JayCool
Hi Leute, ich steh' vor einem Rätsel::bluescreen:

In der PB-Hilfe zum Befehl StartDrawing() steht Folgendes:
Unter Windows ist es erforderlich, die mittels WindowOutput() direkt in ein Fenster gezeichneten Grafiken nach jedem Verdecken, Minimieren etc. des Fensters manuell neu zu zeichnen ("zu refreshen"). Es ist daher empfehlenswert, Grafiken über ImageOutput() in ein Bild zu zeichnen und dieses als ImageGadget() im Anwendungsfenster darzustellen sowie ggf. mittels SetGadgetState() upzudaten. Windows erledigt dann das Neuzeichnen der Grafiken automatisch.
Jetzt habe ich das mal mit einem eigenen Programm versucht, aber aus irgendwelchen Gründen krieg' ich das nicht hin. Kann mir bitte jemand einen konstruktiven Vorschlag machen, was ich an dem nachstehenden Programm ändern muss, damit das Gitternetz im ImageGadget angezeigt wird:

Code: Alles auswählen

OpenWindow(1,0,0,400,400,"",#PB_Window_Maximize|#PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

CreateImage(2,650,650)

CreateGadgetList(WindowID(1))

ImageGadget(1,100,100,700,700,ImageID(2),#PB_Image_Border) 

StartDrawing(ImageOutput(2))

For x=150 To 650
  For y=150 To 850 Step 50
    Plot(x, y, RGB($00,$00,$00))
    Plot(y, x, RGB($00,$00,$00))
  Next y
Next x

ImageGadget(1,100,100,700,700,ImageID(2),#PB_Image_Border)

Repeat
  Ereignis = WaitWindowEvent()
Until Ereignis = #PB_Event_CloseWindow
End

Muss ich statt des ImageGadget-Befehls vor dem Repeat vielleicht SetGadgetState(#Gadget, Status) angeben?
Mir ist aber bei SetGadgetState nicht klar, welchen Wert ich bei 'Status' angeben muss.

MfG Jan

Verfasst: 13.12.2007 14:24
von Bisonte
Du hast recht ;) Du musst den SetGadgetState() Befehl nehmen.

Der Parameter "Status" ist in diesem Falle (also bei Bildwechsel)
die ImageID()

In Deinem Fall dann SetGadgetState(1,ImageID(2))

Aber ein Gitter wirst Du wohl nicht sehen, ein Beispiel Warum nicht:

Ostfriesische Nationalflagge : Schwarzer Adler auf schwarzem Grund :lol:

Bei CreateImage ist die Standardfarbe des Images komplett Schwarz.

Deshalb solltest bei den Plot Befehlen die Farbe auf irgendetwas anderes setzen,
als auf schwarz !

Verfasst: 13.12.2007 14:33
von JayCool
Hi,

ich hab' das Programm mal dementsprechend geändert, aber es läuft immer noch nicht. :(
Es muss noch irgendwo ein Fehler versteckt sein?!?!?!?!?!?!?

Code: Alles auswählen

OpenWindow(1,0,0,400,400,"",#PB_Window_Maximize|#PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 

CreateImage(2,650,650) 

CreateGadgetList(WindowID(1)) 

ImageGadget(1,100,100,700,700,ImageID(2),#PB_Image_Border) 

StartDrawing(ImageOutput(2)) 

For x=150 To 650 
  For y=150 To 850 Step 50 
    Plot(x, y, RGB($FF,$FF,$FF)) 
    Plot(y, x, RGB($FF,$FF,$FF)) 
  Next y 
Next x 

ImageGadget(1,100,100,700,700,ImageID(2),#PB_Image_Border)
SetGadgetState(1,ImageID(2))
 

Repeat 
  Ereignis = WaitWindowEvent() 
Until Ereignis = #PB_Event_CloseWindow 
End 

Verfasst: 13.12.2007 14:39
von Kiffi
JayCool hat geschrieben:Es muss noch irgendwo ein Fehler versteckt sein?!?!?!?!?!?!?
da fehlt noch ein StopDrawing() nachdem alle Zeichenoperationen beendet worden sind.

Grüße ... Kiffi

P.S.: Bitte nicht so viele Ausrufe- und Fragezeichen verwenden.

Verfasst: 13.12.2007 14:40
von Bisonte
uahhh das seh ich jetzt erst....

es fehlt das stopdrawing() ;)

zwischen Next x und setgadgetstate...

das Imagegadget(.... kannst du da wegnehmen... doppelt gemoppelt

Edit: Mist da war Kiffi doch um ein paar sekunden schneller ;)

Verfasst: 13.12.2007 14:45
von JayCool
Hi @ all!

Jetzt klappts! :bounce:

Ich dachte, der Befehl StopDrawing() wäre genauso überflüssig wie der Befehl End am Ende des Programms. Hab' wieder was dazugelernt.

Vielen Dank erstmal an alle, bis zum nächsten Problem.

Verfasst: 13.12.2007 18:17
von PMV
JayCool hat geschrieben:Ich dachte, der Befehl StopDrawing() wäre genauso überflüssig wie der Befehl End am Ende des Programms.
Ich will nur anmerken, dass der Befehl End keines wegs überflüssig
ist. In PB wird am Ende des Quellcodes dieser Befehl lediglich
automatisch aufgerufen, ohne das er angegeben werden muss.

MFG PMV