Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Rätselhafte Exception unter Windows 8 (https://www.delphipraxis.net/185523-raetselhafte-exception-unter-windows-8-a.html)

idefix2 18. Jun 2015 13:05

Rätselhafte Exception unter Windows 8
 
Liste der Anhänge anzeigen (Anzahl: 3)
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
Delphi-Quellcode:
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.

mkinzler 18. Jun 2015 13:10

AW: Rätselhafte Exception unter Windows 8
 
Und was ist dabei rätselhaft? Du fängst den Fehler ja nicht ab.
Delphi-Quellcode:
 except
  on Exception do showmessage('exception 1');

himitsu 18. Jun 2015 13:37

AW: Rätselhafte Exception unter Windows 8
 
Ohne Einschränkungen werden alle Exceptions abgefangen.
Wobei immer alles abgefangen, aber nicht unbedingt behandelt wird.

Dalai 18. Jun 2015 13:52

AW: Rätselhafte Exception unter Windows 8
 
Wo wird das Objekt inifile erzeugt? Übrigens ist im Code kein
Delphi-Quellcode:
Showmessage('Exception2')
, also kann es kaum ausgeführt werden ;).

MfG Dalai

hathor 18. Jun 2015 13:55

AW: Rätselhafte Exception unter Windows 8
 
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!

BadenPower 18. Jun 2015 14:17

AW: Rätselhafte Exception unter Windows 8
 
Zitat:

Zitat von hathor (Beitrag 1305560)
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.

idefix2 18. Jun 2015 14:24

AW: Rätselhafte Exception unter Windows 8
 
Zitat:

Zitat von mkinzler (Beitrag 1305550)
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.

Der schöne Günther 18. Jun 2015 14:28

AW: Rätselhafte Exception unter Windows 8
 
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
Delphi-Quellcode:
Width
und
Delphi-Quellcode:
Height
setzt?

idefix2 18. Jun 2015 14:36

AW: Rätselhafte Exception unter Windows 8
 
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.

baumina 18. Jun 2015 14:38

AW: Rätselhafte Exception unter Windows 8
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr.
Seite 1 von 3  1 23      

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