Delphi-PRAXiS
Seite 7 von 8   « Erste     567 8      

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/)
-   -   10.3.1: OnActivate wird vor OnCreate ausgeführt (https://www.delphipraxis.net/200117-10-3-1-onactivate-wird-vor-oncreate-ausgefuehrt.html)

Bbommel 25. Mär 2019 12:45

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Zitat:

Zitat von DieDolly (Beitrag 1428655)
Wann tritt dieser Fehler denn jetzt genau auf? Es gibt hier soviele Ideen, Vorschläge und Nachbildungen des Fehlers, dass ich nicht mehr durchblicke.

Ich glaube, so ganz hundertprozentig konnten wir das noch immer nicht rausarbeiten, welche Konstellation genau für den Fehler sorgt. Bei mir z.B. tritt er innerhalb der VM mit Win8.1 auf, direkt auf meinem normalen Win10 habe ich kein Problem. Uwe aber konnte den Fehler auch unter Win8.1 nicht nachvollziehen, andere wiederum berichten auch unter Win10 von Problemen, die wahrscheinlich die gleiche Ursache haben. Insofern wissen wir es noch nicht ganz genau.

Zitat:

Zitat von DieDolly (Beitrag 1428655)
Weiter oben kam dann auch noch Scaled := False hinzu, was die Verwirrung komplett macht.

Naja, die "bösen" Funktionen werden halt mit scaled=false nicht aufgerufen, insofern dann auch kein Fehler. Das gleiche gilt für den Fall, dass das Fenster nicht maximiert ist.

Michael II 25. Mär 2019 12:52

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Delphi-Quellcode:
OK! Ich kann das hier immer noch nicht reproduzieren bzw. hatte noch keine Zeit eine passende VM zu erstellen.
Hallo Uwe
Ich nutze dazu keine VM, sondern ein Notebook mit einem "normalen" Windows Home mit Anzeige Skalierung 125%, ohne zweiten Monitor
Windows Home Version 10.0.17763 Build 17763
und
Delphi 10.3 Version 26.0.33219.4899 (Ich wiess grad nicht, ob es da bereits ein Update gab (?) und damit vielleicht bereits einen Fix.)

Delphi.Narium 25. Mär 2019 12:58

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Zitat:

Zitat von Bbommel (Beitrag 1428657)
Naja, die "bösen" Funktionen werden halt mit scaled=false nicht aufgerufen, insofern dann auch kein Fehler. Das gleiche gilt für den Fall, dass das Fenster nicht maximiert ist.

Könnte man anhand dieser Aussage den Schluss ziehen:

Wenn eine automatische Größenveränderung / -berechnung eines Formulares durchzuführen ist, ist mit dem Auftreten eines Fehlers (falscher Abfolge der Ereignisse OnCreate und OnActivate), bedingt durch den Aufruf von SetWindowPlacement, zu rechnen?

Uwe Raabe 25. Mär 2019 13:18

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Zitat:

Zitat von Michael II (Beitrag 1428659)
Ich nutze dazu keine VM, sondern ein Notebook mit einem "normalen" Windows Home mit Anzeige Skalierung 125%, ohne zweiten Monitor

Da ich es auf meinem "normalen" Windows trotz Starten auf meinem dritten Monitor mit 200% nicht reproduzieren kann, vermute ich einen Zusammenhang mit der DPI-Einstellung des Hauptmonitors (der hat hier 100%). Dein Notebook-Beispiel passt immerhin zu dieser Annahme. Da meine High-DPI VM vor ein paar Wochen offenbar den Auto-Update-Tod gestorben ist, habe ich aktuell leider keine passende Testumgebung für diese Konstellation. Mein Produktivsystem stelle ich dafür nicht um.

blawen 25. Mär 2019 15:46

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1428662)
Zitat:

Zitat von Michael II (Beitrag 1428659)
Ich nutze dazu keine VM, sondern ein Notebook mit einem "normalen" Windows Home mit Anzeige Skalierung 125%, ohne zweiten Monitor

Da ich es auf meinem "normalen" Windows trotz Starten auf meinem dritten Monitor mit 200% nicht reproduzieren kann, vermute ich einen Zusammenhang mit der DPI-Einstellung des Hauptmonitors (der hat hier 100%). Dein Notebook-Beispiel passt immerhin zu dieser Annahme.

Es hängt vom primären Monitor und von der Fenstereigenschaft "Scaled" ab:

