Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Crash beim VCL Stil Wechsel zur Laufzeit (https://www.delphipraxis.net/212228-crash-beim-vcl-stil-wechsel-zur-laufzeit.html)

TurboMagic 7. Jan 2023 17:13


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:
  Application.MainForm.ActiveControl := nil;
  TStyleManager.TrySetStyle(lb_Styles.Items[lb_Styles.ItemIndex]);
Leider passiert der Absturz nur in manchen Programmsitzungen und gerade mal wieder nicht, somit gibt's leider
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

TiGü 9. Jan 2023 08:34

AW: Crash beim VCL Stil Wechsel zur Laufzeit
 
Steht die Property
Delphi-Quellcode:
PopupMode
eines deiner Formulare auf
Delphi-Quellcode:
pmExplicit
?
Der https://quality.embarcadero.com/browse/RSP-39019 ist in 11.2 immer noch fehlerhaft und ungelöst.
Vgl: https://www.delphipraxis.net/211199-...-overflow.html

KodeZwerg 9. Jan 2023 16:48

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:
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;
Diese Methode wird für jeden Menu Eintrag aufgerufen:
Delphi-Quellcode:
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;
Aufzurufen als
Delphi-Quellcode:
AddNativeStyle(MeinMenu);
.

Ich hoffe es hilft Dir weiter.

TurboMagic 9. Jan 2023 19:49

AW: Crash beim VCL Stil Wechsel zur Laufzeit
 
Zitat:

Zitat von TiGü (Beitrag 1517204)
Steht die Property
Delphi-Quellcode:
PopupMode
eines deiner Formulare auf
Delphi-Quellcode:
pmExplicit
?
Der https://quality.embarcadero.com/browse/RSP-39019 ist in 11.2 immer noch fehlerhaft und ungelöst.
Vgl: https://www.delphipraxis.net/211199-...-overflow.html

Muss ich prüfen, die Form ist modal.

TurboMagic 9. Jan 2023 20:04

AW: Crash beim VCL Stil Wechsel zur Laufzeit
 
Zitat:

Zitat von KodeZwerg (Beitrag 1517241)
Diese Methode wird für jeden Menu Eintrag aufgerufen:
Delphi-Quellcode:
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;
Ich hoffe es hilft Dir weiter.

Die ruft doch auch nur TStyleManager.SetStyle auf. Oder hab's ich was übersehen? Der Rest ist ja nur die Integration in ein TMenu...

Aber danke!

TurboMagic 9. Jan 2023 21:34

AW: Crash beim VCL Stil Wechsel zur Laufzeit
 
Zitat:

Zitat von TiGü (Beitrag 1517204)
Steht die Property
Delphi-Quellcode:
PopupMode
eines deiner Formulare auf
Delphi-Quellcode:
pmExplicit
?
Der https://quality.embarcadero.com/browse/RSP-39019 ist in 11.2 immer noch fehlerhaft und ungelöst.
Vgl: https://www.delphipraxis.net/211199-...-overflow.html

Sowohl die Form zur Selektion des Stils als auch MainForm haben PopupMode = pmNone.
Die Stil Selektionsform hat FormStyle fsNormal und wird per ShowModal aufgerufen,
wobei das Hauptformular der Owner ist.

Grüße
TurboMagic

jaenicke 10. Jan 2023 07:57

AW: Crash beim VCL Stil Wechsel zur Laufzeit
 
Hast du kein Logging drin, um den Stracktrace im Fehlerfall zu bekommen?

Gausi 10. Jan 2023 08:44

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 ...

KodeZwerg 10. Jan 2023 09:12

AW: Crash beim VCL Stil Wechsel zur Laufzeit
 
Zitat:

Zitat von TurboMagic (Beitrag 1517255)
Zitat:

Zitat von KodeZwerg (Beitrag 1517241)
Diese Methode wird für jeden Menu Eintrag aufgerufen:
Delphi-Quellcode:
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;
Ich hoffe es hilft Dir weiter.

Die ruft doch auch nur TStyleManager.SetStyle auf. Oder hab's ich was übersehen? Der Rest ist ja nur die Integration in ein TMenu...

Aber danke!

Das ist korrekt, nur leider weiß ich nicht wie Du Deine ListBox füllst, deswegen mein detaillierter Kode.

TurboMagic 10. Jan 2023 11:59

AW: Crash beim VCL Stil Wechsel zur Laufzeit
 
Zitat:

Zitat von jaenicke (Beitrag 1517277)
Hast du kein Logging drin, um den Stracktrace im Fehlerfall zu bekommen?

Doch, aber es tritt nicht jedes Mal oder auf allen Rechnern auf und beim letzten Crash hab' ich
leider den Trace nicht gespeichert, weil ich gedanklich da gerade an was anderem war.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.
Seite 1 von 3  1 23      

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