Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#15

AW: Dynamische Variablen bei TImage ?

  Alt 17. Mai 2012, 00:26
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.
  Mit Zitat antworten Zitat