![]() |
Crash beim VCL Stil Wechsel zur Laufzeit
Hallo,
in meinem D11.2 VCL Projekt gibt's manchmal einen Absturz im Dialog zur Stylauswahl wenn ich den Stil wechsle. Mit folgendem Code wechsel ich den Stil, lb_Styles ist dabei eine Listbox die alle verfügbaren Stile enthält:
Delphi-Quellcode:
Leider passiert der Absturz nur in manchen Programmsitzungen und gerade mal wieder nicht, somit gibt's leider
Application.MainForm.ActiveControl := nil;
TStyleManager.TrySetStyle(lb_Styles.Items[lb_Styles.ItemIndex]); keinen Stacktrace. Irgendwer noch eine Idee woher das kommen könnte bzw. was man dagegen tun kann? Ich glaube mich auch zu erinnern, dass das Thema schon mal diskutiert wurde, kann mich aber nicht mehr genau erinnern wo und finde es somit gerade auch nicht mehr. Grüße TurboMagic |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Steht die Property
Delphi-Quellcode:
eines deiner Formulare auf
PopupMode
Delphi-Quellcode:
?
pmExplicit
Der ![]() Vgl: ![]() |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
In meinem kzTheming Projekt nutze ich folgenden Code um ein Menu Eintrag automatisch mit Styles zu versorgen und ein Event zum wechseln aufzurufen.
Hiermit fülle ich einen Menü Eintrag mit allen Styles die ich mitgegeben habe:
Delphi-Quellcode:
Diese Methode wird für jeden Menu Eintrag aufgerufen:
procedure kzTheme.AddNativeStyle(const AMenuItem: TMenuItem);
procedure AddMenuEntry(const ACaption: string; const AValue: Integer); var Item: TMenuItem; begin Item := TMenuItem.Create(FMenuItem); Item.Caption := ACaption; Item.OnClick := NativeStyleClick; Item.AutoCheck := False; Item.RadioItem := False; Item.Checked := TStyleManager.ActiveStyle.Name = ACaption; if ((AValue) mod 10) = 0 then Item.Break := mbBarBreak; FMenuItem.Add(Item); end; var Arr: TArray<string>; SystemStyle: string; FoundStyle: String; i: Integer; begin FMenuItem := AMenuItem; FMenuItem.Clear; FMenuItem.AutoLineReduction := maAutomatic; Arr := TStyleManager.StyleNames; TArray.Sort<string>(arr); SystemStyle := TStyleManager.SystemStyle.Name; AddMenuEntry(SystemStyle, 0); i := 1; for FoundStyle in Arr do begin if FoundStyle <> SystemStyle then begin AddMenuEntry(FoundStyle, i); Inc(i); end; end; end;
Delphi-Quellcode:
Aufzurufen als
procedure kzTheme.NativeStyleClick(Sender: TObject);
var StyleName: String; i: Integer; begin StyleName := StripHotkey(TMenuItem(Sender).Caption); TStyleManager.SetStyle(StyleName); (Sender as TMenuItem).Checked := true; for i := 0 to Pred(FMenuItem.Count) do if (not FMenuItem.Items[i].Equals(Sender)) then FMenuItem.Items[i].Checked := false; end;
Delphi-Quellcode:
.
AddNativeStyle(MeinMenu);
Ich hoffe es hilft Dir weiter. |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Zitat:
|
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Zitat:
Aber danke! |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Zitat:
Die Stil Selektionsform hat FormStyle fsNormal und wird per ShowModal aufgerufen, wobei das Hauptformular der Owner ist. Grüße TurboMagic |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Hast du kein Logging drin, um den Stracktrace im Fehlerfall zu bekommen?
|
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Greifst du irgendwo auf die Handles der Form oder anderer Komponenten zu? Beim Wechsel des Styles werden ja alle Elemente neu erzeugt, wodurch die Handles ungültig werden ...
|
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Zitat:
|
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Zitat:
leider den Trace nicht gespeichert, weil ich gedanklich da gerade an was anderem war. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 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