![]() |
AW: Fenster schließt sich nicht
Ich würde sagen du darfst dein "Ereignis" nicht in OnShow aufrufen.
Ich habe früher für sowas in der Regel einen TTimer verwendet der in OnShow aktiviert wird und dann, wenn die MessageQueue bock hat aufgerufen wird und sich selbst direkt disabled und die Aktion die ich möchte "direkt nach dem Aufbau des fensters" ausführt. "PostMessage" macht aber ansich das Gleiche und legt auch einfach eine Message auf die Queue die dann, wenn alle anderen Messages(paint, focus, MouseUp) durch sind abgearbeitet werden. |
AW: Fenster schließt sich nicht
Statt PostMessage und Timer verwende ich hier gern das Thread.Queue
Delphi-Quellcode:
ACHTUNG: ForceQueue statt Queue, da Emba zu dämlich war Queue zu reparieren und den "Bugfix" anders nannte. (im VCL-Thread aufgerufen, führt TThread.Queue den Code sofort aus ... anstatt dieses falsche IF einfach zu löschen, wurde eine neue Funktion gebaut, die endlich das macht, was die Funkion "Queue" laut ihrem Namen beheuptet zu tun)
TThread.ForceQueue(nil, procedure // im OnShow oder OnCreate/Create
begin ... end); |
AW: Fenster schließt sich nicht
Zitat:
|
AW: Fenster schließt sich nicht
Man könnte aber auch einfach immer und überall ForceQueue aufrufen, egal wo. (in Threads verhält es sich gleich, nur im Hauptthread macht es "auch" das, was man sich vom "Queue" denken würde)
TThread.Queue verhält sich im Hauptthread aufgerufen wie ein Synchronize. Synchronisation: (egal ob Queue oder Synchronize) * alles im Hauptthread, da ist es nutzlos (bzw. bringt nur unnötig Overhead) * zwischen Thread geht es * zwischen Thread(s) und Hauptthread ... im Hauptthread ist es unnötig, da Jener sowieso gerade "blockiert" ist (aber als Doku, bzw. damit es überall gleich ist, würde ich es im Hauptthread als "vertretbar" ansehen) |
AW: Fenster schließt sich nicht
Zitat:
|
AW: Fenster schließt sich nicht
Zitat:
|
AW: Fenster schließt sich nicht
ForceQuere zu erfinden war eh eine blöde Idee.
Wäre schöner gewesen sie hätten Queue repariert. |
AW: Fenster schließt sich nicht
Zitat:
Damit hätten sie die Kompatibilität gebrochen und alte Quelltexte hätten nicht mehr funktioniert. |
AW: Fenster schließt sich nicht
Ich bin da voll bei Sebastian. Niemand hatte Queue in der Form verwendet, die ForceQueue implementiert. Hätten Sie Queue geändert, hätten einige ihren Quelltexte ändern müssen. Nun hat man die Wahl - finde ich besser als den potentiellen Ärger bei einem Breaking Change.
|
AW: Fenster schließt sich nicht
Zitat:
Dafür ist es super geeignet :stupid: Vielleicht passt der Name dafür nicht ganz. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 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