Muss es denn direkt ein Video sein?
Hiermit kannst Du ja schonmal ein Bildschirmfoto des angegebenen Formulars machen.
Delphi-Quellcode:
procedure HardCopy(sJpegFile : String; fm : TForm);
Var
FStream : TStream;
FBmp : TPicture;
FJpeg : TJpegImage;
begin
if SysUtils.FileExists(sJpegFile) then SysUtils.DeleteFile(sJpegFile);
FStream := TFileStream.Create(sJpegFile,fmCreate);
fm.WindowState := wsNormal;
fm.Show;
fm.Refresh;
FJpeg := TJpegImage.Create;
FBmp := TPicture.Create;
try
FBmp.Bitmap.Assign(fm.GetFormImage);
FJpeg.Assign(FBmp.Bitmap);
FJpeg.SaveToStream(FStream);
finally
FStream.Free;
FJpeg.Free;
FBmp.Free;
end;
end;
Wenn man jetzt hergeht und die Fehlerbehandlung der Routine, die Ursprung der Idee war, anpasst
Delphi-Quellcode:
procedure TRWForm.doMouseActivate(AControl: TControl);
begin
if (
not WinControlValid(Self))
or IsDestroying
then
Exit;
FLastClickedControl := AControl;
if (Self <> rwScreen.ActiveForm)
then
begin
try
if (Visible
and CanFocus)
then
SetFocus;
// Hier wird Exception ausgelöst!
rwScreen.ActiveForm := Self;
except
on e :
Exception do begin
MessageDlg(e.
Message,mtError,[mbOk],0);
// <- könnte man auch weglassen.
if Assigned(Self)
and (Self
is TForm)
then begin
HardCopy('
Einen eindeutigen Dateinamen erstellen, Datum Uhrzeit, GUID oder sowas.', Self);
// Sinnvollerweise sollte man dann hier auch noch e.Message in eine Logdatei ...
// schreiben und dabei direkt vermerken, welches Bild zur Fehlermeldung gehört.
end;
end;
end;
end;
end;
könnte man zumindest schonmal ein Bisserl von dem sehen, was da gerade so auf dem Bildschirm los war.
Ist's kein TForm, so könnte man die Kette der Parents nach oben laufen, bis man was vom Typ TForm findet.
Oder, man macht einfach Hardcopys von allen Formularen:
Delphi-Quellcode:
for i := 0 to Screen.FormCount - 1 do begin
sJPeg := Format('%s.Error.Jpg',[Screen.Forms[i].Name]);
HardCopy(sJPeg, Screen.Forms[i]);
end;
Man könnte aber auch z. B. alle x Sekunden per Timer auf diese Art ein Bild machen und davon dann die letzten 10 (oder so) erhalten und jeweils die älteste Datei überschreiben. Beim Programmende wird dann auch dort aufgeräumt. (Frei nach dem Motto: Überwachungskameras zeichnen ja (zum Teil) auch nur alle paar Sekunden ein Bild auf und die Aufnahme werden nach 'ner Weile wieder gelöscht.)
Per Dialog oder Konfiguration könnte man auch den Anwender fragen, ob man im Fehlerfalle Bildschirmfotos erstellen darf ..., wenn nicht, dann lässt man es halt.
Achso: Alles nur unausgegorene Ideen, aber eventuell kannst Du damit ja was anfangen