AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Mysteriöser Hauptmenübefehl-Aufruf aus modalem Dialog reproduzierbar (Win 2008 Bug)
Thema durchsuchen
Ansicht
Themen-Optionen

Mysteriöser Hauptmenübefehl-Aufruf aus modalem Dialog reproduzierbar (Win 2008 Bug)

Ein Thema von mjustin · begonnen am 16. Mär 2011 · letzter Beitrag vom 17. Mär 2011
Antwort Antwort
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#1

Mysteriöser Hauptmenübefehl-Aufruf aus modalem Dialog reproduzierbar (Win 2008 Bug)

  Alt 16. Mär 2011, 09:40
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
Michael Justin

Geändert von mjustin (17. Mär 2011 um 06:33 Uhr) Grund: Bug reproduzierbar
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren

  Alt 16. Mär 2011, 10:24
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
Frank Reim
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren

  Alt 16. Mär 2011, 12:28
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.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren

  Alt 16. Mär 2011, 13:01
Sieht doch danach aus das der Menüpunkt durch einen Shortcut aufgerufen wurde.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren

  Alt 16. Mär 2011, 13:14
Sieht doch danach aus das der Menüpunkt durch einen Shortcut aufgerufen wurde.
Danke, da war ich noch nicht so sicher - allerdings muss dann Delphi, wenn man zweimal den gleichen Shortcut eingibt und der erste bereits den modalen Dialog (vorher erscheint noch ein InputQuery Dialog) öffnet, den zweiten Shortcut nicht aus der Eingabequeue löschen? Im modalen Dialog selber, und in erwähnter InputQuery, ist der Shortcut nicht mehr wirksam.
Michael Justin
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#6

AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren

  Alt 16. Mär 2011, 13:30
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
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren

  Alt 16. Mär 2011, 13:51
nur so eine Idee: Hast Du irgendwo (FormShow etc.) ein Application.ProcessMessages drin ?
Stimmt, das wäre ein Kandidat - schaue ich mir an, Danke für den Tipp!
Michael Justin
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Mysteriösen Hauptmenübefehl-Aufruf aus modalem Dialog reproduzieren

  Alt 17. Mär 2011, 06:31
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:

http://stackoverflow.com/questions/5...334062#5334062
Michael Justin
  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 21:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz