AGB  ·  Datenschutz  ·  Impressum  







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

Try...Except zeigt keine Wirkung

Offene Frage von "Simme"
Ein Thema von Simme · begonnen am 8. Jan 2010 · letzter Beitrag vom 9. Jan 2010
Antwort Antwort
Simme

Registriert seit: 8. Jan 2010
31 Beiträge
 
Delphi 7 Personal
 
#1

Try...Except zeigt keine Wirkung

  Alt 8. Jan 2010, 15:03
Hallo an alle!

Ich bin heute schonmal mit einem Problem aus diesem Programm gekommen. Ich habe schon seit einiger Zeit das Gefühl, dass die Try-Except-Anweisungen nicht so richtig funktionieren bei mir, oder ich wende sie falsch an. Vielleicht könnt ihr mir weiterhelfen.

Hier mein Code:
Delphi-Quellcode:
If ((GetAsyncKeyState(VK_NUMPAD0)) <> 0) Then
    begin
      Try
      bombesp1[laufzahl_bombe1] := TImage.Create(Form1);
      with bombesp1[laufzahl_bombe1] do
      begin
        Visible := true;
        Top := 64;
        Left := 200;
        Width := 49;
        Height:= 65;
        Stretch := True;
        Proportional := True;
        Name := 'Bombe' + IntToStr(laufzahl_bombe1) + '_SP1';
        Parent := Form1;
        Picture.Bitmap.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'bombe.bmp');
      end;
      Except
        bombesp1[laufzahl_bombe1].Left := Image1.Left;
        bombesp1[laufzahl_bombe1].Top := Image1.Top;
        bombesp1[laufzahl_bombe1].Visible := True;
        Delay(2000);
        bombesp1[laufzahl_bombe1].Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'bombe_explodiert.bmp');
      end;
    end;
Wäre für jede Hilfe dankbar.

Simme
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Try...Except zeigt keine Wirkung

  Alt 8. Jan 2010, 15:04
Hallo,

was geht denn nicht?
Und du weißt, dass "except" nur dann ausgeführt wird, wenn ein schwerer Fehler im try-Abschnitt auftritt (Zugriffverletzung o.ä.)?

Grüße, Matze
  Mit Zitat antworten Zitat
Simme

Registriert seit: 8. Jan 2010
31 Beiträge
 
Delphi 7 Personal
 
#3

Re: Try...Except zeigt keine Wirkung

  Alt 8. Jan 2010, 15:09
Also, kompilierbar ist das ganze. Aber wenn ich diesen Abschnitt praktisch so ausführe, dass er den Try-teil überspringen müsste, kommt ein Fehler: Und er sagt mir, dass das Image mit diesem Namen bereits existiert. Das ist klar, aber genau deshalb sollte er diesen Teil überspringen und direkt zur Except-Anweisung übergehen. Aber er gibt mir die Fehlermeldung. Warum?

Gruß,
Simme
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#4

Re: Try...Except zeigt keine Wirkung

  Alt 8. Jan 2010, 15:12
Zitat von Simme:
Also, kompilierbar ist das ganze. Aber wenn ich diesen Abschnitt praktisch so ausführe, dass er den Try-teil überspringen müsste, kommt ein Fehler: Und er sagt mir, dass das Image mit diesem Namen bereits existiert. Das ist klar, aber genau deshalb sollte er diesen Teil überspringen und direkt zur Except-Anweisung übergehen. Aber er gibt mir die Fehlermeldung. Warum?

Gruß,
Simme
Die Meldung wird dir nur im Debugger angezeigt. Startest du die Anwendung außerhalb von Delphi siehts nix
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Try...Except zeigt keine Wirkung

  Alt 8. Jan 2010, 15:13
Richtig,

du kannst das in den Optionen auch umstellen: Tools -> Optionen und da irgendwas mit "Bei Delphi-Sprachexceptions stoppen" (Haken entfernen).

Grüße, Matze
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#6

Re: Try...Except zeigt keine Wirkung

  Alt 8. Jan 2010, 15:15
Zitat von Matze:
du kannst das in den Optionen auch umstellen: Tools -> Optionen und da irgendwas mit "Bei Delphi-Sprachexceptions stoppen" (Haken entfernen).
Nicht empfehlenswert, insbesondere für einen Anfänger!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: Try...Except zeigt keine Wirkung

  Alt 9. Jan 2010, 00:02
Nur mal so am Rande ...

einen try...except ins konzept einzubauen ist mehr als böse.
das ist eigentlich dafür gedacht fehler kontrolliert abzufangen um das programm in einem definierten zustand zu belassen.

ob du ein TImage erzeugen musst oder nicht kannst du auch "normal" ohne exception abfragen.

z.B. ist Delphi-Referenz durchsuchenAssigned dein freund

P.S.: ich bin ja ein freund der bildlichen sprache:

so wie du das try...except hier einsetzt, vermute ich mal, dass ihr vor eurer haustür ein minienfeld habt.
nein, gegen besuch habt ihr nix, aber niemend vergisst mehr sein kommen bemerkbar zu machen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Simme

Registriert seit: 8. Jan 2010
31 Beiträge
 
Delphi 7 Personal
 
#8

Re: Try...Except zeigt keine Wirkung

  Alt 9. Jan 2010, 10:50
Also danke für die vielen Vorschläge und so.
Mir ging es eigentlich nicht darum, dass ich die Fehlermeldung wegbekomme, sondern darum, dass die Try...Except-Anweisung so funktioniert, wie sie es soll. Aber selbst wenn die Fehlermeldung nicht kam: Er hat dann eben gar nichts aus der Anweisung gemacht: Auch nicht den Except-Teil.
Aber gut, ch suche bei sowas dann immer nach Alternativen. Ich habe auch eine gefunden. Ich habe das ganze durch eine If...Then-Anweisung ersetzt. Und jetzt funktioniert alles so, wie es soll.

Also trotzdem danke!

Lg
Simme

PS: @Rufo: Ich kann ja nichts dafür, wenn mir mein Info-Lehrer mir die Verwendung der Exception falsch erklärt. Und im Übrigen funktioniert diese Anweisung selbst bei den einfachsten Sachen bei mir nicht. Aber es gibt eigentlich immer Alternativen. Man muss sie eben nur finden.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Try...Except zeigt keine Wirkung

  Alt 9. Jan 2010, 11:09
Zitat von Sir Rufo:
einen try...except ins konzept einzubauen ist mehr als böse.
Wo hast Du das denn her?
Exceptions sind nicht böse. Also ist das Verwenden von Exceptions auch nicht böse. Und das Abfangen schon gar nicht. Exceptions sind ein 'best practice', um die Behandlung der Ausnahmen (daher der Name) übersichtlich und strukturiert zu implementieren. Die Alternative wäre die Verwendung von Returncodes und was das für Spaghetticode ergibt (IF THEN ELSE IF THEN ELSE ....) wissen all die, die mal mit der Win-API arbeiten durften.

Zitat von Sir Rufo:
das ist eigentlich dafür gedacht fehler kontrolliert abzufangen um das programm in einem definierten zustand zu belassen
Das ist nur ein kleiner Aspekt des Exception-Konzeptes.
Immer, wenn Du eine Methode einer niedrigeren Klasse aufrufst, musst Du diese Aufrufe in Try..Except kapseln und die Exceptions, die diese Methode wirft bzw. werfen kann, in die eigenen (abstrakteren) Exceptions transformieren.
Das ist eine Grundregel des Clean Coding, oder Quasar-Konzept oder wie man auch immer das nennen will.
Das Try/Except- ein Muss, um robuste und wartbare Software zu schreiben.

Allerdings kann man das auch -wie jedes Werkzeug- falsch verwenden:
Zitat:
so wie du das try...except hier einsetzt, vermute ich mal, dass ihr vor eurer haustür ein minienfeld habt.
nein, gegen besuch habt ihr nix, aber niemend vergisst mehr sein kommen bemerkbar zu machen
Das lassen wir so stehen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Try...Except zeigt keine Wirkung

  Alt 9. Jan 2010, 11:59
Zitat von Sir Rufo:
ob du ein TImage erzeugen musst oder nicht kannst du auch "normal" ohne exception abfragen.

z.B. ist Delphi-Referenz durchsuchenAssigned dein freund
Er legt als aller erste Anweisung eine TImage Instanz durch einen Constructoraufruf an. Wenn nun das Anlegen der Instanz nicht erfolgreich durchgeführt werden kann (z.B: Speichermanager hat kein Speicher mehr, zu wenig GDI Handles, etc), dann kann dies nur durch eine Exception bekannt gegeben werden. Eine Exception ist die einzige Möglichkeit das Anlegen eines Constructors abzubrechen. Die Variable dann mit Assigned() abzuprüfen ist ein Witz (ich liebe keine bildliche, aber ausdrucksstarke Sprache), weil diese Anweisung nur erreicht wird, wenn der Constructor nicht abgebrochen wird. Und somit ist sie hinfällig, weil dann ist immer eine Instanz vorhanden.

/EDIT: Ok, ich habe mich verlesen, du wolltest mit Assigned() prüfen ob nicht schon eine Instanz da ist. Aber das war für mich nun unverständlich, da es keine Exception gibt wenn man die Referenzen von vorhandenen Instanzen überschreibt. Somit wäre der gesamte try/except Block nicht für diese Prüfung gedacht. Also alles hinfällig, Sir Rufo.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:04 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