![]() |
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:
Weiß einer Rat?
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; Gruß, Chris |
Re: Größenänderung von TImage ändert nicht den Zeichenbereic
Nimm doch eine Paintbox und zeichne im OnPaint derselben.
|
Re: Größenänderung von TImage ändert nicht den Zeichenbereic
Versuch mal das BitMap in dem Image anzupassen (Width und Height)
|
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.
|
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.
|
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.
|
Re: Größenänderung von TImage ändert nicht den Zeichenbereic
Jupp, hier nochmal der Grund
Delphi-Quellcode:
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.
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;
Delphi-Quellcode:
Image1.Width := X;
Image1.Height := Y; Image1.Bitmap.Width := X; Image1.Bitmap.Height := Y; |
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...
|
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. |
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 11:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz