AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Prism Fehlermeldung beim Wechsel zwischen Anwendungen
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung beim Wechsel zwischen Anwendungen

Ein Thema von gfjs · begonnen am 30. Aug 2006 · letzter Beitrag vom 31. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#1

Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 03:58
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.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 06:35
Schalt mal Debug-DCU's dazu und lass bei Auftreten einer Exception den Compiler anhalten. Dann solltest Du herausfinden wo das genau passiert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 07:18
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
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 07:25
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 07:56
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
for i := 0 to Panel1.Controls.Count do .... 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.

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.

Gruß Jürgen.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 07:58
Zitat von gfjs:
servus
es muss heissen
for i := 0 to Panel1.Controls.Count - 1 do ....
wichtig ist das "-1", weil er sonst über den Index des Arrays hinausläuft.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 08:05
@ RavenIV

Sorry! War ein Flüchtigkeitsfehler in meinem Post. Im Quelltext steht überall das "-1".

Trotzdem vielen Dank.

Gruß Jürgen
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#8

Re: Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 08:50
Zitat von gfjs:
Sowohl in Form_Activated als auch in Label_Click wird ein Index verwendet.
Form_Activate(d) dürfte das Problem verursachen; denn diese Ereignisse werden bei jedem Wechsel zwischen Formularen - also auch zwischen Anwendungen - ausgelöst. Also musst Du dieses Ereignis genauer untersuchen (und dabei bewusst hin- und herschalten).

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:
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;
Übrigens gibt es ab D2005 die neue for-Konstruktion:
Delphi-Quellcode:
var ctl: TControl;
for ctl in Panel1.Controls do begin ...
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.

Hilft Dir das weiter? Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 09:05
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.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Fehlermeldung beim Wechsel zwischen Anwendungen

  Alt 30. Aug 2006, 09:09
Zitat von gfjs:
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.
Wie wäre es mit OnFormCreate oder einfach abchecken ob die Labels schon erzeugt wurden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.
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