AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SetStyle verursache Exception (gelöst)

Ein Thema von BigAl · begonnen am 1. Mai 2022 · letzter Beitrag vom 3. Mai 2022
Antwort Antwort
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#1

SetStyle verursache Exception (gelöst)

  Alt 1. Mai 2022, 08:45
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
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)

Geändert von BigAl ( 1. Mai 2022 um 10:00 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.825 Beiträge
 
Delphi 12 Athens
 
#2

AW: SetStyle verursache Exception (gelöst)

  Alt 1. Mai 2022, 20:57
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.
  Mit Zitat antworten Zitat
EMxRay

Registriert seit: 16. Jan 2020
Ort: Oberkochen
4 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: SetStyle verursache Exception (gelöst)

  Alt 2. Mai 2022, 18:48
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.
Heinz
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#4

AW: SetStyle verursache Exception (gelöst)

  Alt 2. Mai 2022, 20:06
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.
Das ist halt das Problem wenn man so einen Fehler melden will. Es passiert halt meist nur in einer ganz bestimmten Konstellation. Und mein Projekt kann ich nicht ohne weiteres an Emba geben (zumal es der Firma und nicht mir gehört). Fakt ist, dass der Fehler ab einer Caption-Länge von 72 Zeichen auftritt. Zu dem Zeitpunkt ist nur das Hauptformular mit einem Main-Menu und ein Datenmodul aktiv, welche lediglich eine Datenbank-Connection enthält, welche aber noch nicht aktiv ist.

Der Start im Hauptprogramm sieht also so aus:

Delphi-Quellcode:
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.
Im Hauptformular (TfrmMain) wird auch nichts außergewöhnliches gemacht. Ich linke ca. 10 Styles mit der Applikation. Hatte aber auch schon weniger versucht.

Hier mal der Call Stack:
2022-05-02-20_58_16-bestpractice-delphi-11-vcl.forms-%5Bstopped-thread-27048%5D-%5Bbuilt%5D.png

Und hier knallts:
2022-05-02-21_00_13-bestpractice-delphi-11-vcl.forms-%5Bstopped-thread-27048%5D-%5Bbuilt%5D.png

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.
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: SetStyle verursache Exception (gelöst)

  Alt 3. Mai 2022, 07:35
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: SetStyle verursache Exception (gelöst)

  Alt 3. Mai 2022, 07:56
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?
  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:37 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