Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TImage: Größe ändern (https://www.delphipraxis.net/1064-timage-groesse-aendern.html)

Sebastian Nintemann 13. Okt 2002 16:18


TImage: Größe ändern
 
Hallo!

Also, bin an der TImage-Komponente am verzweifeln. Ich kriegs einfach nicht richtig gebacken die zur Laufzeit zu vergrößern.
Ich hab ein schmales TImage (eine Art Lineal, die Einteilung etc zeichne ich zur Laufzeit darauf, Picture ist keins geladen).
Ich will nun zu Laufzeit die Größe (Breite) des Images ändern.

Verkleinern: funktioniert mit Image.Width := ...

Dann wieder vergrößern: Es lässt sich genauso vergrößern, gezeichnet wird aber nur bis zu der Breite wie es am Anfang war

Wie krieg ich es hin das TImage zu vergrößern so dass man dann auch in dem vergrößerten Bereich aufs Canvas zeichnen kann?

Width? Picture.Width? Picture.Graphic.Width?

Ich hoffe jemand kennt sich damit aus...

Gruß, Sebastian

sakura 13. Okt 2002 16:21

Wenn ich Dir einen Tipp geben darf, dann nutze die TPaintBox Komponente, die ist dafür geeigneter. Im Hintergrund erstelle ein TBitmap, welches Du dann im OnPaint Ereignis auf den PaintBox.Canvas kopierst.

Die Image Komponente ist wirklich nur gut, wenn Du auch ein Bild lädst.

Daniel B 13. Okt 2002 16:23

Hi,

warscheinlich hast Du noch Strech := False; //Sollte auf True, dann ist wieder das ganze Image füllbar.
Proportional könnte Dir auch noch weiter helfen.

Grüsse, Daniel :hi:

Sebastian Nintemann 13. Okt 2002 17:31

Stretch bewirkt keinen Unterschied, außer dass das Bild verzerrt wird.
Wenn ich width und height anpasse, wieso kann ich dann nicht in den neuen Bereich zeichnen (mit Canvas.XXX)?

Gruß, Sebastian

sakura 13. Okt 2002 17:36

TImage.Canvas ist direkt vom geladenen Bild (Picture) abhängig. Wenn kein Bild geladen wird, dann ist die Größe des Canvas unveränderlich gleich der Größe von TImage zum Zeitpunkt der Erstllung des Images. :!: NIMM TPainBox :!:

Sebastian Nintemann 13. Okt 2002 17:37

Hui den ersten Beitrag (von sakura) hab ich übersehen :oops:
Ich hab eigentlich TImage genommen da dieses den Inhalt speichert, ich also nicht immer neu zeichnen muss. Aber so wies aussieht ists wohl doch einfacher mit ner PaintBox.
Danke nochmal sakura und Daniel!

Gruß, Sebastian

sakura 13. Okt 2002 17:39

:twisted: Wie, mich übersehen :twisted:


...:cat:...

Sebastian Nintemann 13. Okt 2002 18:03

Naja, direkt auf den Link aus der Benachrichtigungsmail geklickt, Browserfenster zu klein, nicht hochgescrollt... :mrgreen:

Aber noch eine Frage zu TPaintBox:
Ich hab davon vier Stück auf dem Formular, vier Bitmaps die ich beim OnPaint in die entsprechende PaintBox zeichnen muss. Ist es sinnvoller für jede PaintBox einen eigenen OnPaint Event-handler zu schreiben oder für alle MainForm.OnPaint zu nehmen?

Gruß, Sebastian

sakura 14. Okt 2002 09:10

Ich würde einen OnPaint Handler erstellen für die Paint Boxes, aber nicht das OnPaint Ereignis des Forms. Kurzes Beispiel
Code:
procedure BoxesOnPaint(Sender: TPaintBox);
var
  PB: TPaintBox;
  Bmp: TBitmap;
begin
  if Sender = PaintBox1 then begin
    PB := PaintBox1;
    Bmp := Bitmap1;
  end else if Sender = PaintBox2 then begin
    PB := PaintBox2;
    Bmp := Bitmap2;
  end else if Sender = PaintBox3 then begin
    PB := PaintBox3;
    Bmp := Bitmap3;
  end else if Sender = PaintBox4 then begin
    PB := PaintBox4;
    Bmp := Bitmap4;
  end else begin
    ...
    Exit;
  end;
  ...
  PB.Canvas.CopyRect(R, Bmp.Canvas, R); // R = TRect


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