- Primär Monitor (4k) auf 100%, Sekundär > 100% -> Kein Fehler feststellbar
- Primär Monitor (4k) > 100%, Sekundär >= 100% -> Der Fehler tritt auf
- Notebook mit HD-Auflösung -> Sobald die Skalierung >100% ist, tritt der Fehler auf
- Wenn beim Minimalbeispiel (2 Forms) beim Form2 "wsMaximized" und "Scaled = False" eingestellt ist, wird das Form2 nicht angezeigt.
- Der Fehler tritt grundsätzlich auch bei W7 Pro auf
- Bei 10.2.3 tritt der Fehler auch auf, wenn aber der Patch von Uwe eingespielt ist, funktioniert es wie gewohnt.

DieDolly 25. Mär 2019 16:05

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Zitat:

Bei 10.2.3 tritt der Fehler auch auf, wenn aber der Patch von Uwe eingespielt ist, funktioniert es wie gewohnt.
Wird Zeit, dass Embarcadero Herrn Raabe einstellt. Er bringt Delphi wenigstens voran :thumb:

Michael II 25. Mär 2019 18:37

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Wenn ich den Code in VCL.Forms und VCL.Controls korrekt lese, dann tritt Activate vor Create auf, wenn WindowState=wsMaximized gesetzt wird, Scaled=TRUE belassen wird, mindestens Windows 6.3 installiert ist und wenn

Winapi.Windows.USER_DEFAULT_SCREEN_DPI <> GetCurrentPPIScreen( )

Bei meinem System:
Winapi.Windows.USER_DEFAULT_SCREEN_DPI 96
GetCurrentPPIScreen( ) 120

=> procedure TCustomForm.ScaleNormalSize(M, D: Integer); wird aufgerufen und damit, weil WindowState = wsMaximized dann irgendwann SetWindowPlacement(Handle, @WindowPlacement); => OnActivate


Falls jemand nach der Änderung (Code unten) (and not ( fsCreating in FFormState)

Delphi-Quellcode:
procedure TCustomForm.ScaleNormalSize(M, D: Integer);
var
  WindowPlacement: TWindowPlacement;
begin
  if ( WindowState = wsMaximized ) and not ( fsCreating in FFormState ) then
  begin

noch Probleme hat, dann suche ich noch einmal :-D.

DieDolly 25. Mär 2019 18:42

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Zitat:

Zitat von Michael II (Beitrag 1428686)
Wenn ich den Code in VCL.Forms und VCL.Controls korrekt lese, dann tritt Activate vor Create auf, wenn WindowState=wsMaximized gesetzt wird, Scaled=TRUE belassen wird, mindestens Windows 6.3 installiert ist und wenn

Winapi.Windows.USER_DEFAULT_SCREEN_DPI <> GetCurrentPPIScreen( )

Bei meinem System:
Winapi.Windows.USER_DEFAULT_SCREEN_DPI 96
GetCurrentPPIScreen( ) 120

=> procedure TCustomForm.ScaleNormalSize(M, D: Integer); wird aufgerufen und damit, weil WindowState = wsMaximized dann irgendwann SetWindowPlacement(Handle, @WindowPlacement); => OnActivate


Falls jemand nach der Änderung (Code unten) (and not ( fsCreating in FFormState)

Delphi-Quellcode:
procedure TCustomForm.ScaleNormalSize(M, D: Integer);
var
  WindowPlacement: TWindowPlacement;
begin
  if ( WindowState = wsMaximized ) and not ( fsCreating in FFormState ) then
  begin

noch Probleme hat, dann suche ich noch einmal :-D.

Habe es noch nicht getestet und wird schwer bei mir, weil ich den Fehler auch vorher nie hatte.
Aber einfach and not ( fsCreating in FFormState in der offiziellen Emba-Unit in TCustomForm.ScaleNormalSize einfügen und damit sollte es gut sein? Darf ich das als CE_Nutzer überhaupt? :lol:

blawen 25. Mär 2019 22:21

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Zitat:

Zitat von Michael II (Beitrag 1428686)
Falls jemand nach der Änderung (Code unten) (and not ( fsCreating in FFormState)

Delphi-Quellcode:
procedure TCustomForm.ScaleNormalSize(M, D: Integer);
var
  WindowPlacement: TWindowPlacement;
begin
  if ( WindowState = wsMaximized ) and not ( fsCreating in FFormState ) then
  begin

noch Probleme hat, dann suche ich noch einmal :-D.

Dies könnte es gewesen sein.
Testweise habe ich die 32-Bit VCL-Version neu kompiliert und das Minimalbeispiel mit zwei Formularen funktionierte bei meinem Testrechner (Laptop mit HD Auflösung) wie erwartet :-)

DieDolly 25. Mär 2019 22:26

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt
 
Wie pflegt man die Änderung ein? Einfach in die Unit schreiben, speichern und vorhandene Projekte bereinigen + kompilieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 Uhr.
Seite 7 von 8   « Erste     567 8      

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