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
Bbommel

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 14:53
Zitat:
beim Fokussieren des PageControl auf dem Formular
Den Fokus sollte man frühestens im OnShow, besser aber im OnActivate setzen,
weil vorher das Fenster (das eigentliche Windows-Fenster) noch gar nicht erzeugt ist.
Ja, das sehe ich genauso. Falls das missverständlich war: dieses SetFocus vom PageControl ist auch nichts, was ich selber mache, sondern das passiert halt innerhalb irgendwelcher VCL-Routinen. Wie geschrieben: wenn ich es einigermaßen eingegrenzt habe, dann passiert es in der Folge irgendwelcher DPI-Geschichten.

Zitat:
Es gibt meines Wissens keine Stelle, in der die VCL selbst ein WM_ACTIVATE absetzt.
Die VCL nicht, aber diverse Fremd-Komponenten, z.B. der TAdvDateTimePicker.
Der schickt ein WM_ACTIVATE an sein Parent beim CloseUp seines Auswahlfeldes.
An Fremdkomponenten habe ich nur pgDAC und VST. Beide kommen aber im Hauptformular, um das es hier geht, nicht vor, pgDAC nutze ich auch sonst nur im Code und nicht als Komponente.

es scheint so, als würde das Activate beim Fokussieren des PageControl auf dem Formular ausgelöst
Das deckt sich mit meinen Erkenntnissen:
Jepp, so war es auch gemeint.

in den aufrufenden Funktionen davor passiert irgendwas mit einer Umrechnung wegen DPI.
In dem Bereich gibt es allerdings gravierende Unterschiede zwischen Rio und Tokyo.
Ich meinte, das auch im Hinterkopf gehabt zu haben - Danke für die Bestätigung. Vielleicht sind es ja dann tatsächlich ungewollte Nebeneffekte der Änderungen in dem Bereich.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 15:49
Hallo,
das sind aber doch seeeehr gravierende Änderungen, oha.
Heiko
  Mit Zitat antworten Zitat
Bbommel

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 15:54
*** Update: ich konnte das Problem mit einer neuen, leeren Anwendung reproduzieren ***

Vorgehen: neue, leere VCL-Anwendung erstellen. Dem Form1 den WindowsState Maximized zuweisen. Die beiden Events OnActivate und OnCreate werden mit folgendem Code versorgt:

Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
begin
  ShowMessage('activate');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage('create');
end;
Die Anwendung starten.

Ergebnis unter Win 8.1 in der VM: activate läuft vor create.
Ergebnis unter Win 10 ohne VM: create läuft vor activate.

Das is'n Bug, oder? Denn die Doku gibt die Reihenfolge der Events ja eigentlich vor (siehe hier: http://docwiki.embarcadero.com/Libra...mForm.OnCreate)

Vielleicht haben wir ja zusammen die Chance, es weiter einzugrenzen, in welcher Konstellation der Fehler genau auftritt. Falls jemand z.B. ein Win 8.1 ohne VM hätte, könnte man es ja mal da testen.
  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
 
#4

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 16:28
Kann ich hier in einer 8.1 VM nicht reproduzieren. Kann es eventuell an den DPI-Einstellungen der Anwendung bzw. des Windows 8.1 in der VM liegen?
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
 
#5

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 16:34
Das Win8.1 in der VM hat bei mir eine Skalierung von 125% eingestellt. Möglicherweise spielt das eine Rolle.

Kann heute nicht mehr testen, ob sich was ändern würde, wenn ich die auf 100% stelle - bin nicht mehr an dem Rechner.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 16:59
Hallo,
und ohne WS_Maximized ?
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 17:10
Hallo,
und ohne WS_Maximized ?
Persönlich hatte ich auch diverse Seiteneffekte, wenn WS_Maximized gesetzt war (Objekt nicht initialisiert, Fenster wird ungewollt angezeigt, etc.).
Dies war bei mir aber auch schon bei 10.2.3 der Fall. Nach einspielen des High-DPI Patch's von Uwe war aber wieder alles wie gewohnt.
Roland
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.211 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 17:18
Ich kann nicht viel hilfreiches beitragen außer zu bestätigen dass ich auch schon die merkwürdigsten Effekte hatte wenn ein Fenster zum Start direkt hätte maximized sein sollen. Ich habe es dann erst später im OnActivate maximieren lassen.
  Mit Zitat antworten Zitat
DieDolly

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 18:06
Zitat:
Das Win8.1 in der VM hat bei mir eine Skalierung von 125% eingestellt. Möglicherweise spielt das eine Rolle.
Trotzdem darf sowas nicht passieren. Ein sehr trauriger Bug ehrlich gesagt. Was anderes kann es doch gar nicht sein.

Zitat:
Nach einspielen des High-DPI Patch's von Uwe war aber wieder alles wie gewohnt.
Kann man den Patch auch irgendwie ohne Mercury und so einspielen?

Ansonsten muss man irgendwie noch einen Workaround bauen und im OnCreate ganz am Ende eine Statusvariable auf True setzen, auf die OnActivate dann warten muss und vorher passiert dann dort gar nix.

Geändert von DieDolly (22. Mär 2019 um 18:09 Uhr)
  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
 
#10

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 19:25
Ein sehr trauriger Bug ehrlich gesagt.
Angesichts der Tatsache, daß er offenbar nur in ganz wenigen Umgebungen auftaucht (ich konnte ihn auf einem 150% Monitor immer nicht nachvollziehen), sehe ich das etwas zurückhaltender. Gerade im High-DPI Bereich gibt es so viele Konstellationen von Hardware, Windows Version (MS hat sich da auch nicht gerade mit Ruhm bekleckert und viele falsche Erwartungen geweckt) und Delphi Version, daß es nahezu unmöglich ist, alle Möglichkeiten auf Herz und Nieren zu testen. Wenn denn dann jemand so eine Kombination findet, bei der dieses Verhalten reproduzierbar ist, dann sollte man das entsprechend in QP einstellen. Also sicher kein Grund traurig zu sein
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 18:40 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