Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - nicht genügend Speicher verfügbar Speichern von Screenshots


Bronstein - Fr 19.01.07 11:30
Titel: nicht genügend Speicher verfügbar Speichern von Screenshots
Ich bekomme immer eine Fehlermeldung:
Für diesen Befehl ist nicht genügend Speicher verfügbar

Woran kann das liegen. Alle Objekte die ich mit create erzeugt habe gebe ich auch mit free wieder frei.

Das Problem tritt immer bei der „OnTimer“ Procedure auf.
Hier starte ich eine Auswertung, die mir Diagramme erstellt. Die Auswertung funktioniert auch noch.
Der Fehler tritt dann auf, wenn ich die Diagramme als Bilder speichern möchte. Das mache ich durch folgenden Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
PageControl1.ActivePageIndex := 0;
    bmp := TBitmap.Create;
    BMP.Assign(frmPMJ.GetFormImage);
    TargetBitmap := TBitmap.Create;
    TargetBitmap.Height := frmPMJ.PageControl1.Height-41;
    TargetBitmap.Width := frmPMJ.PageControl1.Width-26;
    BitBlt(TargetBitmap.Canvas.Handle, 00, frmPMJ.PageControl1.Width, frmPMJ.PageControl1.Height-20, bmp.Canvas.Handle,frmPMJ.PageControl1.Left+12, frmPMJ.PageControl1.Top+33, SRCCOPY);
    TargetBitmap.Canvas.StretchDraw(RECT(00,TargetBitmap.Width, TargetBitmap.Height), TargetBitmap);
    BMP.Free;
    jpg := TJpegImage.Create;
    Jpg.CompressionQuality := 100;
    Jpg.Assign(TargetBitmap);
    Jpg.SaveToFile (ChangeFileExt(Linie[i] + '\' + KW + '_Bauteile''.jpg' ));
    Jpg.Free;
    TargetBitmap.Free;

    PageControl1.ActivePageIndex := 1;
    bmp := TBitmap.Create;
    BMP.Assign(frmPMJ.GetFormImage);
    TargetBitmap := TBitmap.Create;
    TargetBitmap.Height := frmPMJ.PageControl1.Height-41;
    TargetBitmap.Width := frmPMJ.PageControl1.Width-26;
    BitBlt(TargetBitmap.Canvas.Handle, 00, frmPMJ.PageControl1.Width, frmPMJ.PageControl1.Height-20, bmp.Canvas.Handle,frmPMJ.PageControl1.Left+12, frmPMJ.PageControl1.Top+33, SRCCOPY);
    TargetBitmap.Canvas.StretchDraw(RECT(00,TargetBitmap.Width, TargetBitmap.Height), TargetBitmap);
    BMP.Free;
    jpg := TJpegImage.Create;
    Jpg.CompressionQuality := 100;
    Jpg.Assign(TargetBitmap);
    Jpg.SaveToFile (ChangeFileExt(Linie[i] + '\' + KW + '_Ausbringung''.jpg' ));
    Jpg.Free;
    TargetBitmap.Free;


Sinspin - Fr 19.01.07 13:41

schaltest du während der ausführung des timerevents den timer ab?
wenn dem nicht so ist mach das mal!


Bronstein - Do 25.01.07 08:16

Sorry, dass ich mich so spät melde.

Ja, ich schalte den Timer ab.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TfrmPMJ.Timer1Timer(Sender: TObject);
begin
  frmPMJ.Timer1.Enabled := false;
[...]
  frmPMJ.Timer1.Enabled := true;
end;


Woran kann es noch liegen.
Mein Programm führt das OnTimer Ereignis 4 mal aus bei 5 mal bekomme ich den Fehler.