Ich weiß, dass das Aufwärmen alter Themen wenig Freude auslöst, ABER:
Ich habe ca. am 11. November 2010 ein älteres Update in mein TurboDelphi wegen einer kompletten Win-Neuinstallation hinzugefügt.
Bis dahin lief folgender Code:
Delphi-Quellcode:
Function CreateFromScreen: TJPEGImage;
Function SSaverActive: Boolean;
Begin
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @Result, 0);
End;
Begin
Result:=TJPEGImage.Create;
Try
If SSaverActive Then
Begin
// Bildschirmschoner beenden
End;
// hier wird etwas gemacht...
Except
Result.Free;//Bei Fehlern den Speicher freigeben
End;
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
With CreateFromScreen Do
Try
SaveToFile('Wohinauchimmer.jpg');
Finally
Free;
End;
End;
Seither bekomme ich eine Speicherzugriffsverletzung. Es funktioniert
jetzt nur noch so:
Delphi-Quellcode:
Function SSaverActive: Boolean;
Begin
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @Result, 0);
End;
// ^-- Unterfunktion ausgegliedert.
Function CreateFromScreen: TJPEGImage;
Begin
Result:=TJPEGImage.Create;
Try
If SSaverActive Then
Begin
// Bildschirmschoner beenden
End;
// hier wird etwas gemacht...
Except
Result.Free;//Bei Fehlern den Speicher freigeben
End;
End;
Kann mir das bitte mal jemand erklären?
Ich habe 3 Tage daran gesessen, das in meinem mehrere tausend Zeilen umfassenden Projekt herauszufinden. Und es liegt definitiv an der Funktion
SSaverActive
, weil ich alles andere durchgetest habe. Ist das nur ein Phänomen von TurboDelphi oder schlimmer noch von meiner Installation? Komisch ist, dass es auf 2 Rechnern nicht mehr klappt.
Gruß, Alex