AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi function xyz:tbitmap - wie Speicher freigeben?
Thema durchsuchen
Ansicht
Themen-Optionen

function xyz:tbitmap - wie Speicher freigeben?

Ein Thema von ichbins · begonnen am 17. Aug 2005 · letzter Beitrag vom 17. Aug 2005
Antwort Antwort
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#1

function xyz:tbitmap - wie Speicher freigeben?

  Alt 17. Aug 2005, 14:14
Hallo, ich habe eine Funktion, die einen String in ein Bitmap konvertiert (einzelne Buchstaben sind in einem externen Bitmap gespeichert und werden zu dem String zusammengefügt). Die Funktion liefert direkt als Result eine TBitmap zurück. Bis jetzt verwende ich das dann folgendermaßen (getfontstring ist die Funktion):

canvas.stretchdraw(rect(100,100,500,300),getfontstring('Menü')); //Nur ein Beispiel Jetzt habe ich nur das Problem, das ich den Speicher für die Bitmap im Result nicht wieder freigeben kann und sich das Programm nach einiger Zeit aufhängt, weil es keinen Speicher mehr hat (in einem Timer wird immer wieder die Funktion aufgerufen). Weiss jemand, was ich da tun soll? Gibt es irgendeine Funktion um verlorengegangenen Speicher zu suchen und freizugeben, die ich beim nächsten Start der Funktion aufrufen kann?
Michael Enßlin
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: function xyz:tbitmap - wie Speicher freigeben?

  Alt 17. Aug 2005, 14:19
Zitat von ichbins:
Weiss jemand, was ich da tun soll?
Ja. Gib den speicher selbst frei

Delphi-Quellcode:
bmp := getfontstring('Menü');
canvas.stretchdraw(rect(100,100,500,300),bmp );
bmp.Free;
Zitat von ichbins:
Gibt es irgendeine Funktion um verlorengegangenen Speicher zu suchen und freizugeben, die ich beim nächsten Start der Funktion aufrufen kann?
Da mußt du bei Delphi.Win32 schon selbst dafür sorgen. Erst unter .NET kannst Du dich größtenteils auf die Garbage-Collection verlassen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: function xyz:tbitmap - wie Speicher freigeben?

  Alt 17. Aug 2005, 14:25
Ich glaube jetzt habe ich selbst eine Lösung gefunden:

Ich nehme eine globale TBitmap-Variable, speichere in der Funktion das neue Bitmap in diese Variable und gebe nicht ein TBitmap zurück, sondern einen Pointer, der auf die Variable zeigt. Dann muss ich den Code nur leicht ändern. Beim nächsten Aufruf der Font-Funktion wird dann einfach der alte Inhalt der Variable überschrieben.
Michael Enßlin
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: function xyz:tbitmap - wie Speicher freigeben?

  Alt 17. Aug 2005, 14:27
Und warum läßt du den Text nicht direkt in das Bild reinschreiben?

DrawFontString(canvas, 100, 100, 'Menü') oder so ähnlich...



[add]
aber das BitMap in der Globalen muß doch auch freigegeben werden!
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#5

Re: function xyz:tbitmap - wie Speicher freigeben?

  Alt 17. Aug 2005, 14:31
@himitsu [ADD]: Ja, aber die globale Variable existiert nur 1 mal und wird beim nächsten Aufruf wieder überschrieben. Das Programm stürzt auch erst nach 5 Minuten ab, während denen ein 200ms Timer ständig den Screen mit wasweissich wie vielen Textstücken aktualisiert.
Michael Enßlin
  Mit Zitat antworten Zitat
Antwort Antwort


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:02 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