AGB  ·  Datenschutz  ·  Impressum  







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

Fenster sichtbar machen

Ein Thema von idefix2 · begonnen am 1. Apr 2017 · letzter Beitrag vom 3. Apr 2017
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 01:24
Ein Programm soll periodisch eine Webcam überwachen, und damit das funktioniert, muss das entsprechende Fenster im Vordergrund sichtbar sein (Das Programm läuft auf einem File Server, auf dem normalerweise nicht gearbeitet wird, also stört das nicht wirklich).
Machst du etwas Screenshots von der Kamera Software oder wie?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
idefix2

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

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 03:16
Ich kann über eine URL direkt ein JPG von der Kamera abrufen. Das jpg wird dann in einer TWebBrowser Komponente angezeigt. Damit das funktioniert, muss das Formular mit dem TWebbrowser im Vordergrund sichtbar sein.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 04:09
Und warum holst du es dir nicht über eine HTTP-Komponente und einem Download direkt in dein Programm?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 07:50
Zitat:
Wenn das Programmicon in der Taskleiste von Hand angeklickt wird, wird das Formular sofort angezeigt, und dann funktioniert auch wieder alles andere
Wie ich auch schon sagte. Du brauchst den Focus.

Zitat:
Genau das müsste aber doch eigentlich durch windowstate:=wsnormal; erreicht werden, oder?
Ja wenn du den Focus hast.

Frage?
Wenn du eine Taste für deine Anwendung registrierst und dann versuchst mit dieser deine Anwendung wieder zu maximieren was passiert wenn diese keinen Focus hat? Gar nichts!
Lösung!
Das bedeutet du benötigst eine Callback (oder einen Hook) von einer externen Anwendung DLL oder was auch immer die den Status deiner Anwendung überprüft.

Diese sendet dann ein ShowWindow wenn diese Minimiert wurde und das war's dann schon.
Deine Anwendung selbst kann das nicht.

Zitat:
Das wäre eine (Not)lösung. Allerdings ist mir auch nicht klar wie ich verhindern kann, dass ein Fenster minimiert wird
Ein Dialog Window erstellen?
Das kannst du dann weder resizen noch Minimieren.
Aber letztendlich wirst du über einen Hook nicht drum rum kommen da du ja auch den Vordergrund Status prüfen musst.

gruss

Geändert von EWeiss ( 2. Apr 2017 um 08:00 Uhr)
  Mit Zitat antworten Zitat
idefix2

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

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 10:37
Und warum holst du es dir nicht über eine HTTP-Komponente und einem Download direkt in dein Programm?
Das ganze sollte eine einfache, schnelle (und billige) Lösung für einen Kunden sein. Das ganze Programm hat gerade mal 250 Zeilen, inkl. Kommentaren und Kontrollausgaben. Und nachdem das Programm am Server läuft, stört es nicht, wenn es im Vordergrund bleibt. Ich habe mir nicht angeschaut, wie ich aus dem HTTP Stream der Seite das jpg herausfiltern könnte, aber ich bin davon ausgegangen, dass das herausfinden, wie das geht, mich deutlich mehr Zeit kosten würde als diese simple Lösung. Wenn ich mit den absurden Komplikationen gerechnet hätte, wäre ich wahrscheinlich so vorgegangen, wie du hier vorschlägst. Schon dass das Fenster im Vordergrund sein muss, damit ich den Canvas kopieren kann, war eine üble Überraschung. Bei anderen visuellen Komponenten gibt es die Einschränkung nicht.


Ein Dialog Window erstellen?
Das kannst du dann weder resizen noch Minimieren.
Aber letztendlich wirst du über einen Hook nicht drum rum kommen da du ja auch den Vordergrund Status prüfen musst.
Das Programm in den Vordergrund zu bringen funktioniert mit dem Codeschnipsel von a.def http://www.swissdelphicenter.com/de/showcode.php?id=261
Wie mache ich aus einer normalen Form ein nicht minimierbares Fenster?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 10:45
Tja, und mittlerweile ist es durch das hausgemachte Problem mit der Screenshotkrücke wohl erheblich teurer geworden und funktioniert nicht zuverlässig. Und der Download mit einer HTTP-Komponente ist auch nicht viel komplexer. Eher wahrscheinlich das Gegenteil und zudem dürfte es zuverlässiger funktionieren.

