Entwickler-Ecke

Multimedia / Grafik - TImage: Nur Teilbereich wird gezeichnet


GuaAck - Mo 23.08.21 23:01
Titel: TImage: Nur Teilbereich wird gezeichnet
Hallo,

Ich habe ein Formular mit einem Image1: TImage. Das Image1 ist nach allen Seiten verankert, so dass es mit einer Vergrößerung des Formular auch vergrößert wird. Die Eigenschaft WindowsState des Forms ist auf wsMaximized gesetzt. Das funktioniert. (Geprüft: OnMouseMove des TImage wird im gesamten Bereich ausgelöst.)

Mein Problem: Der Code


Delphi-Quelltext
1:
2:
3:
4:
5:
  Rect.Left := 0;
  Rect.Top := 0;
  Rect.Right := Image1.Width - 1;
  Rect.Bottom := Image1.Height - 1;
  Image1.Canvas.FillRect(Rect);


füllt nur den linken oberen Bereich von Image1 in der Größe, wie ich das Formular designed habe, obwohl Image1 wegen wsMaximized größer geworden ist. Ursache scheint die Eigenschaft Image1.Canvas.ClipRect zu sein, die noch auf die kleineren "designed" Werte gesetzt ist. Mein Versuch, dies mit


Delphi-Quelltext
1:
SelectClipRgn(Image1.canvas.Handle,HRGN(nil));                    


nach einem Beispiel in der Windows-SDK-Hilfe zu ändern, hatte keinen Erfolg. Ebenso, SelectClipRgn mit den Maßen der vollen Bildfläche aufzurufen, Image1.Canvas.ClipRect blieb unverändert.

Auch nach einem Minimalisieren und erneuten Maximieren des Forms bleibt der Effekt.

Hat jemand eine Idee?

Viele Grüße
GuaAck


jaenicke - Di 24.08.21 08:35

Passt du denn die Größe des Bildes in dem TImage auch an die neue Größe an?


GuaAck - Di 24.08.21 09:46

Was meinst Du mit "Größe des Bildes"?

Ich habe ja nur das Rechteck mit fillrect mit Farbe gefüllt. Rect hat dabei tatsächlich die volle Große des Image1, nur etwas kleiner als das Form, wie es sein soll. Wo muss ich noch die "Größe des Bildes" angepast werden?

Gruß
GuaAck


jaenicke - Di 24.08.21 10:38

Du stellst dir ein TImage offenbar falsch vor. Das ist keine einfache Zeichenfläche, sondern dient zur Anzeige eines Bildes. Du kannst mit Image1.Canvas auf das Bild in Image1.Picture.Bitmap malen. Die Größe des angezeigten Bildes hat aber nichts mit der Größe der anzeigenden TImage-Komponente zu tun.

Suchst du vielleicht eher so etwas wie TPaintbox. Dazu habe ich hier einmal eine Demo gemacht (der komplette untere Bereich ist darin selbst gezeichnet):
https://entwickler-ecke.de/viewtopic.php?t=91534
Einen Screenshot findest du hier:
https://www.delphipraxis.net/901617-post.html


GuaAck - Di 24.08.21 19:58

Hallo Jaenicke,

mit Paintbox habe ich selbst viel gemacht. Jetzt habe ich es von TImage auf TPainbox umgestellt, das geht einwandfrei,

Danke für den Tipp,
Gruß
GuaAck