AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rätselhafte Exception unter Windows 8

Ein Thema von idefix2 · begonnen am 18. Jun 2015 · letzter Beitrag vom 20. Jun 2015
Antwort Antwort
Seite 1 von 3  1 23      
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 14:05
Delphi-Quellcode:
procedure TFitnessMainForm.FormCreate(Sender: TObject);

begin
left:=0; top:=0;
showmessage ('Start');
// Position lesen
try left:=inifile.ReadInteger('Position','Links',left);
    width:=inifile.ReadInteger('Position','Breite',width);
    height:= inifile.ReadInteger('Position','Höhe',height);
    top:=inifile.ReadInteger('Position','Oben',top);
  except showmessage('exception 1');
  end;
showmessage('inifile gelesen');
Obiger Code produziert auf einem Rechner unter Windows 8 ein völlig rätselhaftes Verhalten. Nacheinander erscheinen, in der angegebenen Reihenfolge, die angehängten Messageboxen.
Obwohl zwischen dem ersten und dem zweiten Showmessage alles in einem try-except-block ist, wird zweimal diese Nachricht mit einer "Zugriffsverletzung" angezeigt, das Showmessage('Exception2') wird aber nicht ausgeführt.
Die inifile.readinteger funktionieren offenbar auch alle richtig, denn das Formular wird nicht am linken oberen Rand geöffnet, sondern dort, wo es sein soll.

Auf meinem Rechner mit Win7 wird keine derartige Fehlermeldung angezeigt, das ist nur am Kunden-PC der Fall.
Und nach dem Programmstart funktioniert alles normal, aber ich habe keine Ahnung, was die zwei Zugriffsverletzungsmeldungen sollen und wie ich die wegbekommen könnte.
Miniaturansicht angehängter Grafiken
pic1.jpg   pic2.jpg   pic3.jpg  

Geändert von idefix2 (18. Jun 2015 um 14:10 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 14:10
Und was ist dabei rätselhaft? Du fängst den Fehler ja nicht ab.
Delphi-Quellcode:
 except
  on Exception do showmessage('exception 1');
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

AW: Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 14:37
Ohne Einschränkungen werden alle Exceptions abgefangen.
Wobei immer alles abgefangen, aber nicht unbedingt behandelt wird.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#4

AW: Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 14:52
Wo wird das Objekt inifile erzeugt? Übrigens ist im Code kein Showmessage('Exception2') , also kann es kaum ausgeführt werden .

MfG Dalai
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#5

AW: Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 14:55
Es wird KEIN iniFile gelesen: entweder es ist nicht vorhanden oder es wird nicht gefunden.

Mit SCHLECHTEM Code kann man sich selbst in die Irre führen!
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#6

AW: Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 15:17
Es wird KEIN iniFile gelesen: entweder es ist nicht vorhanden oder es wird nicht gefunden.

Mit SCHLECHTEM Code kann man sich selbst in die Irre führen!
Das Code-Fragment im Eingangspost muss ein Pseudo-Code sein.
Den Beisweis liefert der Code in Verbindung mit den Bildern.

Wenn man schon nicht die originale Routine liefert, dann doch ein Pseudocode in dem ALLE relevanten Aufrufe stehen.

Die gepostete Routine wirft in allen Windowsversionen und nicht nur in Windows8 die Exception, da keine Instanz von TIniFile erstellt wurde.

Ich gehe davon aus, dass da noch weitere Anweisungen vor oder nach dem Try-Except-Block stehen, welche die Fehlermeldung auslösen.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 15:24
Und was ist dabei rätselhaft?
1. Wie himitsu schon geschrieben hat, müsste JEDE Exception dazu führen, dass der Except-Block ausgeführt wird
2. werden die Befehle im Try-Block alle ordnungsgemäss abgearbeitet, sonst würden die Eigenschaften Left und Top nicht gesetzt und die Form würde wegen der Zuweisungen ganz am Anfang (left:=0; top:=0) am oberen linken Rand geöffnet. Das ist nicht der Fall, die Position der Form stimmt, wenn sie angezeigt wird. Die Zuweisung an left ist die erste, die Zuweisung an top die letzte Anweisung des Try-Blocks.
Aber wenn eine Exception auftritt, dürften doch die Befehle nach der Exception nicht mehr ausgeführt werden.
3. funktioniert der gleiche Code auf meinem Win7 PC ohne irgendwelche Macken. Und ich erkenne im Code auch nichts, was irgenwie im Entferntesten ungewöhnich sein könnte

Mittlerweile fehlt mir jede Idee, wo ich weitersuchen könnte. Wenn der Fehler bei mir auftreten würde, könnte ich versuchen (mit wenig Hoffnung auf Erfolg), im Assembler-Fenster des Debuggers zu verfolgen, was passiert. Aber auf dem Kundenrechner ist ja nicht einmal ein Delphi installiert.

@Hathor
Wenn kein INi-File gelesen würde, dann hatte die Form beim Öffnen left=0 und top=0. Nachdem das nicht der Fall ist, wird das Ini-File gelesen.

Ich habe das Ganze weiter zerlegt, die Fehler passieren beim Zuweisen auf die Eigenschaften heigth und width:

Delphi-Quellcode:
try left:=inifile.ReadInteger('Position','Links',left);
    Showmessage ('Links gelesen');
    w:=inifile.ReadInteger('Position','Breite',width);
    Showmessage ('w gelesen');
    width:=w;
    Showmessage ('width zugewiesen');
    h:= inifile.ReadInteger('Position','Höhe',height);
    Showmessage ('h gelesen');
    height:=h;
    Showmessage ('height zugewiesen');
    top:=inifile.ReadInteger('Position','Oben',top);
    Showmessage ('oben gelesen');
Die Exception-meldungen werden angezeigt bei den Zuweisungen width:=w und heigth:=h. Was ich schon nicht verstehe.
Aber völlig unbegreiflich ist mir, dass er nach jeder solchen gemeldeten Exception normal weitermacht, ja sogar die Zuweisungen selbst richtig durchführt (Die Formulargrössen stimmen, die Höhe und Breite wird trotz der Exception-meldung richtig gesetzt.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 15:28
Das muss etwas anderes sein. Irgendeine abenteuerliche Komponente die auf deinem Formular liegt und der die Größenänderung ihres Parents (das Formular) nicht schmeckt. Ich würde wetten, mit einem Minimalbeispiel *1 tritt das nicht auf?


*1) Also einfach nur ein Formular das aus deiner Ini-Datei liest und dementsprechend sein Width und Height setzt?
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#9

AW: Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 15:36
Hmmm...
Auf der Form liegen eigentlich nur ganz normale Delphi-Standardkomponenten, ein paar panels, ein Stringgrid, Edits etc.
Aber ich werde deinen Hinweis verfolgen und das Spiel mit einer leeren Form auf dem KundenPC durchspielen.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Rätselhafte Exception unter Windows 8

  Alt 18. Jun 2015, 15:38
Die Fensterposition (Left, Top) und -größe (Width, Height) hängt auch von anderen TForm-Eigenschaften wie Position und Windowstate ab. Soviel ich weiß, sind die richtigen Werte der Festerposition- und -größe deswegen erst beim Zeichnen bekannt. Evtl. funkst du da im OnFormCreate zu früh dazwischen, deswegen würde ich das ins OnFormShow nach hinten verlegen.

EDIT : Ich Nehms zurück, denn ich machs auch im FormCreate.

EDIT : Allerdings hab ich mein Programm noch nie auf Win 8(.1) ausprobiert.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (18. Jun 2015 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 01:30 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