Cannot draw outside the draw event handler

Spezielle Fragen zu 2D- und 3D-Grafik, Sound und Video
Antworten
Otchipoi
Foriker
Beiträge: 1
Registriert: So 16. Nov 2014, 18:27
Kontaktdaten:

Cannot draw outside the draw event handler

Beitrag von Otchipoi » So 16. Nov 2014, 19:12

Moin zusammen!

Ich habe ein bisschen Ärger mit Gambas 3.1.1 :: XUbuntu 14.04 LTS

Ich erhalte bei folgendem Beispiel:

Code: Alles auswählen

Public Sub Form_Open()

  Draw.Begin(DrawingArea1)
  Draw.Point(10, 10)         <--- hier bleibt es hängen!
  Draw.End

End


immer die Fehlermeldung: Cannot draw outside the draw event handler
Dasselbe erhalte ich übrigends auch bei Paint.Begin ... allerdings habe ich da keine Methode gefunden die da lautet Paint.Point(10,10)
Ich habe nämlich grade gelesen das Paint angeblich Draw abgelöst hat.

Hat jemand eine Idee? zumal dieses als Beispiel etliche Male gezeigt wird.

Im voraus vielen Dank für die Hilfe

Gruß Udo

tux_
Moderator
Beiträge: 946
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Cannot draw outside the draw event handler

Beitrag von tux_ » So 16. Nov 2014, 19:53

Ein wichtiger Hinweis vorneweg: Gambas 3.1.1 ist vom April 2012. In Gambas-Jahren ist das eine Menge! Da du ein aktuelles Ubuntu-Derivat benutzt, solltest du leicht ueber das Gambas-PPA an die aktuelle stabile Gambas-Version 3.6.2 kommen. Siehe [0].

Zu deinem Problem: seit Gambas 3.x.y (offensichtlich ist x.y <= 1.1) kann in DrawingAreas standardmaeszig nur noch in ihren Draw-Events gezeichnet werden. Das Draw-Event wird vom Interpreter automatisch ausgeloest, wenn er meint, dass der Inhalt der DrawingArea neu gezeichnet werden muesse. Das mag dir jetzt sonderbar erscheinen, aber man gewoehnt sich daran. Willst du dieses Verhalten abstellen, also weiterhin auszerhalb des Draw-Events zeichnen, dann kannst du die Cached-Eigenschaft der DrawingArea auf True setzen (im Formular-Editor oder vor dem Zeichnen per Code).

Dasselbe erhalte ich übrigends auch bei Paint.Begin ... allerdings habe ich da keine Methode gefunden die da lautet Paint.Point(10,10)
Ich habe nämlich grade gelesen das Paint angeblich Draw abgelöst hat.


Korrekt. Waehrend Draw ein mehr intuitiver Zugang zum Zeichnen war, ist die Paint-Klasse eher an vektorielles Zeichnen angelehnt. Um einen Pixel an den Koordinaten (x,y) mit Paint zu faerben, wuerdest du Paint.Arc(x, y, 1) aufrufen, gefolgt von Paint.Fill().

In beiden Faellen (nicht-gecachete DrawingArea und Paint statt Draw) lohnt sich m.E. der Wechsel. Trotzdem gibt es Anwendungen, in denen Draw besser als Paint ist und eine gecachete DrawingArea einfacher zu handhaben als eine nicht-gecachete.

zumal dieses als Beispiel etliche Male gezeigt wird.


Mich wuerde interessieren, wo du das aufgeschnappt hast. Hast du noch Links zu ein paar jener Seiten parat?

[0] http://gambaswiki.org/wiki/install/ubuntu
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast