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 1 von 3  1 23      
idefix2

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

Fenster sichtbar machen

  Alt 1. Apr 2017, 19:44
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).

Solange man das Programm laufen lässt und nichts anrührt, funktioniert alles wunderbar, aber wenn jemand das Programmfenster (irrtümlich) minimiert, geht nichts mehr. Deshalb wollte ich zu Beginn jedes Zyklus vor dem Auslesen der Kamera per windowstate:=wsnormal; sicherstellen, dass das Fenster nicht minimiert ist. Bloß kümmert sich das Fenster nicht im geringsten um diese Anweisung. Wenn es minimiert war, dann bleibt das so. Was muss man noch machen, um zu erreichen, dass ein minimiertes Programmfenster (das Hauptformular der Anwendung) wieder im Zustand wsnormal angezeigt wird?
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#2

AW: Fenster sichtbar machen

  Alt 1. Apr 2017, 19:50
Guck mal hier. Ich mache das immer hiermit. Funktioniert von Windows XP bis Windows 10.

http://www.swissdelphicenter.com/de/showcode.php?id=261
  Mit Zitat antworten Zitat
idefix2

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

AW: Fenster sichtbar machen

  Alt 1. Apr 2017, 20:15
Danke, gleich ausprobiert, leider hilft mir das auch nicht weiter. Diese Funktionen bringen das Fenster in den Vordergrund, wenn es vorher nicht minimiert im Hintergrund war. Aber wenn das Fenster minimiert ist, bleibt es minimiert.

