# Inhalt einer Canvas löschen (SWT.NO_BACKGROUND gesetzt)



## DocSnyder (26. Jan 2007)

Hallo,

ich habe das Problem, dass ich den Inhalt einer Canvas nicht löschen kann. Ich füge der Canvas einen PaintListener hinzu:


```
canvas.addPaintListener(new PaintListener()
{
    public void paintControl(PaintEvent e)
    {
        if(xpos==0 && ypos==0)
            return;
        GC gc = e.gc;
        gc.drawRectangle(xpos, ypos, 300, 300);
    }
});
```

das zeichnen rufe ich mit folgender Methode auf (übergebe die Position des Rechtecks)


```
public void drawSomething(int in_xpos, int in_ypos)
{
    xpos = in_xpos;
    ypos = in_ypos;
    canvas.redraw();
}
```

wenn ich diese Methode mit jeweils anderen Parametern aufrufe, habe ich das Problem, dass das ALTE Rechteck immer noch sichtbar ist, obwohl ich es gelöscht haben möchte und nur das neue Rechteck sehen will.

was mache ich falsch?

das zu noch folgendes: Ich benutze die Canvas innerhalb eines Composites, welche auch noch ein Browserobjekt beinhaltet. Beide sind in einem StackLayout organisiert. Wenn ich jetzt die Reihenfolge kurz hinundherschalte, dh.den Browser in den Vordergrund hole und gleich wieder in den Hintergrund (mit StackLayout.topControl), dann seh ich nur das zuletzt gezeichnete Rechteck.

in einem anderen Forum habe ich folgendes gelesen:
_If you are using SWT.NO_BACKGROUND you will have to draw every pixel (i.e. 
you will have to fill in the background too)._
Wie ist das zu versehen, mit dem Background, ich werde daraus nicht schlau :-(


Danke im Voraus, Michael


----------



## Beni (26. Jan 2007)

Zeichne doch einfach ein Rechteck (mit der Hintergrundfarbe) von 0/0 nach Breite/Höhe, um den Hintergrund zu löschen.


----------



## DocSnyder (28. Jan 2007)

Hm, ich glaube, damit weiß ich nichts anzufangen :-(

Micha


----------



## Beni (28. Jan 2007)

Ich kenne SWT nicht gut, aber etwas in die Richtung:


```
canvas.addPaintListener(new PaintListener()
{
    public void paintControl(PaintEvent e)
    {
        GC gc = e.gc;
        // ok, die nächsten beiden Zeilen sind nur geraten, aber
        // soetwas ähnliches wird es hoffentlich geben... :-)
        gc.setColor( getBackgroundColor() );
        gc.fillRectangle(0, 0, getWidth(), getHeight());

        if(xpos==0 && ypos==0)
            return;

        gc.drawRectangle(xpos, ypos, 300, 300);
    }
});
```


----------

