Canvas Hintergrund zur Laufzeit ändern

Hallo zusammen,

ich habe da mal eine “Anfängerfrage”. Ist es mit Xojo möglich, den Hintergrund zur Laufzeit eines Canvas zu ändern? Bisher habe ich die Hintergrundfarbe immer via Paint beim Starten festgelegt:

g.forecolor=Color.rgb(174, 214, 241)
g.fillrect 0,0,g.width,g.height

Jetzt möchte ich aber, dass wenn Button B geklickt wird, der Hintergrund eine andere Farbe erhält und beim Klick auf Button A wieder eine andere Farbe.

Grüße

Du kannst das mit einem Boolean machen oder einer Integer-Property. Sagen wir es ist ein Boolean: NormalColor

Button A Action event:
NormalColor = True
Canvas.refresh

Button B Action event:
NormalColor = False
Canvas.refresh

Und das Paint event vom Canvas:

if NormalColor then
g.ForeColor = color 1
else
g.Forecolor = color 2
end if
g.FillRecht

Oder so ähnlich.

1 Like

Okay, das ist eine Idee. Ich dachte ich hätte die Zeichnung per beispielsweise:

Canvas1.Paint...

steuern können. Aber das scheint nicht zu gehen.

Wenn du eigene Methoden oder Eigenschaften brauchts kannst du das Kontext Menu sub class erstellen beim Canvas benutzen.

Refresh macht die Darstellung vom Control ungueltig und dann wird Paint mit dem Grafik Kontext aufgerufen.

Wenn du das Backdrop Picture vom Canvas setzt malt es sich auch selbst neu

Oder Computed Properties erstellen, die eignen sich dafuer, man setzt z.B. einen Farbwert, merkt sich den und ruft Refresh auf.

Ein Picture Objekt hat auch einen Graphics Kontext, damit kann man direkt malen.

Du kannst das g As Graphics vom Paint Event auch an andere Methoden weiter reichen in dem du deiner Methode auch diesen Parameter gibst.

1 Like

Nein. Paint ist ein Event, das Graphics-Objekt steht dir nur innerhalb des Events zur Verfügung.
Du löst aber ein neues Paint manuell mit Refresh aus.
Wenn eine komplexere Zeichnung erscheinen soll, kannst du sie außerhalb des Paint-Events in Form eines Pictures vorbereiten. Und dann mit BackDrop zuweisen oder innerhalb des Paint-Events nutzen, wie Markus schon sagte.

1 Like