Entwickler-Ecke

Multimedia / Grafik - TImage.Repaint / Refresh / Invalidate funktioniert nicht


Nitr0 - Do 01.05.08 23:30
Titel: TImage.Repaint / Refresh / Invalidate funktioniert nicht
Hallo,
habe mal wieder ein Problem.
Ich zeichne auf ein TImage (Image1) mit Canvas etwas (spielt ja keine Rolle was).
Dann will ich auf Knopfdruck, dass alles gelöscht wird. Also dass Image1 wieder weiß ist.
Als mein Projekt noch klein und unkompliziert war, ging das auch problemlos so:


Delphi-Quelltext
1:
2:
3:
4:
procedure Button2Click(Sender: TObject)
begin
Image1.Repaint;
end;


Aber irgendwann funktionierte das dann nicht mehr.
Ich habe jetzt alles mögliche ausprobiert, z.B. Refresh, Invalidate etc. Habe sogar probiert Image1 zuerst zu löschen und dann wieder neu zu erstellen (mit Free und Create), aber das funktionierte auch nicht richtig, da er danach nicht mehr darauf zeichnen wollte.
Ich verzweifle da echt dran, weil eine Stunde googlen und hier im Forum suchen auch keine Lösung brachte. Zumal ich den Fehler überhaupt nicht nachvollziehen kann, es hatte ja immer funktioniert.
Wenn ihr den Quelltext für die Lösung bzw. Nachvollziehbarkeit des Fehlers braucht, sagt das, dann stell ihn ihn rein.
Danke schonmal,
Nitr0

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


delfiphan - Fr 02.05.08 10:39

Naja, man muss ja nicht einfach blind probieren. Steht doch bestimmt in der Hilfe, dass Refresh nicht das Bild löscht.


Delphi-Quelltext
1:
2:
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Image1.Canvas.ClipRect);


Nitr0 - Fr 02.05.08 17:34

Danke schonmal, ist ja logisch dass es so klappt. Ich habe mich halt gefragt, ob es nicht eine elegantere Lösung gibt, immerhin hatte Repaint ja schon eine zeitlang funktioniert. Mich würde interessieren, wieso es das jetzt nicht mehr tut. :-S


jakobwenzel - Mi 07.05.08 13:31

Wahrscheinlich hast du bisher eine PainBox statt eines Images verwendet.

Bei einer PaintBox wird nämlich beim neuzeichnen nicht wieder alles hingemalt.