![]() |
Mysteriöser Hauptmenübefehl-Aufruf aus modalem Dialog reproduzierbar (Win 2008 Bug)
Hallo,
Dieser Stack Trace ist überraschend, denn er ist progammseitig nur möglich, wenn es gelingt aus einem modalen Dialog heraus einen Menüpunkt aufzurufen, der sich im Menü des dahinter liegenden (also inaktiven) Hauptformulars befindet. Meine Frage ist, wie kann man diesen Fall gezielt reproduzieren? Da er relativ selten im Echteinsatz auftritt, und mir im manuellen Test (im Produktivsystem) mir noch nicht begegnet ist, überlege ich nun wie diesen Aufruf eines Menüpunktes nachbauen kann. Wenn ich auf den modalen Dialog einen Button setze, der eine passende Windows Message an den Menüpunkt sendet, würde der Menübefehl dann ausgeführt? Die Fehlermeldung ist: Aus einem sichtbaren Fenster kann kein modales gemacht werden
Code:
main thread ($4c94):
004ffa88 +06c Ladelist.exe Forms TCustomForm.ShowModal <--- Fehler 0052f4ff +0bb Ladelist.exe DB TDataSet.SetActive 008fc9a1 +089 Ladelist.exe u_ladeli 928 +16 TForm1.EditLoadingList <--- gleicher modaler Dialog 008fbacd +085 Ladelist.exe u_ladeli 765 +11 TForm1.SearchShipmentClick <--- Klick auf Menüpunkt im dahinter liegenden Hauptformular der Anwendung 004d6e27 +0a7 Ladelist.exe Menus TMenuItem.Click 004d857f +0ef Ladelist.exe Menus DoClick 004d866b +087 Ladelist.exe Menus TMenu.IsShortCut 005001c1 +04d Ladelist.exe Forms TCustomForm.IsShortCut 004e8dc0 +068 Ladelist.exe Controls TWinControl.IsMenuKey 004e8f89 +011 Ladelist.exe Controls TWinControl.CNSysKeyDown 004e247e +2d2 Ladelist.exe Controls TControl.WndProc 004e6983 +513 Ladelist.exe Controls TWinControl.WndProc 004fb5e8 +594 Ladelist.exe Forms TCustomForm.WndProc 004e20a4 +024 Ladelist.exe Controls TControl.Perform 004856e0 +014 Ladelist.exe Classes StdWndProc 004e609c +02c Ladelist.exe Controls TWinControl.MainWndProc 004856e0 +014 Ladelist.exe Classes StdWndProc 772b00e3 +02b ntdll.dll KiUserCallbackDispatcher 008fc9a1 +089 Ladelist.exe u_ladeli 928 +16 TForm1.EditLoadingList <-- öffnet modalen Dialog 008fadec +070 Ladelist.exe u_ladeli 504 +5 TForm1.OpenLoadingListClick 004d6e27 +0a7 Ladelist.exe Menus TMenuItem.Click 004d857f +0ef Ladelist.exe Menus DoClick 004d866b +087 Ladelist.exe Menus TMenu.IsShortCut 005001c1 +04d Ladelist.exe Forms TCustomForm.IsShortCut 004e8dc0 +068 Ladelist.exe Controls TWinControl.IsMenuKey 004e8e0d +01d Ladelist.exe Controls TWinControl.CNKeyDown 0067ead1 +03d Ladelist.exe cxControls TcxControl.CNKeyDown 007b2351 +019 Ladelist.exe cxGridCustomView TcxGridSite.CNKeyDown 004e247e +2d2 Ladelist.exe Controls TControl.WndProc 004e885c +01c Ladelist.exe Controls TWinControl.WMNCHitTest 004e247e +2d2 Ladelist.exe Controls TControl.WndProc 004e6983 +513 Ladelist.exe Controls TWinControl.WndProc 0067ef6c +11c Ladelist.exe cxControls TcxControl.WndProc 007b2b1f +01b Ladelist.exe cxGridCustomView TcxGridSite.WndProc 004e609c +02c Ladelist.exe Controls TWinControl.MainWndProc 004856e0 +014 Ladelist.exe Classes StdWndProc 772b00e3 +02b ntdll.dll KiUserCallbackDispatcher 76973675 +010 kernel32.dll BaseThreadInitThunk |
AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren
Hi,
ich habe keine Ahnung, ob es das Gleiche ist. Ich hatte diesen Fehler auch mal bei einem Toolbarbutton (Bars von Developer Express). Ich habe dann herausgefunden, das einige User einen Doppelklick gemacht haben. Waren Sie schnell genug, kam es auch zu diesem Fehler. Mittlerweilen ist das bereinigt. Damals habe ich mich im Code darum gekümmert, das der Menüpunkt quais gelockt wurde. Frank |
AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren
Danke für die Antwort - also im Prinzip kann dieser Fehler durch schnelle Doppelklicks ausgelöst werden. Den Fall, dass innerhalb des modalen Dialogs scheinbar noch einmal der gleiche Menüpunkt angewählt wurde (im Hauptformular), hatte ich auch in einem bugreport gehabt, und dachte daher an diese Doppelklick-Ursache.
Allerdings (im gezeigten Stacktrace auch erkennbar) kommt es auch vor, dass zwei ganz verschiedene Menüpunkte zum Öffnen des modalen Dialogs, die auch nicht direkt übereinander stehen, durch den Doppelklick getroffen werden - das ist relativ unwahrscheinlich, denn dann müßte man 'Klicken - Mauszeiger einen Zentimeter höher platzieren - nochmal Klicken' können, bevor der modale Dialog geöffnet wird. Das Problem tritt erst seit Umzug auf einen Windows 2008 R2 Server auf, der nun über RDP statt über Citrix betrieben wird. Ich werde es weiter verfolgen, vielleicht gibt es doch einen Weg es zuverlässig zu reproduzieren. |
AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren
Sieht doch danach aus das der Menüpunkt durch einen Shortcut aufgerufen wurde.
|
AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren
Zitat:
|
AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren
Hallo mjustin,
nur so eine Idee: Hast Du irgendwo (FormShow etc.) ein Application.ProcessMessages drin ? Bei uns gab es ein ähnliches Problem. Ein Anwender mit nervösem Zeigefinger, der auf alles doppelklickte, schaffte es 2-mal auf einen Button zu klicken der einen modalen Dialog öffnete. Dort wurde ein Application.ProcessMessages durchlaufen vor Erscheinen der Form -> Problem evtl. wie bei Dir. Gruß, blauweiss |
AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren
Zitat:
|
AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren
Es ist laut Angaben ein Windows Bug, der mit dem SP1 für Windows 2008 R2 behoben ist.
Also falls in dieser Umgebung rätselhafte Ausführungen von Menüpunkten auftreten, kann es sich um diesen Fehler handeln. Auf Stackoverflow: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 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