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 = 'oben' then
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