![]() |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,
ich konnte jetzt so einen Crash nachstellen. Wenn ich mit der Tastatur in der Listbox navigiere, wechselt das Fenster auf den dann selektierten Stil. Anbei ein Stacktrace und wenn ich meine Fehlermeldung wegklicke und danach zum Windows Stil wechseln will (evtl. aber auch zu anderen), kommt FastMM um die Ecke und hat noch einen ungültigen Speicherzugriff. Habe das mal als Textdateien angehängt. Soweit ich das sehe hat es wohl mit dem Tastaturhandling zu tun und tritt nicht immer gleich auf. Die FastMM Meldung scheint nur in Verbindung mit dem zurück wechseln auf den Windows Stil per Tastatur aufzutreten, wenn vorher der andere Crash passiert ist. Anbei auch ein Screenshot des Dissasemblies wenn der Crash auftritt. Der Dialog zur Stilwahl hat eine ListBox mit den Stilen drin und die hat nur dieses OnClick Ereignis:
Delphi-Quellcode:
Grüße
Application.MainForm.ActiveControl := nil;
ActiveControl := nil; StyleName := lb_Styles.Items[lb_Styles.ItemIndex]; Repaint; ActiveControl := lb_Styles; TurboMagic |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Versuche einmal das Setzen des Styles von dem OnClick abzukoppeln:
Delphi-Quellcode:
TThread.ForceQueue(nil, procedure
begin TStyleManager.TrySetStyle(lb_Styles.Items[lb_Styles.ItemIndex]); end); |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Zitat:
|
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Das mit den Repaint sieht komisch aus, brauchst du das zum aktualisieren?
Magst du uns nicht ein kleines Testprogramm stricken und als ZIP-Archiv anhängen? |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Der sagt E2003 Undeclared identyfier bei TThread. Ich kann auch nicht Cltr-Click auf ForceQueue machen. Unit System.CLasses ist aber eingebunden. Rufe ich das fully quallyfied mittels System-CLasses.TThread auf, meint der Compiler E2003 zu System, aber Ctrl-Click auf ForceQueue springt zu deren Implementierung. Kommentiere ich diese 3 Zeilen aus, gibt's kein Gemecker mehr... Was nun? Anbei mal das kleine Testprojekt. Wenn's dumm läuft hab' ich da ein paar Stile reingenommen die ich aus GetIt nachinstalliert habe, aber über Projektoptionen/Erscheinung kann man beliebige Stile wählen, das Problem tritt denke ich trotzdem auf. |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Zitat:
Delphi-Quellcode:
Sehen aufgestylte Oberflächen alle so gewöhnungsbedürftig aus? Da bleibe ich lieber bei der Windows Klötzchen-Optik.
const
WM_FORMSTYLECHANGED = WM_USER + 779; Tf_SelectStyle = class(TForm) private procedure WMFormStyleChanged(var pmvMessage: TMessage); message WM_FORMSTYLECHANGED; procedure Tf_SelectStyle.WMFormStyleChanged(var pmvMessage: TMessage); begin StyleName := lb_Styles.Items[pmvMessage.LParam]; end; procedure Tf_SelectStyle.lb_StylesClick(Sender: TObject); begin PostMessage(Handle, WM_FORMSTYLECHANGED, 0, lb_Styles.ItemIndex); end; Bis bald... Thomas |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Zitat:
|
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Schau mal im Hexeditor: Anhang 55735 Ach ja, und wegen dem cChangeInThread: ForceQueue sorgt dafür, dass der Code wie aus einem Thread kommend in die Warteschlange kommt und abgekoppelt abgearbeitet wird, obwohl man schon im Hauptthread ist. Es wird also nichts in einem anderen Thread gemacht. |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Ja, aktuelle Browser (z.B. Firefox) kopieren Tabulatoren und NonBreakingSpaces seit einer Weile nicht mehr als Leerzeichen, sondern als das was sie sind. (obwohl sie immernoch als Leerzeichen im Browser angezeigt werden)
Leider muß das Forum aber die mit diesem Zeichen auffüllen, da der Browser sonst mehrere Leerzeichen wie EINES behandelt und dann die Einrückung hier nicht mehr stimmt. Bissl blöd das Ganze, wenn man es direkt aus dem Thread kopiert. Zitieren (nicht absenden) und daraus kopieren geht aber. Zitat:
Wenn bereits die Klasse/Namespace nicht gefunden wurde, woher soll jemand dann wissen worin ForceQueue gesucht werden soll? Wenn, dann auf TThread klicken, was aber auch nicht geht weil er kennt es ja nicht. * z.B. weil die nötige Unit nicht im USES steht * oder weil durch blöde unsichtbare Sonderzeichen, welche zufällig als "Buchstabe" behandelt werden, es nicht 'TThread' heißt, sondern #160'TThread' und das gibt es natürlich nicht, selbst wenn die vermeintlich richtige Unit eingebunden ist |
AW: Crash beim VCL Stil Wechsel zur Laufzeit
Zitat:
Von welchem Stil redest du? Hast du verschiedene angeschaut? Was ist daran gewöhnungsbedürftig? Gräüße TurboMagic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 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