Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Mo 23.08.21 23:01 
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

ausblenden 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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):
entwickler-ecke.de/viewtopic.php?t=91534
Einen Screenshot findest du hier:
www.delphipraxis.net/901617-post.html
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: 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