AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

10.3.1: OnActivate wird vor OnCreate ausgeführt

Ein Thema von Bbommel · begonnen am 21. Mär 2019 · letzter Beitrag vom 26. Mär 2019
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.752 Beiträge
 
Delphi 12 Athens
 
#1

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 13:18
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
710 Beiträge
 
Delphi 12 Athens
 
#2

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 15:46
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.
Roland

Geändert von blawen (25. Mär 2019 um 15:49 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 16:05
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
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
778 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 18:37
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 .
Michael Gasser
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 18:42
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 .
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?
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
710 Beiträge
 
Delphi 12 Athens
 
#6

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 22:21
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 .
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
Roland
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 22:26
Wie pflegt man die Änderung ein? Einfach in die Unit schreiben, speichern und vorhandene Projekte bereinigen + kompilieren?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.752 Beiträge
 
Delphi 12 Athens
 
#8

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 23:30
Wie pflegt man die Änderung ein? Einfach in die Unit schreiben, speichern und vorhandene Projekte bereinigen + kompilieren?
Die Unit muss im Suchpfad des jeweiligen Projekts liegen. Der Delphi-Source-Folder gehört definitiv nicht dazu und darf es auch nicht.

In der Regel verwende ich für solche gepatchten Delphi Units entweder das Projektverzeichnis oder ein dediziertes Unterverzeichnis.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
672 Beiträge
 
Delphi 12 Athens
 
#9

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 26. Mär 2019, 07:59
Falls jemand nach der Änderung (Code unten) (and not ( fsCreating in FFormState)

noch Probleme hat, dann suche ich noch einmal .
Also bei mir funktioniert das so erst einmal. Ich hatte deinen Lösungsvorschlag daher auch schon im entsprechenden Ticket zu dem Bug im QP (hier: https://quality.embarcadero.com/browse/RSP-23179) gepostet, natürlich mit Verweis auf deinen Original-Post (will mich ja nicht mit fremden Federn schmücken).
  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 08:22 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