Link: https://www.delphi-treff.de/tipps-tr...herunterladen/

Copy and paste und schon fast fertig. Inklusive Anpassung für den Kunden 2 oder 3 Stunden.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 2. Apr 2017 um 11:00 Uhr)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#17

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 10:57
Du schreibst du holst alle paar Minuten ein Bild und dann wird ein Timer aktiviert.
Aber dieses "alle paar Minuten"... ist das nicht auch ein Timer? Oder noch schlimmer. Ein Sleep?

Mit "Ausgelastet" meinte ich keine 100% Auslastung sondern einfach nur, dass der Hauptthread blockiert wird.
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#18

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 11:01
Mit XE7, WIN8.1 geht folgender Test-Code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure SetCursorToControl(Control: TControl);
var P: TPoint;
begin
  P.X := Control.Width div 2;
  P.Y := Control.Height div 2;
  P := Control.ClientToScreen(P);
  SetCursorPos(P.X, P.Y);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled:= TRUE;
  Button1.Enabled:= FALSE;
  Self.WindowState:= wsMinimized;
end;

procedure TForm1.Timer1Timer(Sender: TObject); // interval:= 10000;
begin
  Timer1.Enabled:= FALSE;
  Button1.Enabled:= TRUE;

  Application.BringToFront; //Setzt das zuletzt aktive Fenster auf dem Desktop in den Vordergrund
  Self.WindowState:= wsNormal; // besser als: Application.Restore;

  SetCursorToControl(self);
  mouse_event(MOUSEEVENTF_LEFTDOWN, 50, 50, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, 50, 50, 0, 0);
end;

end.
Source + EXE hinzugefügt
Angehängte Dateien
Dateityp: zip BringToFront.zip (917,3 KB, 4x aufgerufen)

Geändert von t.roller ( 2. Apr 2017 um 11:15 Uhr)
  Mit Zitat antworten Zitat
idefix2

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

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 11:37
Tja, und mittlerweile ist es durch das hausgemachte Problem mit der Screenshotkrücke wohl erheblich teurer geworden und funktioniert nicht zuverlässig. Und der Download mit einer HTTP-Komponente ist auch nicht viel komplexer. Eher wahrscheinlich das Gegenteil und zudem dürfte es zuverlässiger funktionieren.

Link: https://www.delphi-treff.de/tipps-tr...herunterladen/

Copy and paste und schon fast fertig. Inklusive Anpassung für den Kunden 2 oder 3 Stunden.
Das Problem ist, dass ich keine "Datei" herunterladen kann. Wenn es eine Download-URL für das Bild selbst geben würde, hätte ich das natürlich so gemacht. Aber die gibt es nicht. Der Webserver der Kamera lädt in meinen Browser ein Javaskript, das einen Video-Stream (oder eben alternativ statt des bewegten Live-Streams nur ein Frame des Streams) am Bildschirm anzeigt.

Und das "hausgemachte" Problem war zu Beginn überhaupt nicht absehbar. Von einer normalen Form kann ich jederzeit eine Kopie eines Teils des Canvas machen, auch wenn die Form gerade nicht am Bildschirm sichtbar ist. Alle Schwierigkeiten haben damit begonnen, dass das in diesem Fall nicht funktioniert. Das konnte ich im voraus nicht wissen.

Geändert von idefix2 ( 2. Apr 2017 um 11:41 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 11:56
Zitat:
Wie mache ich aus einer normalen Form ein nicht minimierbares Fenster?
BorderStyle? bsDialog

gruss

Geändert von EWeiss (11. Jul 2019 um 16:47 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 23:15 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