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 TImage.Canvas Resize (https://www.delphipraxis.net/41368-timage-canvas-resize.html)

Skyrunner2 2. Mär 2005 13:49


TImage.Canvas Resize
 
hi,
Wie kann ich die größe des Canvas eines TImage Objektes ändern?

Das TImage Objekt hat den Align wert: alClient und in dem übergeordnetem form rufe ich bei resize folgende prozeduren auf:

Image1.Refresh;
Image1.Repaint;
Image1.Canvas.Refresh;


Image1 wird erfolgreich geändert (Ist ja alClient), jedoch Canvas nicht. Canvas bleibt bei der alten größe und graphik auserhalb diesen dimensionen wird nicht angezeigt.

sniper_w 2. Mär 2005 14:16

Re: TImage.Canvas Resize
 
Die Frage ist nicht korrekt gestellt. Was willst du eigentlich erreichen ?
Canvas "Grösse" kann man nicht ändern. Grösse = Grösse des sichtbares Feldes vom Objekt deren Canvas Property ist zu benutzen, wenn du es so willst.
Und nochmals, was willst du eigentlich erreichen ?

[EDIT]

Delphi-Quellcode:
procedure TForm1.FormResize(Sender: TObject);
begin
Image1.Picture.Bitmap.Width := Width;
Image1.Picture.Bitmap.Height := Height;
Image1.Canvas.MoveTo(0,0);
Image1.Canvas.LineTo(Width,Height);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Canvas.Pen.Color := clBlue;
end;

Skyrunner2 2. Mär 2005 14:46

Re: TImage.Canvas Resize
 
Liste der Anhänge anzeigen (Anzahl: 1)
also ich (miss)brauche das Timage feld nur um mit dem canvas zu arbeiten.

doch ich habe das problem das sobald ich die größe des forms,auf dem sich Timage befindet, ändere den dazugewonnenen canvas paltz nicht gebrauchen kann.


also form (größe 100X200) auf 200x200 ändern, und dann hab ich ja 100x200 pixel zum image felde (da es ja align=Client ist) dazgewonnen.

wenn ich jedoch nun eine linie von 0,0 zu 200,200 zeichne, so endet die linie bei 100,100 (also die maximale X stelle von vor der größen änderung)...

(siehe screenshot)



frage: Wie löse ich das oben genannte problem??!

notiz:
Image1.Refresh;
Image1.Repaint;
Image1.Canvas.Refresh;

Funktioniert NICHT

sniper_w 2. Mär 2005 15:08

Re: TImage.Canvas Resize
 
Zitat:

doch ich habe das problem das sobald ich die größe des forms,auf dem sich Timage befindet, ändere den dazugewonnenen canvas paltz nicht gebrauchen kann.
Ein Timage ist nur ein PlaceHolder für u.a. ein Bitmap. Wenn die Grösse von TImage geändert wird, wird dabei leider nicht die dazugehörige BitmapGrösse geändert. Das musst du manuell machen. (siehe oben)

Aike 26. Mär 2007 11:30

Re: TImage.Canvas Resize
 
Hallo,

ich habe das selbe Problem. Kurzzeitig verschwand es, jetzt ist es wieder da und lässt sich auch nicht mit dem oben genannten Code beheben.

Hier mein Code:
Delphi-Quellcode:
//Geht nicht:
imgLinieOben.Width:=Width;
imgLinieoben.Picture.Bitmap.Width:=Width;
i:=imgLinieOben.Width;

imgLinieOben.Left:=0;
imgLinieOben.Canvas.MoveTo(0,0);
imgLinieOben.Canvas.LineTo(i,0);
imgLinieOben.Height:=1;


//Geht:
imgLinieUnten.Width:=imgLinieOben.Width;
//imgLinieUnten.Picture.Bitmap.Width:=imgLinieOben.Picture.Bitmap.Width;
imgLinieUnten.Left:=imgLinieOben.Left;
imgLinieUnten.Canvas.MoveTo(0,0);
imgLinieUnten.Canvas.LineTo(i,0);
imgLinieUnten.Height:=1;
Echt abgefahren. Mit dem oberen Code passiert nichts, bzw. ich sehe keine Linie und kein Image, auch nicht wenn ich die Höhe mal auf 100 schalte. Die untere Linie wird korrekt gezeichnet, allerdings eben nicht in der richtigen Breite, weil Picture.Bitmap.Width nicht angeglichen wird. Das komische daran ist, dass es vor 10 Minuten schonmal funktioniert hat, ich aber nicht mehr weiß, was ich daran geändert haben sollte. Könnt ihr mir da vielleicht weiterhelfen?

greetings ...

Masteric 1. Feb 2010 00:43

Re: TImage.Canvas Resize
 
Das Thema ist zwar schon ein paar Jahre alt aber ich bin drüber gestolpert als ich das PRoblem selber hatte und daher will ich mal eine Lösung posten,
also es geht schon man muss nur auch das Bitmap vergrößern :wink:

Beispiel:
Delphi-Quellcode:
Image1.Width:=form1.clientWidth;
Image1.Height:=form1.clientHeight;
Image1.Picture.Bitmap.Width:=Image1.Width;
Image1.Picture.Bitmap.Height:=Image1.height;
Jetzt ist das Image1, samt Canvas so groß wie das Form1.

Gruß Masteric


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 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