![]() |
stretch-Informationen in TGraphic-Object
hallo,
ich habe folgendes Problem: ich möchte eine TGraphic-Komponente schreiben, mit deren Hilfe ich SVG-Grafiken in einem TImage-Objekt anzeigen kann. Das funktioniert soweit auch ganz gut allerdings, allerdings finde ich auf TGraphic-Ebene keinen Zugriff auf die Stretchinformationen des beinhaltenden TImage (oder TPaintbox oder was auch immer)-Objekt. Diese Information benötige ich aber um zu entscheiden, ob die SVG-Grafik hoch oder runterskaliert werden soll oder in Original-Größe angezeigt werden soll. Kann mir jemand helfen, wie ich in der Draw-Funktion von TGraphic an die Informationen gelange, ob das beinhaltende TImage-Objekt gestretched gezeichnet werden soll? Vielleicht ist diese Information ja irgendwie in den Parametern der Funktion "TGraphic.Draw(ACanvas: TCanvas; const Rect: TRect)" verborgen. Vielen Dank für Eure Hilfe, flippinho
Delphi-Quellcode:
procedure TRSVG_Graphic.Draw(ACanvas: TCanvas; const Rect: TRect);
begin if FExportPRsvgHandle <> nil then begin Export_rsvg_handle_render_cairo(FExportPRsvgHandle, ACanvas.handle, point(Rect.Right-Rect.Left,Rect.Bottom-Rect.Top), true ); // Stretch ja oder nein ?? end; end; |
Re: stretch-Informationen in TGraphic-Object
Ich denke, du musst TGraphics um diese Eigenschaft erweitern. In der TGraphics weißt du doch gar nichts von TImage und daher auch nicht von deren Strech-Eigenschaft. Wenn du den Source der VCL hast kannst du ja schauen, was TImage intern macht und wo sich die Strech-Eigenschaft überall auswirkt.
Ich könnte mir da gut vorstellen, dass bei der Draw-Methode nicht die original Ausmaße des Bildes übergeben werden, sondern die Größe des TImage selbst. |
Re: stretch-Informationen in TGraphic-Object
Hallo,
danke für die Antwort S.h.a.r.k, ich glaube ich habe mittlerweile die Lösung zu dem Problem: An dem Parameter "Rect" der "TGraphic.Draw(ACanvas: TCanvas; const Rect: TRect)"-Funktion kann man anscheinend erkennen, ob das TImage gestretched gezeichnet werden soll; Wenn das TImage nicht gestretched gezeichnet werden soll, entspricht die Größe von "Rect" anscheinend immer der Orginalgrösse der zu zeichnenden Grafikdatei. falls ich nicht irgendwas übersehen habe denke ich ist das Problem gelöst. schöne Grüsse, flippinho
Delphi-Quellcode:
procedure TRSVG_Graphic.Draw(ACanvas: TCanvas; const Rect: TRect);
var lStretch : Boolean; begin if (Rect.Right-Rect.Left = GetWidth) and (Rect.Bottom-Rect.Top = GetHeight) then begin lStretch := false; end else begin lStretch := true; end; if FExportPRsvgHandle <> nil then begin Export_rsvg_handle_render_cairo(FExportPRsvgHandle, ACanvas.handle, point(Rect.Right-Rect.Left,Rect.Bottom-Rect.Top), lStretch ); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 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