Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Verständnisfrage zu try-except-finally

  Alt 29. Apr 2009, 13:22
Hallo an alle DPler,

Hab eine Frage zu try-except-finally. Also ich habe schon sehr erfolgreich try-except-Abfragen in meinem Projekt eingebaut und alles lief wunderbar. Hier mal ein kleines Beispiel:

Delphi-Quellcode:
function TControlerBoard.anaAusgang_einschalten: boolean;
begin
  try
    if sKameraposition = 'obenthen
      begin
        OutputAnalogChannel(1,Diodenhelligkeit[1]);
        anaAusgang_ausschalten(2);
      end
    else
      begin
        OutputAnalogChannel(2,Diodenhelligkeit[2]);
        anaAusgang_ausschalten(1);
      end;
    result := true
  except
    // Fehlermeldung
    result := false;
  end;
end;

function TControlerBoard.anaAusgang_ausschalten(iNummer: Integer): boolean;
begin
  try
    ClearAnalogChannel(iNummer);
    result := true
  except
    // Fehlermeldung
    result := false;
  end;
end;

function TControlerBoard.alle_anaAusgeange_ausschalten;
begin
  try
    ClearAllAnalog;
    result := true
  except
    // Fehlermeldung
    result := false;
  end;
end;
Sind ein paar Funktionen für ein Controler-Board und wie gesagt, bin sehr zufrieden damit. Jetzt versuche ich in meiner Komponente ebenfalls eine try-except-Abfrage zu machen und bekomme trotz das ich den eigentlichen Fehlerpunkt damit "umschließe" immer eine Fehlermeldung und ich weiß einfach nicht, warum dies der Fall ist.

Hier meine derzeitige Routine an der ich arbeite.
Delphi-Quellcode:
procedure TContainer.Beschleunigungmanuellverlassen(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var Index: integer;
    dWert: double;
begin
  if Key = 13 then
    begin
      try
        dWert := strtofloat(FEdmanuelleBeschleunigungsEingabe.Text) // <-- Hier tritt der Fehler auf
      except
        Showmessage('Hier');
      end;
    end;
end;
Hab die Stelle markiert, wo der Fehler auftreten kann. Eigentlich, so aus meinem Verständnis heraus, sollte das Programm, wenn dWert nicht eine Gleitkomma-Zahl übergeben wird in die Except-Fkt springen und mir somit ein "Hier" ausgeben. Er meldet mir aber, dass in dem Edit (FEdmanuelleBeschleunigungsEingabe) dies nicht der Fall ist (es steht dort wirklich keine Gleitkomma drin!) was also richtig ist. Wie gesagt, eigentlich erwarte ich eigentlich, dass die Exception nicht auftritt und er mir statt dessen Die Showmessage zeigen sollte.
Kann mir das jemand mal erklären, warum dies in dem Fall so ist?

PS.: ich weiß mit der trystrtofloat könnte ich dieses ganze Problem umgehen, indem ich eine if-Abfrage starte aber wenn ich dies tun würde, dann wäre die try-Except-Abfrage in meinem bisherigen Verständnis der Problematik überflüssig, da ich alles mit if abfragen abfangen kann (in einem gewissen größeren Rahmen sicherlich).

Vielen Dank
BAMatze
  Mit Zitat antworten Zitat