Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   ein Video der letzten 10 Sekunden erzeugen (https://www.delphipraxis.net/208450-ein-video-der-letzten-10-sekunden-erzeugen.html)

freimatz 30. Jul 2021 12:42

ein Video der letzten 10 Sekunden erzeugen
 
Woanders:
Zitat:

Zitat von dataspider (Beitrag 1492977)
...
Wenn MadExcept statt einen Screenshot ein Video der letzten 10 Sekunden erzeugen würde, wäre die Fehlersuche leichter:lol:
Frank

Irgendwie finde ich das nicht lustig sondern eine geniale Idee. Könnte man so was nicht implementieren?
Das in madExcept dann einbauen wäre (für mich) dann das kleinste Problem.

Union 30. Jul 2021 12:46

AW: ein Video der letzten 10 Sekunden erzeugen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, genial. Dann kriegt man automatisch in den meisten Fällen sicher meist so etwas:

Daniel 30. Jul 2021 13:27

AW: ein Video der letzten 10 Sekunden erzeugen
 
Da es mit den Zeitreisen etwas schwierig ist, musst Du ja permanent mitfilmen - was beim Anwender vielleicht ein paar Fragen aufwerfen könnte. Auch wenn Du das Material nach 10 Sekunden ohne Fehlermeldung wieder verwirfst.
Davon aber mal abgesehen:
Windows 10 1903 bringt hierfür eine neue API ("WindowsGraphicsCapture") mit, die auch Video-Overlays und anderes Gelump tadellos erfasst. Ich habe mit einem Demo-Programm getestet, welches diese API implementiert und war durchaus angetan. Es ist eine native API, man müsste da grundsätzlich auch mit Delphi herankommen - aber ich konnte mich bisher nicht damit befassen.

Delphi.Narium 30. Jul 2021 14:32

AW: ein Video der letzten 10 Sekunden erzeugen
 
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 ;-)

Uwe Raabe 30. Jul 2021 15:16

AW: ein Video der letzten 10 Sekunden erzeugen
 
Einen Screenshot des aktuellen Desktops bzw. der Anwendung macht madexcept doch sowieso schon, wenn man es denn aktiviert hat.

Uwe Raabe 30. Jul 2021 15:29

AW: ein Video der letzten 10 Sekunden erzeugen
 
Leider gibt es das in den aktuellen Versionen ja nicht mehr, aber bis Version 10.30 gab es bei TestComplete noch den TestRecorder:
Zitat:

TestRecorder allows you to embed the recording capability into your applications. The recorded scripts are fully compatible with TestComplete. Later they can be run in TestComplete or in TestExecute.
Im Programm konnte der User diesen aktivieren und uns die Aufzeichnung schicken. Das war nicht nur deutlich kompakter als ein Video, sondern war häufig auch schon als (halb-)automatischer Test zu gebrauchen. Das fände ich noch hilfreicher als ein Video der letzten 10 Minuten.

Der schöne Günther 30. Jul 2021 16:18

AW: ein Video der letzten 10 Sekunden erzeugen
 
Zitat:

Zitat von Daniel (Beitrag 1493005)
Windows 10 1903 bringt hierfür eine neue API ("WindowsGraphicsCapture") mit, die auch Video-Overlays und anderes Gelump tadellos erfasst. Ich habe mit einem Demo-Programm getestet, welches diese API implementiert und war durchaus angetan.

Hatte damit auch mal etwas gespielt, aber das Projekt bis heute leider nicht fertig bekommen. Das Bildschirm-Abgreifen an sich hat allerdings sehr gut und sehr performant funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz