AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

Ein Thema von RandomDD · begonnen am 17. Aug 2016 · letzter Beitrag vom 18. Aug 2016
Antwort Antwort
RandomDD

Registriert seit: 11. Aug 2016
42 Beiträge
 
#1

Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 17. Aug 2016, 22:48
Mein Programm macht ab und zu Berechnungen die etwa 3 Minuten dauern können.
Wenn man es dann in die Taskleiste minimiert, wird ein Form am Bildschirmrand angezeigt wo der aktuelle Status angezeigt wird.

Wenn ich auf mein Programmsymbol in der Taskleiste klicke kommt mein Programm wieder nach oben und dann soll das Formular am Bildschirmrand weggehen.

Kann ich irgendwie anders als mit ApplicationEvents OnRestore auf das wiederhochholen des Fensters reagieren?
OnRestore klappt nicht weil mein Programm während der Berechnung in einer Procedur hängt.

Geändert von RandomDD (17. Aug 2016 um 22:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.664 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 17. Aug 2016, 23:32
Ist denn die Prozedur in einen Thread bzw asynchronen Task ausgelagert?
Sven Harazim
--
  Mit Zitat antworten Zitat
RandomDD

Registriert seit: 11. Aug 2016
42 Beiträge
 
#3

AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 17. Aug 2016, 23:36
Die Prozedur ist in einem Thread ausgelagert. Im Thread selber wird aber auf VCL-Elemente der Hauptform zugegriffen.
Hab mittlerweile alles getestet. Ob mit Thread oder ohne, kommt alles aufs gleiche raus > OnRestore wird nicht aufgerufen.

Ich bräuchte eine Art Code die Checkt, ob FormX sichtbar ist.
Hatte diesen Check in einen eigenen Thread ausgelagert hat aber auch nicht geklappt.
  Mit Zitat antworten Zitat
Aviator

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

AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 18. Aug 2016, 11:54
Im Thread selber wird aber auf VCL-Elemente der Hauptform zugegriffen.
Das solltest du so nicht tun. Früher oder später könnte dir das um die Ohren fliegen. Das klingt eben fast so, als ob du dir die Daten mit denen du rechnest aus dem VCL-Komponenten ziehst und diese nicht aus einer eigenen Klasseninstanz liest. Da wird wohl deine Programmarchitektur ein wenig falsch aufgebaut sein.
  Mit Zitat antworten Zitat
RandomDD

Registriert seit: 11. Aug 2016
42 Beiträge
 
#5

AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 18. Aug 2016, 12:17
Danke für deinen Post.
Ich habe den gesamten Code wieder aus dem Thread genommen. Er rennt jetzt wieder im Hauptthread der Anwendung.
Grund ist, dass der Thread keine ABhilfe geschafft hat.

Was ich im Prinzip brauche ist eine ALternative zu Application.OnRestore.
Ein OnRestore (Klick auf mein Icon in der Taskleiste) was eben auch auslöst, wenn ich in einer Prozedur bin.
  Mit Zitat antworten Zitat
Aviator

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

AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 18. Aug 2016, 12:31
Das Event würde auslösen, wenn du aus deinem Thread nicht auf die MainForm zugreifen würdest. Durch den Zugriff auf die MainForm aus dem Thread heraus ist es so, als würdest du gar keinen Thread verwenden. Somit wird die GUI blockiert und kann auch keine Events (oder nur verzögert) auslösen.

Was genau bezweckst du denn mit dem Zugriff auf deine MainForm? Nimmst du dir von dort die Daten oder willst du dort was aktualisieren? Wenn ja, dann löse Events aus dem Thread mit Synchronize() aus um was zu aktualisieren. Die Daten die du im Thread benötigst um zu rechnen solltest du mit einer Klasseninstanz an deinen Thread übergeben, sodass der Zugriff auf deine MainForm wegfällt.
  Mit Zitat antworten Zitat
RandomDD

Registriert seit: 11. Aug 2016
42 Beiträge
 
#7

AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 18. Aug 2016, 12:44
Synchronise ist eine gute Idee, danke.
Viele Variablen kann ich leider nicht an die Klasse binden und dort ändern, da sie auch an anderen Stellen benötigt werden.

Also grob gesagt: wenn ich Synchronize verwende ist alles halbwegs in Butter?

Bleibt nur das Problem mit der blockierten GUI und dem nicht auslösenden OnRestore. Das bekomme ich wahrscheinlich gar nicht weg oder?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 18. Aug 2016, 12:54
Doch indem du den blockierenden Code in einen Thread auslagerst. Dann reagiert deine GUI auch wieder. Natürlich wird das wieder hinfällig, wenn du ständig aus dem Thread raus die GUI aktualisierst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 18. Aug 2016, 12:56
Hier ist eine schöne Zusammenfassung zur Thread-Synchronisation: https://www.youtube.com/watch?v=Jhcpgjs1uPA
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen

  Alt 18. Aug 2016, 13:19
Synchronise ist eine gute Idee, danke.
Viele Variablen kann ich leider nicht an die Klasse binden und dort ändern, da sie auch an anderen Stellen benötigt werden.
Darum bekommt dein Thread ja auch eine Kopie der Daten

Also grob gesagt: wenn ich Synchronize verwende ist alles halbwegs in Butter?
Falls Du z.B. nur Daten für eine Fortschrittsanzeige hast, ist postmessage voll und ganz ausreichend.

Bleibt nur das Problem mit der blockierten GUI und dem nicht auslösenden OnRestore. Das bekomme ich wahrscheinlich gar nicht weg oder?
Solange Du keinen Entwurf machst, der alle Ansprüche an und in Deinem Programm berücksichtigt, Nein!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 17:40 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