Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung" (https://www.delphipraxis.net/177655-windows-8-1-rand-verschiebt-sich-bei-keine-rueckmeldung.html)

Ralle1 19. Nov 2013 11:22

Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Wenn ich ein Formular als Wartendialog einblende, um eine längere Wartezeit zu überbrücken, kriegt man es (leider) hin, dass Windows an dieser Stelle "Keine Rückmeldung" liefert.
(das war in meiner Anwendung allerdings schon immer so und damit können/müssen wir derzeit leben).

Seit Windows 8.1 führt dies aber zu einem schwarzen Balken am Formularrand und eine Verschiebung des Formularinhalts.
Siehe Screenshot im Anhang.
Selbes Verhalten habe ich auch schon im Delphi (XE2) in dem Dialog "Compilieren" festgestellt.

Jemand eine Idee woran das liegt und vor allem, wie man es unterbinden kann?

Danke

Anhang 40195

Der schöne Günther 19. Nov 2013 12:05

AW: Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Wie soll man das nachstellen können? "Keine Rückmeldung" kommt wenn die Message-Loop nicht abgearbeitet (oder zumindest angefasst, oder?) wird. Was tust du? Sleep?

jaenicke 19. Nov 2013 12:53

AW: Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Entweder sauber umsetzen, so dass die GUI nicht hängt.

Oder zumindest kein eigenes Formular als Wartefenster davorblenden... das macht mit diversen Tools Probleme, die das Fensterhandling optimieren wollen (ob das sinnvoll ist, sei mal dahingestellt, ich finde nicht, aber es gibt so etwas eben).

Woran das liegt ist einfach: Die Randeinstellungen werden teilweise zurückgesetzt, wenn das Programm nicht mehr reagiert. Das liegt aber nicht an Windows 8.1, das hatte ich so auch schon bei Windows 7. Der entstehende Rand war nur nicht schwarz...
Der Fehler liegt aber im Programm. Das Programm entspricht so eben nicht den Richtlinien für Windows Programme.

Ralle1 19. Nov 2013 13:06

AW: Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Mir ist schon klar, dass es grundsätzlich falsch ist. Lässt sich aber leider an einigen Stellen nicht vermeiden.
Ich warte auf die Rückmeldung eines Firebirdservers bei einem ziemlich aufwändigen Select (unterm Strich aber das gleiche wie Sleep...).

pustekuchen 19. Nov 2013 13:13

AW: Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Und Application.ProcessMessages hilft dir auch nicht?

Union 19. Nov 2013 13:24

AW: Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Woe soll denn das gehen? Bei synchronem Fetch kann man so was nicht machen, es sei denn der Server unterstützt entsprechende Callbacks. Eine Möglichkeit wäre eventuell einen Thread dafür zu starten, der sich dann selber beendet wenn die Query gelaufen ist.

jaenicke 19. Nov 2013 13:26

AW: Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Zitat:

Zitat von pustekuchen (Beitrag 1236571)
Und Application.ProcessMessages hilft dir auch nicht?

Sicherlich nicht in dem Fall, da es sich ja um eine lange Abfrage handelt, aber normalerweise macht man solche Abfragen in einem Thread.

Man kann ja mit WaitForSingleObject oder ähnlichen Methoden warten bis die Abfrage fertig ist, dann braucht man auch keine große Synchronisation, wenn man das gut genug kapselt. Man kann dann aber an der Stelle immer 100 Millisekunden oder so als Timeout nehmen und warten und dann Application.ProcessMessages aufrufen bis der Thread fertig mit dem Laden ist.

Wie man das an der Stelle konkret machen kann um das threadsicher zu implementieren lässt sich so allgemein schlecht sagen.

Ralle1 19. Nov 2013 14:04

AW: Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Auf jeden Fall bedeutet eine threadsichere Implementierung, dass man es komplett umbauen muss. Und da gilt für mich derzeit "never touch the running system"A
Deswegen hatte ich ursprünglich auf Symptonbekämpfung bei dem schwarzen Rand gehofft.

taveuni 19. Nov 2013 14:32

AW: Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Zitat:

Zitat von Ralle1 (Beitrag 1236575)
Auf jeden Fall bedeutet eine threadsichere Implementierung, dass man es komplett umbauen muss.

Was hast Du denn für eine Delphi Version?
Mit einem anonymen Thread verbunden mit einer anonymen Methode 5 Min. Aufwand.
Ausser es ist alles mit der VCL verfrickelt.

Delphi-Quellcode:
TThread.CreateAnonymousThread(
procedure
// Mach etwas zeitintensives und synchroniere das Resultat wohin auch immer
begin
end).Start;

BerndS 19. Nov 2013 14:34

AW: Windows 8.1 Rand verschiebt sich bei "Keine Rückmeldung"
 
Hallo,
ich habe mir eine Procedure OpenQueryInThread(...) geschrieben. Diese erstellt einen geeigneten Thread und wartet dann.
Wenn ich dann dafür sorge, dass im gerade offenen Dialog nichts mehr gemacht werden kann, habe ich bisher keine Probleme festgestellt, wenn ich
Delphi-Quellcode:
...
Q.Open; --> OpenQueryInThread(Q);
...
ausgetauscht habe.
Man sollte das nur benutzen, wenn es wirklich länger dauert, da der Thread Verzögerungen verursacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 Uhr.
Seite 1 von 2  1 2      

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