Ich habe immernoch das Problem bei .create
Ich beschreibe es etwas vereinfacht, also nicht ganz richtig, aber hoffentlich verständlich: TBitmap ist eine
Klasse, eine Art Blaupause, damit wird nicht direkt gearbeitet. Wenn du damit arbeiten willst, dann erstellst du ein TBitmap
Objekt (eine Art Kopie zum arbeiten). Das machst du mit Create.
Delphi-Quellcode:
var
MyBitmap: TBitmap;
begin
//zuerst das Objekt erstellen
MyBitmap := TBitmap.Create;
//jetzt kann man damit arbeiten, z. B. eine Ellipse uf das Formular zeichnen
MyBitmap.Width := 100;
MyBitmap.Height := 50;
MyBitmap.Canvas.Ellipse(MyBitmap.Canvas.ClipRect);
Form1.Canvas.Draw(200, 200, MyBitmap);
//Zuletzt wieder freigeben, damit der Speicher freigegeben wird
MyBitmap.Free;
end;
Man
sollte
es, es ist aber für die Funktionsweise der Objekten kein Muss, sie in ein try finally Block packen:
Delphi-Quellcode:
var
MyBitmap: TBitmap;
begin
MyBitmap := TBitmap.Create;
try
//hier mit der Bitmap arbeiten
finally
MyBitmap.Free;
end;
end;
Der finally Bereich wird auch dann ausgeführt wenn ein Fehler vorkommt. So ist auf jeden Fall gesichert, dass der Speicher, den das Objekt verbraucht, freigegeben wird. Arbeitet man ohne try finally bleibt der Speicher reserviert und nach paar tausend Fehlern ist der ganze Rechnerspeicher verbraucht.
Wenn du mit der gleichen Bitmap im ganzen Programm arbeiten willst, dann erstelle die Bitmap in OnCreate des Formulars (z. B. TForm1.FormCreate)und gib ihn unter OnDestroy (TForm1.FormDestroy) mit Free frei.