Geändert von idefix2 ( 1. Apr 2017 um 20:18 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Fenster sichtbar machen

  Alt 1. Apr 2017, 20:41
Zitat:
Aber wenn das Fenster minimiert ist, bleibt es minimiert.
Verhindere doch einfach das man es minimieren kann.
Also sobald jemand das Fenster minimieren will setze es auf Hide.

und auf visible wenn du es in den Vordergrund bringen willst.

gruss
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Fenster sichtbar machen

  Alt 1. Apr 2017, 20:42
Ich vermute mal, dass du die ganzen Überwachungsaktionen im Main Thread machst. Dadurch ist deine Anwendung wahrscheinlich so ausgelastet, dass keine Zeit mehr für das Zeichnen der Form bzw. zum Verarbeiten von Messages bleibt. Unschöne Abhilfe könnte ein Application.ProcessMessages; nach einer bestimmten Anzahl von Zeichendurchläufen bringen.

Besser wäre es aber, wenn du die Webcam in einem anderen Thread abfrägst und die Daten dort verarbeitest. Dann bleibt auch dein Programm bedienbar.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Fenster sichtbar machen

  Alt 1. Apr 2017, 20:45
Zitat:
Aber wenn das Fenster minimiert ist, bleibt es minimiert.
Verhindere doch einfach das man es minimieren kann.
Also sobald jemand das Fenster minimieren will setze es auf Hide.

und auf visible wenn du es in den Vordergrund bringen willst.

gruss
Das wäre dann aber nur eine Maßnahme gegen die Symptome. Aber die Ursache davon wäre noch nicht behoben. Also nicht wirklich sauber.

Beim Ändern der Größe würde wahrscheinlich das Gleiche passieren. Bei Systemen vor Vista (mit DWM) würde das Fenster vermutlich weiß bleiben und sich gar nicht mehr neuzeichnen wenn ein anderes Fenster drübergelegt wird.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Fenster sichtbar machen

  Alt 1. Apr 2017, 21:11
Davon ab ist es unmöglich ein Fenster in den Vordergrund zu bringen wenn es minimiert ist.
Deshalb habe ich gesagt er soll dafür sorge tragen das es nicht minimiert wird.
Wie oder in welcher weise er sein Fenster zeichnet ist erst mal nebensächlich.

Zitat:
gar nicht mehr neuzeichnen
Sind Vermutungen da du nicht definitiv sagen kannst was er macht daher kann man nur raten.

Zitat:
Deshalb wollte ich zu Beginn jedes Zyklus vor dem Auslesen der Kamera per windowstate:=wsnormal; sicherstellen
Er schreibt aber auch "Vor dem Auslesen" es findet zu der zeit also kein zeichnen statt was den zugriff auf Messages verhindern würde\könnte.

Bin mir jetzt nicht sicher wie oder wo du
windowstate:=wsnormal; setzt.

EDIT:
Glaube aber das deine Anwendung wenn sie keinen Focus hat damit nichts erreichen wird.
Versuche es einfach mal auf die alt bewährte weise mit ShowWindow und sorge dafür das sie einen Focus hat
was im minimierten zustand schwerlich zu erreichen ist wenn du keine Callback oder ähnliches dafür eigerichtet hast.


gruss

Geändert von EWeiss ( 1. Apr 2017 um 21:44 Uhr)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#8

AW: Fenster sichtbar machen

  Alt 1. Apr 2017, 21:36
Zitat:
Deshalb habe ich gesagt er soll dafür sorge tragen das es nicht minimiert wird.
Ist aber auch nur eine 0815-Lösung.
Wenn er das Fenster nicht erneut aus der Taskleiste bekommt nachdem es minimiert wurde, ist doch wohl eindeutig der Hauptthread total mit Müll blockiert.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Fenster sichtbar machen

  Alt 1. Apr 2017, 21:46
Zitat:
Deshalb habe ich gesagt er soll dafür sorge tragen das es nicht minimiert wird.
Ist aber auch nur eine 0815-Lösung.
Wenn er das Fenster nicht erneut aus der Taskleiste bekommt nachdem es minimiert wurde, ist doch wohl eindeutig der Hauptthread total mit Müll blockiert.
Wenn dieser nichts tut und auch keine Webcam abgefragt wird.. wie er sagt.
Möchte ich das bezweifeln.

Aber egal ohne Antwort von ihm werden wir das wohl nicht erfahren.
Daher ist es nur reine Spekulation.

Zitat:
Ist aber auch nur eine 0815-Lösung.
Ist die einzig richtige denn wie schon erwähnt man kann ein minimiertes Fenster nicht in den Vordergrund bringen.
Es scheint mir so als wenn ihr nicht lest was hier geschrieben wird.

gruss

Geändert von EWeiss ( 1. Apr 2017 um 22:28 Uhr)
  Mit Zitat antworten Zitat
idefix2

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

AW: Fenster sichtbar machen

  Alt 2. Apr 2017, 00:43
Zitat:
Aber wenn das Fenster minimiert ist, bleibt es minimiert.
Verhindere doch einfach das man es minimieren kann.
Also sobald jemand das Fenster minimieren will setze es auf Hide.

und auf visible wenn du es in den Vordergrund bringen willst.

gruss
Das wäre eine (Not)lösung. Allerdings ist mir auch nicht klar wie ich verhindern kann, dass ein Fenster minimiert wird - Irgendwas auf die Art von OnMinimize oder OnCanMinimize habe ich bei den Formular-Events nicht gefunden.

Ich vermute mal, dass du die ganzen Überwachungsaktionen im Main Thread machst. Dadurch ist deine Anwendung wahrscheinlich so ausgelastet, dass keine Zeit mehr für das Zeichnen der Form bzw. zum Verarbeiten von Messages bleibt. Unschöne Abhilfe könnte ein Application.ProcessMessages; nach einer bestimmten Anzahl von Zeichendurchläufen bringen.

Besser wäre es aber, wenn du die Webcam in einem anderen Thread abfrägst und die Daten dort verarbeitest. Dann bleibt auch dein Programm bedienbar.
Nein, Ausgelastet ist gar nichts. 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. In der Timer Routine wollte ich als erstes das Formular aus der Taskleiste herauf holen, falls es minimiert worden ist. Und das geht nicht. Wenn das Programmicon in der Taskleiste von Hand angeklickt wird, wird das Formular sofort angezeigt, und dann funktioniert auch wieder alles andere. Bloß aus dem Programm heraus gelingt es mir nicht, das Fenster aus der Taskleiste wieder sichtbar zu machen. Genau das müsste aber doch eigentlich durch windowstate:=wsnormal; erreicht werden, oder?

Geändert von idefix2 ( 2. Apr 2017 um 00:46 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:24 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