Delphi-Version: 6
Richtiger Umgang mit mehreren gleichen TPictures
Hi!
Ich möchte mal um eure Hilfe bitten bei folgendem Szenario: Ich habe mehrere TImages, die alle dasselbe Bild anzeigen sollen. 1. Wenn ich nun einfach "Image[i].Picture.Assign(Quellpicture)" benutze, wird vermutlich für jedes meiner Images das Quellpicture im Speicher kopiert, d.h. ich belege unnötig viel Speicher, oder? 2. Ist es die bessere Lösung, es per "Image[i].Picture := Quellpicture" zu realisieren? (Bisher dachte ich, das würde Speicherlecks erzeugen, aber sowohl FastMM als auch http://www.delphipraxis.net/148401-b...-loeschen.html widersprechen dem) 3. Wo liegt dann überhaupt der Unterschied von "TImage.Picture := ..." gegenüber "TImage.Picture.Assign(...)"? Beste Grüße! Robert EDIT: Klarer formuliert ;-) |
AW: Richtiger Umgang mit mehreren gleichen TPictures
Zitat:
Jedes TImage trägt sein eigenes, unabhängiges TPicture in sich. Wenn du den Resourcenverbrauch nicht möchtest, müsstest du auf mehrere TPaintboxen ausweichen. |
AW: Richtiger Umgang mit mehreren gleichen TPictures
Bei Fall von TPicture gibt es keinen Unterschied, da dort
Delphi-Quellcode:
auf
.Picture := ...;
Delphi-Quellcode:
umleitet wird,
.Picture.Assign(...);
aber bei anderen Klassen sollte man aufpassen, da es doch einen Unterschied geben kann. |
AW: Richtiger Umgang mit mehreren gleichen TPictures
Okay, vielen Dank schonmal für die Klarstellung und den Tip mit den TPaintboxes. Leider funktioniert das noch nicht so, wie ich mir das vorstelle. Ich mache es folgendermaßen:
Delphi-Quellcode:
Das Problem ist, dass die Grafik trotzdem nirgends zu sehen ist... Die Delphi-Hilfe hilft mir leider auch nicht weiter. Was mache ich denn da falsch?
{diese Prozedur wird vor Form1.Show aufgerufen}
var APicture: TPicture; begin {FPaintbox ist private Variable vom Typ TPaintbox innerhalb TForm1} FPaintbox := TPaintbox.Create(Self); FPaintbox.Parent := Self; FPaintbox.Height := ...; FPaintbox.Width := ...; FPaintbox.Top := ...; FPaintbox.Left := ...; APicture := TPicture.Create; APicture.LoadFromFile(<Datei>.jpg); FPaintbox.Canvas.Draw(0, 0, APicture.Graphic); FreeAndNil(ATPicture); end; |
AW: Richtiger Umgang mit mehreren gleichen TPictures
Okay, hat sich erledigt - Delphi-Hilfe hat doch geholfen ;-)
Einfach das .Canvas.Draw(...) ins OnPaint-Event der Paintbox... Gruß! Robert |
AW: Richtiger Umgang mit mehreren gleichen TPictures
Zitat:
Delphi-Quellcode:
ins OnCreate der Form oder wo auch immer du APicture verwalten willst.
APicture := TPicture.Create;
Delphi-Quellcode:
dementsprechend z.B. ins OnDestroy.
ATPicture.Free;
Delphi-Quellcode:
im OnPaint der PaintBox.
FPaintBox.Canvas.Draw(0, 0, APicture.Graphic);
Delphi-Quellcode:
könnte man einmal machen im OnCreate machen.
APicture.LoadFromFile('<Datei>.jpg');
Und dann überall nur noch der Paintbox sagen, wenn sie bzw. ihr internes Picture neue Daten bekommen hat, daß sie sich neu szeichen soll:
Delphi-Quellcode:
APicture.LoadFromFile('<Datei>.jpg');
FPaintBox.Repaint; |
AW: Richtiger Umgang mit mehreren gleichen TPictures
Beschäftigst Du dich mit diesen Fragen eigentlich BEVOR oder NACHDEM Du alle anderen Fehler und Macken in deiner Anwendung beseitigt hast?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 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