Entwickler-Ecke

Multimedia / Grafik - TImage, Canvas, Größe ändern


Gausi - Fr 04.07.03 17:41
Titel: TImage, Canvas, Größe ändern
Neues Gebiet, neue Anfängerfragen :roll:
Hab jetzt mal angefangen, zu malen
Bisher mach ich das so

Delphi-Quelltext
1:
2:
3:
4:
5:
with image1 do begin
     Canvas.RoundRect(001001001010);
     Canvas.TextOut(50,50,'Otto ist lieb');
     //canvas.weitere.tolle.sachen.malen
end;

klappt auch ganz gut, so weit.
Jetzt kommt es aber vor, dass ich das Bild zur Laufzeit vergrößern muss (auch über die Größe der Form hinaus)
Das mach ich dann mit

Delphi-Quelltext
1:
image1.Height:=2000// oder eben ein anderer Wert                    

Dadurch kann ich aber noch nicht auf dem "neuen Bereich" wie oben malen.
d.h.

Delphi-Quelltext
1:
image1.canvas.Textout(50,1900,'Ottos Bruder ist auch lieb');                    

bringt nicht den gewünschten Erfolg.

Und nochwas: wie kann ich das ganze gemalte wieder löschen?


Affje - Fr 04.07.03 21:29

ich glaube du kannst alles wieder mit image1.canvas.free löschen (???)


Tweafis - Fr 04.07.03 21:38

mit free gibst du den Speicher frei und jeder weitere Zugriff würde eine Exception auslösen. Mach lieber

Canvas.Brush.Color := clBtnFace; // oder clBlack oder clWhite oder ...
Canvas.FillRect(ClientRect);


10Markus - Sa 05.07.03 15:46
Titel: Mach es so
Hi,

ich hatte ein ähnliches Problem. Du musst ebenfalls die Größe der Bitmap ändern, d.h. wenn du folgendes machst: image1.height:=400 dann musst du auch das hier machen: image1.picture.bitmap.height:=400;

damit müsste es gehen. Das selbst musst du natürlich auch mit den anderen attributen machen.


Gausi - Sa 05.07.03 18:22

Hört sich ganz gut an. Habs aber in der Zwischenzeit anders gelöst bekommen. Da ich die Größenänderung eh nur dann brauche, wenn ich auch ein komplett neues Bild zeichnen will, geb ich einfach das komplette image frei und erzeuge es neu. Also


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
    image1.free;
    image1:=TImage.Create(form1);
    image1.Parent:=form1;
    image1.Height:=...
    image1.Width:=...
    [...]

Dann ist automatisch der Zeichenbereich so groß wie ich es brauche.
Is vielleicht nicht das allereleganteste (wenn ich neu tapezieren will, reiss ich ja auch nicht vorher das ganze Haus ab...), aber es geht.
Danke trotzdem ;-)