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
Benutzerbild von Luckie
Luckie

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

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 09: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 10:00 Uhr)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#2

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 09: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
 
#3

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 10: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 10:15 Uhr)
  Mit Zitat antworten Zitat
idefix2

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

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 12:01
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.
Nein, ich habe geschrieben:
Zitat:
Alle Minuten wird ein neues Bild geholt und untersucht. Das wird über einen Timer aktiviert, in der Wartezeit, bis der Timer ausgelöst wird, passiert nichts.
Dass es nicht an einem blockierten Hauptthread liegt (was schon deshalb nicht sein kann, weil der in der Zeit NICHTS tut), ist auch daran zu erkennen, dass über einen Klick auf das Programmicon in der Taskleiste das Formular sofort sichtbar wird.

Zitat:
Wie mache ich aus einer normalen Form ein nicht minimierbares Fenster?
BorderStyle? bsDialog
Danke, ich denke, damit ist das Problem gelöst.

Mit XE7, WIN8.1 geht folgender Test-Code:
...
Seltsam: Das EXE funktioniert, aber wenn ich den Code in mein Programm einbaue, funktioniert es nicht. Ich kann es mir zwar nicht so recht vorstellen, aber könnte es einen Unterschied ausmachen, ob das Programm sich selbst minimiert hat, wie in deinem Beispiel, ober ob das Programm manuell per Klick auf den Minimieren-Button durch den Programmbenutzer minimiert wurde?

Leider lässt sich dein Projekt mit meinem Delphi 2009 nicht kompilieren, ich bekomme die Fehlermeldung
Code:
[MSBuild Fehler] 0 ist ein ungültiger Wert für den DebugInformation-Parameter der DCC-Aufgabe. Der DebugInformation-Parameter gehört zum System.Boolean-Typ.
Funktioniert das Restore des Fensters in denem Beispielprogramm immer noch, wenn du in der Button1Click Routine die Zeile Self.WindowState:= wsMinimized; herausnimmst und statt dessen nach dem Klick auf den Button das Fenster manuell minimierst?

Geändert von idefix2 ( 2. Apr 2017 um 12:04 Uhr)
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#5

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 13:51
Funktioniert das Restore des Fensters in denem Beispielprogramm immer noch, wenn du in der Button1Click Routine die Zeile Self.WindowState:= wsMinimized; herausnimmst und statt dessen nach dem Klick auf den Button das Fenster manuell minimierst?
Wenn ich manuell minimiere mit dem Anklicken des BorderIcons biMinimize funktioniert es auch.

Hinweis: Der mouse_event darf NICHT über dem Element erfolgen (im Beispiel Button1), das den Test ausgelöst hat, weil sonst gleich ein neuer Test ausgelöst wird (Kettenreaktion).
Evtl. mouse_event-Parameter ändern oder Button1 verschieben.

Wegen Debugger: Starte die Compilation versuchsweise mal mit
Umsch+Strg+F9.

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

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

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 23:05
Wenn ich manuell minimiere mit dem Anklicken des BorderIcons biMinimize funktioniert es auch.
Wirklich seltsam. Es wären doch etliche Anpassungen in deinem Beispielprogramm zu machen, damit es kompiliert, die ganzen Unitnamen passen ja auch nicht. Wenn ich mehr Zeit habe, spiele ich mich damit noch (und werde hier zurückmelden, was ich gefunden habe), weil ich verstehe überhaupt nicht, was bei meinem Programm schuld daran sein könnte, dass genau der gleiche Code, der im Beispielprogramm funktioniert, bei mir nicht geht. Aber jetzt kann ich verhindern, dass das Formular überhaupt minimiert wird, deshalb kommt das fürs erste in die Lade "möchte aber doch gerne wissen warum" und nicht mehr in die Lade "brauche ich unbedingt"

Zitat:
Hinweis: Der mouse_event darf NICHT über dem Element erfolgen (im Beispiel Button1), das den Test ausgelöst hat, weil sonst gleich ein neuer Test ausgelöst wird (Kettenreaktion).
Evtl. mouse_event-Parameter ändern oder Button1 verschieben.
Schon klar, in meinem Programm gibt es ja gar keinen entsprechenden Button. Minimiert wurde nur manuell, und in der Timerroutine sollte das Fenster vor dem nächsten Durchlauf wiederhergestellt werden. Und das macht er hartnäckig nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Fenster sichtbar machen

  Alt 3. Apr 2017, 00:34
Ich würde es immer noch direkt über HTTP probierten. Jetzt hast du so viel Zeit vergagelt...
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Fenster sichtbar machen

  Alt 3. Apr 2017, 00:39
Es wird ja wohl ein Image im Browser angezeigt. Man müsste also die Seite mach dem img-Tag scuhen können. Oder im JS-Script sehen, wo die Images abgelegt werden. FTP wäre noch eine Idee.
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
 
#9

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 10: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 10:41 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Fenster sichtbar machen

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

gruss

Geändert von EWeiss (11. Jul 2019 um 15:47 Uhr)
  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 21:39 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