![]() |
SetStyle verursache Exception (gelöst)
Hallo zusammen,
vorab: Dies nur zur Info, falls mal jemand das gleiche Problem hat. Meine Applikation hat plötzlich sporadisch Exceptions ausgelöst sobald ich den Skin der Applikation zur Laufzeit geändert habe. Die Exception ist nicht unmittelbar aufgetreten, sondern erst nachdem die Kontrolle wieder an die VCL gegangen ist. Meine eigener Code war im Call-Stack nicht beteiligt. Bei der Suche bin ich dann irgendwann fast verzweifelt. In der Versionskontrolle bin ich dann bis an den Punkt zurückgegangen an dem der Fehler nicht mehr aufgetreten ist (lag schon ein paar Tage zurück). Sämtliche Änderungen die ich im folgenden Commit (ab dem der Fehler auftrat) gemacht habe, hatten scheinbar nichts mit dem Fehler zu tun, da diese alle in Units waren, die zu dem Zeitpunkt der Exception noch gar nicht beteiligt waren. Was ich in dem Commit noch gemacht habe: Ich habe die Caption des Hauptformulars geändert. Das war dann letztendlich das Problem. Sobald der Titel des Hauptfensters eine bestimmte Länge überschreitet tritt der Fehler auf. Die Caption sah in der dfm wie folgt aus: Caption = 'XXX XXXX XXXXXXXX - XXXXXXXXX XXX XX XXXXXXXX XXXXX XXXXXXXXXXX ' + 'XXXX - XXXXXXX' Aber auch wenn ich in der dfm die Caption auf 'XXX XXXX XXXXXXXX' setze und dann beim OnCreate diese entsprechend erweitere kommt die Exception. Wie gesagt: Dieser Beitrag nur, falls mal jemand ein ähnliches Problem hat. In diesem Sinne Alex |
AW: SetStyle verursache Exception (gelöst)
Kannst du bitte ein minimales Demoprogramm für den Sachverhalt schreiben und einem QP Report, den du dann dafür erstellst anhängen?
Solche Probleme sollten EMBT gemeldet werden, damit die Mal irgendwann abgestellt werden. |
AW: SetStyle verursache Exception (gelöst)
Ich habe mal versucht dieses Problem nachzustellen, da ich auch in meinem aktuellen Projekt den Style zur Laufzeit ändern kann.
Aber bei mir kann die Caption so lang sein wie ich will (>300 Zeichen), da passiert nichts, keine Exception. Ich habs auch bei mehreren Forms geprüft. Mein Projekt ist 32bit und läuft von XP bis Win10. |
AW: SetStyle verursache Exception (gelöst)
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Der Start im Hauptprogramm sieht also so aus:
Delphi-Quellcode:
Im Hauptformular (TfrmMain) wird auch nichts außergewöhnliches gemacht. Ich linke ca. 10 Styles mit der Applikation. Hatte aber auch schon weniger versucht.
begin
{$IFDEF DEBUG} ReportMemoryLeaksOnShutdown := True; {$ENDIF} Application.Initialize; Application.MainFormOnTaskbar := True; Application.Title := 'xxx xxxx xxxxxxxx'; Application.CreateForm(TMSData, MSData); Application.CreateForm(TfrmMain, frmMain); Application.Run; end. Hier mal der Call Stack: Anhang 55056 Und hier knallts: Anhang 55057 Wie gesagt: Es passiert nur, wenn der Caption des Hauptformulars 72 Zeichen oder mehr hat. Ich habe auch versucht es mit einem der Demo-Programme von Delphi zu reproduzieren. Da Funktioniert es komischerweise problemlos. Sowas zu melden ohne es mit einem Beispiel belegen zu können ist nach meiner Erfahrung sinnlos. Die aktuelle Applikation kann ich nicht weitergeben, da die meiner Firma gehört und viel Firmen Know-How enthält. |
AW: SetStyle verursache Exception (gelöst)
Ich würde nach dem Ausschlussverfahren auf einer Kopie des problematischen Projektes arbeiten.
In immer kleineren Schritten Sachen aus dem Hauptformular löschen und das Projekt starten, bis das Problem nicht mehr auftritt. Der erste Schritt wäre die Entfernung/Auskommentierung aller "Business"/Firmen Know-How relevanten Logik, bis nur noch das Formular übrig bleibt. |
AW: SetStyle verursache Exception (gelöst)
Außerdem suchst du irgendwie an der falschen Stelle.
Aus dem gezeigten Call Stack geht eindeutig hervor, dass jemand mit dem linken Mouse-Button auf ein TMainMenu mit TMenuItem-Einträgen geklickt hat. (Oder wilder: jemand hat die entsprechende Windows-Botschaft gesendet) Prüfe doch mal bitte, ob in Vcl.Forms.TFormStyleHook.WMNCCalcSize eine Instanz von TFormStyleHook.TMainMenuBarStyleHook erzeugt wird. Bei mir in Delphi 10.4 ist das Zeile 16910 in Vcl.Forms. Wird ggf. beim Starten und Initialisieren deines Hauptformulars das Mainmenu dynamisch angefasst? TMenuItem geladen und entladen bzw. hinzugefügt und entfernt? Ist TMainMenu.Automerge auf True? Ist das ein MDI-Formular? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 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