![]() |
AW: Bug in Vcl.Forms?
Hey,
ja, ich bin da mal ganz durchgesteppt. Diese kleine Zuweisung auf FMenu macht hintenrum ja ne ganze Menge. Ich kann nun zwar den Code ändern (hab die Verzeichnisrechte alle auf Vollzugriff umgestellt...), aber er scheint das trotzdem nicht zu compilieren - wenn ich nämlich eine Zeile einfüge, sind die blauen Punkte noch an der selben Stelle und die IDE erzeugt also keine neuen DCUs? Bei den Vcl.Forms aber scheinbar schon, bei den Vcl.Menus aber nicht?! Ich hab nicht finden können, wo die hincompiliert sind (Es war dann auch schon spät). Es scheint besser zu sein (obwohl ich mir nicht sicher bin, daß der Compiler meine Änderung mitgenommen hat), wenn zuerst
Delphi-Quellcode:
gesetzt wird und dann die
FMenu.WindowHandle:=0
Delphi-Quellcode:
angewiesen wird, statt umgekehrt. Ein
Winapi.windows.SetMenu(Handle, 0)
Delphi-Quellcode:
scheint auch hilfreich.
if assigned(FMenu) then
Das Problem tritt ja auf beim Zerstören der Objekte, WMDestory... Ich habe eine kleine Routine im FormResize:
Delphi-Quellcode:
Die Idee war, wenn das Form minimiert ist, muss der Timer nicht an sein.
procedure TForm1.FormResize(Sender: TObject);
begin m_time.ImageIndex:=byte(form1.WindowState<>wsMinimized); Timer1.Enabled:=m_time.ImageIndex=1; end; m_time (TMenuItem) hat eine kleine Grafik, die anzeigt, ob die Funktion aktiv ist (ImageIndex=1) oder nicht (ImageIndex=0). Dennoch ist es so, daß der Fehler nur dann auftritt, wenn ImageIndex=0..., ist es 1 dann knallt es seltsamerweise nicht :roll: Bei durchsteppen ist mir aufgefallen, daß das FormResize nach dem FormCloseQuery auch aufgerufen wird. Die Zuweisung des ImageIndex ist dann wohl nicht so optimal, wenn das MenuItem gerade vorher zerstört wurde :oops: Dass diese Möglichkeit aber im Vcl.Menus nicht berücksichtigt wird...?!
Delphi-Quellcode:
Wenn FWindowHandle schon aufgelöst ist, endet es hier (bei mir). Ein
procedure TMenu.SetWindowHandle(Value: HWND);
begin FWindowHandle := Value;
Delphi-Quellcode:
könnte hilfreich sein.
if assigned(FWindowHandle) then
Ich habe das Problem jetzt so gelöst, daß ich im FormCloseQuery eine globale Variable
Delphi-Quellcode:
setze und dann es so mache:
ending:=true
Delphi-Quellcode:
Dann ist auch alles gut.
procedure TForm1.FormResize(Sender: TObject);
begin if not ending then begin m_time.ImageIndex:=byte(form1.WindowState<>wsMinimized); Timer1.Enabled:=m_time.ImageIndex=1; end; end; Und ich habe wieder was gelernt :wink: |
AW: Bug in Vcl.Forms?
Zitat:
|
AW: Bug in Vcl.Forms?
Ich glaube immer noch nicht an einen Fehler in den Delphi Sourcen. Ich denke eher, dass durch das Destroy der Form irgendein Event ausgelöst wird in dem nochmal auf ein nicht mehr existentes Objekt zugegriffen wird und dadurch der Fehler auftritt.
Ich suche einen solchen Fehler immer so, dass ich zuletzt geänderte Dinge (seitdem der Fehler passiert) auskommentiere oder rückgängig machen. Hier könnte ein VCS hilfreich sein. Alternativ kannst du auch mal Events von bestimmten Komponente (die neu hinzugekommen sind) deaktivieren bzw. nicht mehr behandeln. So kannst du dich dem Fehler immer weiter nähern. Aber einfach so die Delphi Sourcen ändern ist IMO keine gute Idee. Der Fehler tritt ja nicht seit Beginn auf, oder? |
AW: Bug in Vcl.Forms?
Zitat:
|
AW: Bug in Vcl.Forms?
Halo,
und noch einmal. Tritt der Fehler auch bei einem neuen Projekt? |
AW: Bug in Vcl.Forms?
Zitat:
Zitat:
|
AW: Bug in Vcl.Forms?
Zitat:
Delphi-Quellcode:
oder die Events direkt auf.
Application.ProcessMessages
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 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