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 25. Mär 2019, 11:04
Da fehlt eine Abfrage auf HandleAllocated .
Danke! Das heißt, das könnte man dann so mit dem Lösungsvorschlag bei Emba melden, oder?
  Mit Zitat antworten Zitat
Michael II

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 11:19
Genau... Uwe war schneller..
Es reicht natürlich auch nur ein Formular und ein Monitor und windowstate=wsmaximized für Activate vor Create. Wenn skaliert wird, dann biegt man hier ab:

Delphi-Quellcode:
procedure TCustomForm.ScaleForCurrentDpi;

    if ShouldScale(self) then
und landet da:

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

   SetWindowPlacement(Handle, @WindowPlacement); // => OnActivate
Aber da ist das Formular noch im state fsCreating.
Michael Gasser
  Mit Zitat antworten Zitat
Michael II

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 11:36
Hoi Uwe

zu deinem Vorschlag

Delphi-Quellcode:
if (WindowState = wsMaximized) and HandleAllocated then
  begin
HandleAllocated ist bei meinem Delphi bereits TRUE.


Es wird deshalb weiterhin Activate vor Create ausgelöst.

Ich schlage deshalb vor:

Delphi-Quellcode:
procedure TCustomForm.ScaleNormalSize(M, D: Integer);
var
  WindowPlacement: TWindowPlacement;
begin
  if ( WindowState = wsMaximized ) and not ( fsCreating in FFormState ) then
  begin
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 11:52
HandleAllocated ist bei meinem Delphi bereits TRUE.
OK! Ich kann das hier immer noch nicht reproduzieren bzw. hatte noch keine Zeit eine passende VM zu erstellen.

Ich frage mich, ob dieses ScaleNormalSize dort überhaupt immer aufgerufen werden muss. Das ist doch eh nur sinnvoll, wenn das Form beim DPI change bereits sichtbar ist. Vielleicht wäre eine diesbezügliche Abfrage da eher sinnvoll.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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, 12:14
Wann tritt dieser Fehler denn jetzt genau auf? Es gibt hier soviele Ideen, Vorschläge und Nachbildungen des Fehlers, dass ich nicht mehr durchblicke.
Weiter oben kam dann auch noch Scaled := False hinzu, was die Verwirrung komplett macht.

Soll man Scaled nicht so oder so immer auf False stellen?
Ich benutze grundsätzlich immer Form123.ScaleBy(Screen.PixelsPerInch, originale-auflösung-während-der-entwicklung);
  Mit Zitat antworten Zitat
Bbommel

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 12:45
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.

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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.596 Beiträge
 
Delphi 7 Professional
 
#7

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

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

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 12:52
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.)
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

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
Bbommel

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 25. Mär 2019, 11:37
Wenn ich das richtig sehe, dann gibt es den passenden Eintrag im QP sogar schon (allerdings ohne Lösungsvorschlag):

https://quality.embarcadero.com/browse/RSP-23179

Ich werde mal die Erkenntnisse hier aus der Diskussion ergänzen.
  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 14:55 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