AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Teil einer Webbrowser-Ansicht als JPG speichern

Ein Thema von idefix2 · begonnen am 8. Mai 2016 · letzter Beitrag vom 4. Jul 2016
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 8. Mai 2016, 19:58
Vielen Dank, so funktioniert es tatsächlich wunderbar und denkbar einfach
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#2

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 25. Mai 2016, 11:32
Hallo,

leider gibt es jetzt doch noch ein Problem.
Ich war der Meinung, dass der Canvas ein "virtuelles" Zeichenbrett ist, auf dem die Komponente dargestellt wird. Offensichtlich ist dem aber nicht so, sondern der Canvas entspricht dem, was am Bildschirm aktuell dargestellt wird. Wird ein Teil meines Formlars von einem anderen Programm überdeckt, dann kopiert BitBlt nicht den "virtuellen" Inhalt meines Formulars, sondern das, was gerade am Bildschirm an der Stelle im Vordergrund angezeigt wird.

Gibt es eine Möglichkeit, auf das Bild zuzugreifen, das meine Form anzeigen würde, wenn sie im Vordergrund wäre? Wenn nicht, ist das sehr lästig, weil dann muss das Programm ja ständig im Vordergrund laufen.

Geändert von idefix2 (25. Mai 2016 um 11:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
510 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 25. Mai 2016, 12:06
Hallo,

leider gibt es jetzt doch noch ein Problem.
Ich war der Meinung, dass der Canvas ein "virtuelles" Zeichenbrett ist, auf dem die Komponente dargestellt wird. Offensichtlich ist dem aber nicht so, sondern der Canvas entspricht dem, was am Bildschirm aktuell dargestellt wird. Wird ein Teil meines Formlars von einem anderen Programm überdeckt, dann kopiert BitBlt nicht den "virtuellen" Inhalt meines Formulars, sondern das, was gerade am Bildschirm an der Stelle im Vordergrund angezeigt wird.

Gibt es eine Möglichkeit, auf das Bild zuzugreifen, das meine Form anzeigen würde, wenn sie im Vordergrund wäre? Wenn nicht, ist das sehr lästig, weil dann muss das Programm ja ständig im Vordergrund laufen.
Hmm also bei mir funktioniert es auch wenn ein Fenster drüber liegt, nur wenn man das Fenster explizit minimiert geht es nicht mehr.

Hier mein Testcode:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  LBitmap : TBitmap;
begin
  LBitmap := TBitmap.Create();

  LBitmap.Width := WebBrowser1.Width;
  LBitmap.Height := WebBrowser1.Height;

  bitblt(LBitmap.canvas.Handle, 0, 0, Width,Height, self.canvas.handle, WebBrowser1.Left, WebBrowser1.Top, SRCCOPY);
  LBitmap.SaveToFile('./test.bmp');
  LBitmap.Free;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  webbrowser1.Navigate('http://google.de/?q=' + IntToStr(Random(500)));
end;
Sind halt 2 Timer, der erste ruft BitBlt auf und speichert das Bitmap, der zweite ruft Googlesuchen mit Zahlen zwischen 0 und 500 auf um Veränderungen beim abspeichern sehen zu können.
Also wie gesagt, auch wenn 200 Fenster über dem TWebBrowser liegen funktioniert es ohne Probleme.

Freundliche Grüsse

Edit: Ansonsten könntest du versuchen das Fenster einfach ganz ausserhalb des Sichtbaren Bereichs zu verschieben? Also Quasi Form.Left := -1000; Das klappt bei mir nämlich auch.
Milos

Geändert von milos (25. Mai 2016 um 12:11 Uhr)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 1. Jun 2016, 12:32
Projekt endlich abgeschlossen.
Veranschlagt hatte ich 4 Stunden, geworden sind es etliche Tage.

Javascript ist eine einzige Katastrophe. Während ein snapshot eines normalen Delphiformulars, auch mit TWebbrowser, auch im Hintergrund funktioniert, gilt das nicht, wenn im Browser diese Java Applikation läuft. Ich frage mich, was für Schweinereien das Javascript da aufführt. Ist das Formular mit der Browserkomponente nicht im Vordergrund, dann wird das, was sich am Bidschirm im Vordergrund über der Komponente befindet, ins JPG kopiert, unabhängig vom übertragenen Bild. Schiebt man das Formular zur Seite, sodass das Bild teilweise nicht mehr am Schirm ist, dann ist der nicht am Schirm sichtbare Teil des Bildes im JPG eine weisse Fläche. Nachdem das Ganze auf einem Server instaliert ist, und zu den Zeiten, wo am Server selbst gearbeitet wird, dieses Programm nicht laufen muss, ist es mir und vor allem dem Kunden zum Glück egal. Wie man es lösen könnte, wenn das Programm im Hintergrund laufen soll, habe ich nicht herausgefunden.
Aber es kommt noch schlimmer. Wenn sich jemand per remote Desktop auf den Server verbindet, stört das das Programm nicht, es läuft am virtuellen Desktop weiter. Aber wenn man den remote Desktop wieder schliesst, erscheint am Server der Anmeldebildschirm, und das Javaskript stürzt komplett ab - derart, dass man es nur per Task Manager abschiessen kann, normal schliessen lässt es sich dann nicht. Um das zu umgehen, musste ich den Remote Desktop, mit dem der Kunde bisher auf seinen Server zugegriffen hat, durch VNC ersetzten. Damit funktioniert es.
Die letzte Hürde war noch Java Update, das musste ich auch noch deaktivieren, denn wenn sich das ungefragt gemeldet hat, ist das Javaskript, das das Video anzeigt, und damit mein Programm, ebenfalls komplett abgeschmiert.

pfffft...

Geändert von idefix2 ( 1. Jun 2016 um 12:34 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 1. Jun 2016, 13:09
Hallo,

ich bin jetzt mal ganz naiv:

Dein Programm läuft als Admin und Du meldest Dich per Remotedesktop als Admin an, dann bekommst Du Probleme. (Dergleichen natürlich auch, wenn es ein beliebiger, anderer User ist.)

Was ist denn, wenn Du für Deine Applikation einen eigenen Benutzer anlegst und unter diesem Benutzer läuft nur Deine Applikation und sonst nichts.

Der Benutzer müsste doch dann seinen eigenen Desktop, losgelöst von allem Anderen, was sich so auf dem Server tummelt, haben.

Ließe sich das eventuell einrichten und funktioniert das dann, ohne die von Dir beschriebenen Probleme?
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#6

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 1. Jun 2016, 21:43
Das könnte eine Lösung sein, werde ich noch ausprobieren. Ich weiss nicht, was passiert, wenn am Server ein User angemeldet ist und ein anderer User sich per remote desktop anmeldet - ob dann der Serverschirm auch schwarz wird und bei gleichzeitiger Abmeldung des aktuellen Users auf den virtuellen Desktop "übersiedelt", oder ob er normal weiter läuft und am remote Desktop ein komplett anderer Schirm gezeigt wird.

Im Prinzip läuft es jetzt so, dass der Kunde zufrieden ist, aber ob der Vorschlag funktioniert, möchte ich jetzt auch wissen.

Geändert von idefix2 ( 1. Jun 2016 um 21:46 Uhr)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 6. Jun 2016, 13:46
@nahpets
Habe das jetzt auch ausprobiert - in dem Moment, wo sich ein anderer useranmeldet und das Programm dadurch den physischen Desktop verliert, ist es vorbei.
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#8

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 6. Jun 2016, 16:38
[...] via active-x [...]
[...] Javascript [...] im Browser diese Java Applikation [...]
Das sind jetzt drei verschiedene Technologien, die nichts miteinander zu tun haben. Was macht denn jetzt was bitteschön?
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
510 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 6. Jun 2016, 16:45
[...] via active-x [...]
[...] Javascript [...] im Browser diese Java Applikation [...]
Das sind jetzt drei verschiedene Technologien, die nichts miteinander zu tun haben. Was macht denn jetzt was bitteschön?
Dachte ich mir auch Solltest du das Bild über JavaScript bekommen, sollte es auch kein Problem sein dein Bild direkt in Delphi abzufangen. Ich nehme aber mal an (da du es ja gesagt hast) das irgendeine ActiveX Komponente über JavaScript angesprochen wird, da könnte es schwieriger werden.

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#10

AW: Teil einer Webbrowser-Ansicht als JPG speichern

  Alt 6. Jun 2016, 18:35
Active-x war Unsinn, sorry. Das Live-Bild wird im Browser mit Javascript dargestellt.

Wie ich so etwas direkt in Delphi abfangen könnte, dazu habe ich allerdings überhaupt eine Vorstellung. Das Skript wird offenbar vom Kameraserver geladen und empfängt dann den Videostream.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz