AW: Wie verwendet man die neue TVirtualImageList
Stimmt. SetGraphic macht ein Assign.
Delphi-Quellcode:
img := Images.GetScaledImage(Images.GetIndexByName('krankenwagen'), Image3.Width, Image3.Height); // img: TWICImage;
try Image3.Picture.Graphic := img; finally img.Free; end; |
AW: Wie verwendet man die neue TVirtualImageList
Ist es möglich img als var Parameter dem Aufruf mitzugeben um Zeilen zu sparen?
Weil ich ändere die Bilder öfter und nicht nur zum Programmstart.
Delphi-Quellcode:
procedure TImageCollectionHelper.GetScaledImage(AIndex, AWidth, AHeight: Integer; var Graphic: TGraphic);
var Img: TWICImage; begin Img := GetScaledImage(GetSourceImage(AIndex, AWidth, AHeight), AWidth, AHeight); try Graphic := Img; finally Img.Free; end; end; |
AW: Wie verwendet man die neue TVirtualImageList
Da Graphic ein Property ist, kann man das nicht als var-Parameter übergeben. Allerdings kann man noch einen anderen Class Helper schreiben:
Delphi-Quellcode:
type
TImageHelper = class helper for TImage public procedure UpdateImage(Source: TImageCollection; Index: Integer); overload; procedure UpdateImage(Source: TImageCollection; const AName: string); overload; end; procedure TImageHelper.UpdateImage(Source: TImageCollection; Index: Integer); var img: TWICImage; begin img := Source.GetScaledImage(Index, Width, Height); try Picture.Graphic := img; finally img.Free; end; end; procedure TImageHelper.UpdateImage(Source: TImageCollection; const AName: string); begin UpdateImage(Source, Source.GetIndexByName(AName)); end; ... Image3.UpdateImage(Images, 'krankenwagen'); ... |
AW: Wie verwendet man die neue TVirtualImageList
Moin Moin.
Etwas verspätet wieder am Platz, aber mein Router war abgeraucht. Ich bedanke mich ebenfalls für die Antwort(en) und Hinweise. creehawk |
AW: Wie verwendet man die neue TVirtualImageList
Zitat:
selbst wenn es das würde, dann wäre es Fatal die kopierte Referenz (Img) sofort freizugeben, und da es nicht möglich ist einen Property zu übergeben, sondern nur den wert aus/für dessen Getter oder Setter, ist VAR hier sowieso nutzlos. Du kannst aber TPicture als Parameter übergeben und darüber auf den Setter des Picture.Graphic zugreifen, oder z.B. wie im schon gezeigten ClassHelper, an TImage oder auch an TPicture, das .Graphic in der Methode benutzen. |
AW: Wie verwendet man die neue TVirtualImageList
Zitat:
Hast du schon mal in quality.embarcadero.com nachgeschaut ob die dort auch schon jemand gestellt hat? Falls nicht wäre es toll, wenn du das dort als Feature Request eintragen könntest und uns hier dann die Report Nummer verrätst, damit wir dafür stimmen können. Grüße TurboMagic |
AW: Wie verwendet man die neue TVirtualImageList
Gibt es sowas auch für Icon? Ich versuche mich hier gerade wieder dumm und dämlich.
Ich habe das aktuell so
Delphi-Quellcode:
type
TImageHelper = class helper for TImage public procedure GetImage(Source: TImageCollection; Index: Integer); overload; procedure GetImage(Source: TImageCollection; const AName: string); overload; end; type TImageCollectionHelper = class helper for TImageCollection public function GetScaledImage(AIndex, AWidth, AHeight: Integer): TWICImage; overload; end; implementation procedure TImageHelper.GetImage(Source: TImageCollection; Index: Integer); var img: TWICImage; begin img := Source.GetScaledImage(Index, Width, Height); try Picture.Graphic := img; finally img.Free; end; end; procedure TImageHelper.GetImage(Source: TImageCollection; const AName: string); var Index: Integer; begin Index := Source.GetIndexByName(AName); if Index > -1 then GetImage(Source, Index); end; function TImageCollectionHelper.GetScaledImage(AIndex, AWidth, AHeight: Integer): TWICImage; begin Result := GetScaledImage(GetSourceImage(AIndex, AWidth, AHeight), AWidth, AHeight); end; |
AW: Wie verwendet man die neue TVirtualImageList
Etwas weiter vorne war die Frage nach der Transparenz aufgekommen aber bisher nicht beantwortet. Wenn ich ein Bitmap aus der virtualcollection ziehe, dann werden die transparenten Bereiche schwarz gezeichnet (ich zeichne hier ein Symbol in ein Stringgrid).
Carsten |
AW: Wie verwendet man die neue TVirtualImageList
Falls hierzu mal wieder jemand knobelt:
Bitmap.alphaformat:=afDefined; muss man beim TBitmap setzen, bevor man es zeichnet. Geht zumindest für meine PNG-Dateien mit transparentem Hintergrund, die in einer VirtualImagelist einsortiert sind. Carsten |
AW: Wie verwendet man die neue TVirtualImageList
Zitat:
Genau wie die VirtualImageLists auf Ende auch nur Raster-Bitmaps sind. Aber FMX Images basierten schon auf "MultiBitmaps", welche sinngemäß den VirtualImageLists entsprechen, um genau diese HighDPI und "Retina" Probleme abzufangen. Das gab es schon standardmäßig als VCL noch gar nichts mit DPI anzufangen wusste :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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