Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Größenänderung von TImage ändert nicht den Zeichenbereich (https://www.delphipraxis.net/129096-groessenaenderung-von-timage-aendert-nicht-den-zeichenbereich.html)

Cyberbob 12. Feb 2009 15:18


Größenänderung von TImage ändert nicht den Zeichenbereich
 
Hallo @all,

ich habe ein TImage auf meiner Form liegen, dass sich bei Größenänderungen der Form mit ändert. Nun wollte ich beim Zeichnen auf das Image die ganze breite ausnutzen, was mit aber nicht gelingt.
Das Image selbst vergrößert sich wie gewünscht. Jedoch kann ich in den neuen Zeichenbereich nicht Zeichnen, die Größe der Zeichnung ändert sich also nicht mit der Größe des Image

Beispielcode:
Delphi-Quellcode:
with imgView.Canvas do
begin
  Brush.Color := clBlack;
  Pen.Color := clBlack;
  Rectangle(imgView.ClientRect);
  Pen.Color := clYellow;
  Pen.Width := 2;
  MoveTo(0, imgView.ClientHeight div 2 - 1);
  LineTo(imgView.ClientWidth, imgView.ClientHeight div 2 - 1);
  Pen.Width := 1;
end;
Weiß einer Rat?

Gruß,
Chris

DeddyH 12. Feb 2009 15:36

Re: Größenänderung von TImage ändert nicht den Zeichenbereic
 
Nimm doch eine Paintbox und zeichne im OnPaint derselben.

himitsu 12. Feb 2009 16:08

Re: Größenänderung von TImage ändert nicht den Zeichenbereic
 
Versuch mal das BitMap in dem Image anzupassen (Width und Height)

DeddyH 13. Feb 2009 08:07

Re: Größenänderung von TImage ändert nicht den Zeichenbereic
 
Ich kann mich irren, aber für mich sieht das so aus, als ob das Image keine Grafik enthält, sondern als Zeichenfläche "missbraucht" wird. Daher mein Rat, eine Paintbox zu nehmen, die ist ja dafür gedacht.

himitsu 13. Feb 2009 08:10

Re: Größenänderung von TImage ändert nicht den Zeichenbereic
 
selbst wenn sie "nur" als Zeichenfläche gebraucht wird, dann hat sie dennoch intern irgendwo ein Bitmap liegen, worauf gezeichnet wird .. und das wird (glaub ich) beim erstellen des TImages erstellt, mit der Größe des TImages ... wenn sonst nix anderes vorhanden ist.

Zacherl 13. Feb 2009 08:17

Re: Größenänderung von TImage ändert nicht den Zeichenbereic
 
Ja ist korrekt, also man muss Width und Height sowohl vom Image als auch vom Image.Picture.Bitmap ändern.

himitsu 13. Feb 2009 08:20

Re: Größenänderung von TImage ändert nicht den Zeichenbereic
 
Jupp, hier nochmal der Grund
Delphi-Quellcode:
function TImage.GetCanvas: TCanvas;
var
  Bitmap: TBitmap;
begin
  if Picture.Graphic = nil then
  begin
    Bitmap := TBitmap.Create;
    try
      Bitmap.Width := Width;
      Bitmap.Height := Height;
      Picture.Graphic := Bitmap;
GetCanvas wird aufgerufen, wenn man auf Image.Canvas zugreift und wenn da noch kein Bild existiert, dann wird ein Bitmap erstellt, auf welchem gezeichnet wird.

Delphi-Quellcode:
Image1.Width        := X;
Image1.Height       := Y;
Image1.Bitmap.Width := X;
Image1.Bitmap.Height := Y;

DeddyH 13. Feb 2009 08:48

Re: Größenänderung von TImage ändert nicht den Zeichenbereic
 
Das ist zwar für mich immer von hinten durch die Brust ins Auge, aber bevor das jetzt ausartet...

himitsu 13. Feb 2009 08:57

Re: Größenänderung von TImage ändert nicht den Zeichenbereic
 
Wenn es ihm nicht um Effizient und Geschwindigkeit geht und der "kleine" Overhead des TImages nicht stört, dann ist das TImage doch eine recht "einfache und schöne" Angelegenheit.

Bei der Paintbox mußt du entweder das Bild jedesmal neu zeichnen, wenn die Paintbox mal verdeckt war, oder es in einem Bitmap zwischenspeichern und dann für's neuzeichnen/rüberkopieren selber sorgen ... so ist das alles schon eingebaut ... nur reinmalen und sich um nichts mehr kümmern.

Also ich seh daran nichts unbedingt Verwerfliches.

Cyberbob 16. Feb 2009 17:56

Re: Größenänderung von TImage ändert nicht den Zeichenbereic
 
Danke an alle für die Zahlreichen Antworten.

Ich hab jetzt doch wieder ne Paintbox verwendet. Musste mich da zwar um alles selbst kümmern, so isses aber so, wie ich es brauche!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz