Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Canvas bei TImage
andisun - Mo 27.01.03 21:04
Titel: Canvas bei TImage
Ich komme irgendwie nicht weiter, ich möchte gerne, dass wenn sich die Größe meines Formulars ändert, das darauf befindliche TImage samt seines Canvas die Größe entsprechend ändert...
Eigentlich ist das ja ganz einfach, ich habs auch so weit, das er die große vo Timage ändert, nur das Canvas ändert seine Größe nicht, siehe ClipRect...
Somit kann ich in den neu geschaffenen Raum ncith zeichnen, beim Start des Programms wird einmal Canvas.ClipRect festgelegt, doch wie verändert man es während es läuft???
Wenn ich direkt aufs Formular zeichne gehts es doch auch...
ErnestoChe - Mo 27.01.03 22:19
Hi,
Ich verstehe nicht ganz was Du meinst. Aber wenn Du meinst dein Canvas wird dann gestreckt liegst Du falsch.
Du musst die Koordinaten deiner Canvas-Anweisungen ebenfalls entsprechend ändern. Es genügt nicht, dass Du nur das TImage vergrößerst.
MFG
______
Ernesto
andisun - Di 28.01.03 15:17
Dieser Code sollte ja eigentlich, das TImage vollständig füllen...
Quelltext
1: 2: 3: 4:
| Bild.Canvas.Brush.Color := RGB( 255, 255, 255 ); Flaeche := Bild.Canvas.ClipRect; Bild.Canvas.FillRect( Flaeche ); |
...tut er auch, aber nur in dem Bereich der angezeigt wird nach dem das Programm gestartet wurde. Das heisst, wenn ich das Formular vergrößere und dadurch das TImage ja auch größer wird, also die Komponente an sich, also Bild.Height und Bild.Width größer werden, hab ich geprüft...
Dann müsste die Zeichenfläche auch komplett gefüllt werden, also das Canvas, nur füllt er auch bei vergrößertem Canvas nur den Bereich Bild.Canvas.ClipRect, das ist ja auch logisch, den genau diese ändert sich komischer weise beim vergrößern nicht...
Man kann das Rect ja auch selbst festlegen:
Quelltext
1: 2: 3:
| Bild.Canvas.Brush.Color := RGB( 255, 255, 255 ); Flaeche := Rect( 0, 0, Bild.Width, Bild.Height ); Bild.Canvas.FillRect( Flaeche ); |
doch auch das ändert nciths, alles was über die anfangsgröße hinausgeht, wird einfach abgeschnitten, so wie es in der beschreibung von ClipRect steht...
Auch ein manuelles ändern ist ncith möglich, da die Variable Schreibgeschützt ist.
Also müsste es doch eine Methode geben, die ClipRect ändert, also die Größe der Zeichenfläche ändern kann oder aktuallisiert, wenn man die größe des Formulars geändert hat.
Irgendwie weiss ich nicht so recht wie ich das Problem beschreiben soll, ich hoffe diesmal war es einigermaßen anschaulich erklärt.
smiegel - Di 28.01.03 16:00
Hallo,
es ist immer Problematisch in den Canvas des Images direkt zu zeichnen. Nehme doch den Bitmap.Canvas. Diesen kannst Du dann auch individuell anpassen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure Form1.FormCreate(Sender: TObject); begin ... with Image1 do begin Picture.Bitmap.Width:=Width; Picture.Bitmap.Height:=Height; end; // wíth ... |
In der OnResitze des Forms fügst Du dann folgenden Code ein:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| // Annahme, dass das Image mit Align:=alClient auf der Form liegt. procedure TForm1.FormResize(Sender: TObject); begin with Image1 do begin Picture.Bitmap.Width:=Width; Picture.Bitmap.Height:=Height; end; // wíth Zeichne; // nach Größenänderung, neu zeichnen. end;
procedure TForm1.Zeichne; begin with Image1.Picture.Bitmap.Canvas do begin FillRect(ClipRect); ... ... end; // with end; // TForm1.Zeichne |
Anonymous - Di 28.01.03 18:47
Die Canvas ist immer so groß wie daß Bitmap ist. Du kannst also nicht die Canvas ändern, sondern mußt es mit der Bitmap machen. Die Hat wiederum ein Width und Height.
Um die Ganze Fläche eines Bildes auszufüllen ist das die korrekte Funktion:
Quelltext
1:
| Bild.Canvas.FillRect( Bild.Canvas.ClipRect ); |
oder kurz:
Quelltext
1:
| with Bild.Canvas do FillRect( ClipRect ); |
Wenn nicht soviel gefüllt wurde wie du willst, dann mußt du an den Werten der Bitmap ändern.
andisun - Di 28.01.03 23:11
Titel: Vielen Dank
Danke jetzt gehts, hab bei Form1.OnResize:
Quelltext
1: 2: 3: 4: 5:
| ... Begin Bild.Picture.Bitmap.Height:=Bild.Height; Bild.Picture.Bitmap.Width:=Bild.Width; End; |
und nun läufts ohne probleme, war schon am verzweifeln... :lol:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!