![]() |
Fehlermeldung beim Wechsel zwischen Anwendungen
Guten Morgen.
Bei der Entwicklung eines Projekts ist ein mir unerklärlicher Fehler aufgetreten: Ich habe auf einem Formular ein Panel und darauf eine größere Anzahl von zur Laufzeit erzeugten Labels, die beim Klick auf ein Label durchlaufen werden. Beim ersten Klick ist noch alles okay, doch dann treten Fehler auf, die sich auf die Darstellung der Labels auswirkten. Das ist aber noch nicht das Problem - das ist einfach ein Fehler in meiner Programmierung, den ich versuche herauszufinden. Um mir das zu erleichtern, wollte ich nach jedem Klick einen Screenshot machen, um zu sehen, wie sich der Fehler von Klick zu Klick fortsetzt. Dabei ist nun das eigentliche Problem aufgetreten: Wenn ich mit <Alt/Druk> den Screenshot gemacht habe und die Anwendung wechsle (z.B. in Word) um dort den Screenshot in ein Formular zu kopieren, passiert folgendes: Wenn ich zurück in mein Projekt wechsle und auf ein weiteres Label klicke, kommt folgende Fehlermeldung: "System.IndexOutOfRangeException: Der Index war außerhalb des Arraybereichs." Das hat aber offensichtlich nichts mit dem Ablauf innerhalb meines Projekts zu tun, denn ich kann beliebig viele Labels anklicken, ohne dass ein Fehler auftritt, solange ich nicht die Anwendung verlasse. Kann es sein, dass mein Projekt beim Wechsel in eine andere Anwendug und zurück etwas "vergisst", bzw. dass ein Wert nach dem Wechsel undefiniert ist? mfg Jürgen PS. Das Ganze passiert sowohl beim Start des Projekts aus der Entwicklungsumgebung als auch mit der exe-Datei und hat auch nichts mit dem Screenshot zu tun sondern passiert jedesmal, wenn ich die Anwendung wechsle. |
Re: Fehlermeldung beim Wechsel zwischen Anwendungen
Schalt mal Debug-DCU's dazu und lass bei Auftreten einer Exception den Compiler anhalten. Dann solltest Du herausfinden wo das genau passiert.
|
Re: Fehlermeldung beim Wechsel zwischen Anwendungen
Guten Morgen, Bernhard.
Vielen Dank für Deinen Hinweis. Leider habe ich vom Debuggen nicht die geringste Ahnung. Das einzige, was ich auf die Schnelle rausgefunden habe ist dies: Ereignisprotokoll: Anwendungsdomäne geladen: DefaultDomain Prozess SudokuStar_1_0.exe (2408) Modul laden: mscorlib. Ohne Debug-Infos. Basisadresse: $79780000. Prozess SudokuStar_1_0.exe (2408) Thread-Start: Thread-ID: 2704. Prozess SudokuStar_1_0.exe (2408) Prozessbeginn: Attached/Spawned Process 0x968. Prozess SudokuStar_1_0.exe (2408) Modul laden: SudokuStar_1_0. Enthält Debug-Infos. Basisadresse: $00400000. Prozess Sudo-kuStar_1_0.exe (2408) Modul laden: system.windows.forms. Ohne Debug-Infos. Basisadresse: $7B610000. Prozess Sudo-kuStar_1_0.exe (2408) Modul laden: system. Ohne Debug-Infos. Basisadresse: $7B0A0000. Prozess SudokuStar_1_0.exe (2408) Modul laden: system.drawing. Ohne Debug-Infos. Basisadresse: $7B490000. Prozess Sudo-kuStar_1_0.exe (2408) Thread-Start: Thread-ID: 2808. Prozess SudokuStar_1_0.exe (2408) Prozessbeginn: Attached/Spawned Process 0x968. Prozess SudokuStar_1_0.exe (2408) Modul laden: mscorlib.resources. Ohne Debug-Infos. Basisadresse: $0B870000. Prozess Sudo-kuStar_1_0.exe (2408) Modul laden: system.windows.forms.resources. Ohne Debug-Infos. Basisadresse: $0B8C0000. Pro-zess SudokuStar_1_0.exe (2408) Modul entladen: SudokuStar_1_0. Prozess SudokuStar_1_0.exe (2408) Modul entladen: system.windows.forms. Prozess SudokuStar_1_0.exe (2408) Modul entladen: system. Prozess SudokuStar_1_0.exe (2408) Modul entladen: system.drawing. Prozess SudokuStar_1_0.exe (2408) Modul entladen: mscorlib.resources. Prozess SudokuStar_1_0.exe (2408) Modul entladen: system.windows.forms.resources. Prozess SudokuStar_1_0.exe (2408) Modul entladen: mscorlib. Prozess SudokuStar_1_0.exe (2408) Anwendungsdomäne entladen: DefaultDomain Prozess SudokuStar_1_0.exe (2408) Thread-Ende: Thread-ID: 2704. Prozess SudokuStar_1_0.exe (2408) Das hilft mir aber leider überhaupt nicht weiter. Vielleicht sagt es Dir etwas? Gruß Jürgen |
Re: Fehlermeldung beim Wechsel zwischen Anwendungen
Hallo Jürgen,
könnte es sein, dass Du eines der Ereignisse FormShow/FormActivate/LabelEnter o.ä. verwendest und dort ein Index benutzt wird? Das von der Fehlermeldung angesprochene Array könnte m.E. auch Panel.Controls o.dgl. sein. Vielleicht hilft die Suche in dieser Richtung. Gruß Jürgen |
Re: Fehlermeldung beim Wechsel zwischen Anwendungen
Guten Morgen, Jürgen.
Sowohl in Form_Activated als auch in Label_Click wird ein Index verwendet. Der Fehler scheint aber ziemlich sicher in Label_Click aufzutreten, da dort mit
Delphi-Quellcode:
alle Labels durchlaufen werden und mit einer Variable "Anzahl" eine andere Prozedur aufgerufen wird, bei der diese Variable für den Zugriff auf ein Array verwendet wird. Ich gehe davon aus, dass diese Variable "Anzahl" entweder verändert wird oder bei der Rückkehr zu meinem Programm undefiniert ist.
for i := 0 to Panel1.Controls.Count do ....
Nur hilft mir dieses Wissen nicht wirklich weiter. Beim normalen Programmablauf passiert ja nichts. Erst wenn ich während der Laufzeit des Programmes in eine andere Anwendung wechsle und dann wieder zurück zu meinem Programm gehe, tritt der Fehler auf. Leider sind meine Kenntnisse in Bezug auf das Debuggen gleich Null. :oops: Gruß Jürgen. |
Re: Fehlermeldung beim Wechsel zwischen Anwendungen
Zitat:
|
Re: Fehlermeldung beim Wechsel zwischen Anwendungen
@ RavenIV
Sorry! War ein Flüchtigkeitsfehler in meinem Post. Im Quelltext steht überall das "-1". Trotzdem vielen Dank. Gruß Jürgen |
Re: Fehlermeldung beim Wechsel zwischen Anwendungen
Zitat:
Wenn Du diesen Quelltext veröffentlichst, kann ich Dir vielleicht durch "genaues Hinschauen" schon helfen (ich kenne so etwas: dort, wo man selbst geschrieben hat, findet man Fehler nicht unbedingt). Tipps zur Fehlersuche Variante 1 (mit Debugger) Compiler muss mit Debug-Symbolen übersetzen (Projektoptionen) a. Haltepunkt an den Anfang einer problematischen Stelle setzen b1. mit F7 schrittweise jeden Befehl durchgehen, oder b2. mit F8 aufgerufene Methoden überspringen oder b3. mit F4 bis zu einer bestimmten Quelltextzeile oder b4. mit F9 bis zum nächsten Haltepunkt oder c. mit Maus oder "Überwachte Ausdrücke" oder "lokale Variable" Werte überprüfen; bei Deinem Problem vor allem den Laufindex und die Bereichsgrenzen kontrollieren d. die Stelle, an der es knallt, genauer prüfen Variante 2 (mit Exceptions) Damit sollten sowieso ständig alle möglichen und unmöglichen Fehler abgefangen werden. Die einfachste Variante, angepasst an Deine Situation:
Delphi-Quellcode:
Übrigens gibt es ab D2005 die neue for-Konstruktion:
for i := 0 to Panel1.Controls.Count - 1
do begin try ... except // bei dieser Variante ist i noch bekannt on e:Exception do ShowMessage( e.Message + #13#10 + Format( 'Index %d', [i] ) ); end; end;
Delphi-Quellcode:
Damit wird das Problem mit den array-Grenzen von i umgangen. Man kann aber i.d.R. nicht auf einen Index zugreifen. Wenn Du aber etwas mit dem betreffenden Control machen willst, ist das oft praktischer.
var ctl: TControl;
for ctl in Panel1.Controls do begin ... Hilft Dir das weiter? Gruß Jürgen |
Re: Fehlermeldung beim Wechsel zwischen Anwendungen
Hallo, Jürgen.
Vielen Dank für Deine Mühe und die ausführliche Beschreibung. Leider ist für heute meine Zeit, die ich mir für das Tüfteln an meinem Projekt zugestanden habe, schon deutlich überschritten. Jetzt muss ich mich wieder meinem Hauptjob widmen. Ich werde mich aber gleich morgen damit beschäftigen. Ich glaube, dass für mich der Hinweis, dass Form_Activated bei jedem Formularwechsel aufgerufen wird, der springende Punkt sein dürfte. In Form_Activated erzeuge ich nämlich zur Laufzeit die Labels, weise den Labels die Eigenschaften zu und speichere diese Einstellungen im ersten Record meines StatusArrays. Vernutlich sollte ich diese Aktivitäten in eine andere Methode verlegen - nur in welche? Dazu müsste ich wissen, in welcher Reihenfolge die Methoden beim Programmstart aufgerufen werden, damit ich das Ganze in eine Methode verlegen kann, die vor Form_Activated dran ist. Ich hoffe, dass meine Schlussfolgerungen aus Deinen Hinweisen einigermassen richtig sind?! Also noch mal vielen Dank und noch einen schönen Tag. Gruß Jürgen. PS. Ankommende Hinweise lese ich natürlich sofort, auch wenn ich erst morgen weiter machen kann. |
Re: Fehlermeldung beim Wechsel zwischen Anwendungen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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