AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Richtiger Umgang mit mehreren gleichen TPictures

Richtiger Umgang mit mehreren gleichen TPictures

Ein Thema von Rob09 · begonnen am 4. Jun 2011 · letzter Beitrag vom 5. Jun 2011
Antwort Antwort
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#1

Richtiger Umgang mit mehreren gleichen TPictures

  Alt 4. Jun 2011, 15:55
Delphi-Version: 6
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Richtiger Umgang mit mehreren gleichen TPictures

  Alt 4. Jun 2011, 17:39
3. Wo liegt dann überhaupt der Unterschied von "TImage.Picture := ..." gegenüber "TImage.Picture.Assign(...)"?
Da gibt es keinen Unterschied; intern wird auch bei der direkten Zuweisung Assign() aufgerufen.
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.306 Beiträge
 
Delphi 12 Athens
 
#3

AW: Richtiger Umgang mit mehreren gleichen TPictures

  Alt 4. Jun 2011, 17:50
Bei Fall von TPicture gibt es keinen Unterschied, da dort.Picture := ...; auf .Picture.Assign(...); umleitet wird,
aber bei anderen Klassen sollte man aufpassen, da es doch einen Unterschied geben kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#4

AW: Richtiger Umgang mit mehreren gleichen TPictures

  Alt 4. Jun 2011, 18:17
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:
{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;
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?
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#5

AW: Richtiger Umgang mit mehreren gleichen TPictures

  Alt 4. Jun 2011, 18:56
Okay, hat sich erledigt - Delphi-Hilfe hat doch geholfen

Einfach das .Canvas.Draw(...) ins OnPaint-Event der Paintbox...

Gruß!
Robert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.306 Beiträge
 
Delphi 12 Athens
 
#6

AW: Richtiger Umgang mit mehreren gleichen TPictures

  Alt 4. Jun 2011, 22:09
Einfach das .Canvas.Draw(...) ins OnPaint-Event der Paintbox...
Man braucht es auch nur dort.

APicture := TPicture.Create; ins OnCreate der Form oder wo auch immer du APicture verwalten willst.
ATPicture.Free; dementsprechend z.B. ins OnDestroy.
FPaintBox.Canvas.Draw(0, 0, APicture.Graphic); im OnPaint der PaintBox.
APicture.LoadFromFile('<Datei>.jpg'); könnte man einmal machen im OnCreate machen.
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#7

AW: Richtiger Umgang mit mehreren gleichen TPictures

  Alt 5. Jun 2011, 06:48
Beschäftigst Du dich mit diesen Fragen eigentlich BEVOR oder NACHDEM Du alle anderen Fehler und Macken in deiner Anwendung beseitigt hast?
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 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