1 pièce(s) jointe(s)
Gestion efficace des erreurs
Bonjour,
je suis face à un sale problème (c'est la série...) : soit des fichier image parfois un peu mal fichus qui font crier mon programme ainsi que l'aperçu de l'OpenPictureDialog, donc c'est pas mon code, ouf !
(Une histoire d'invalid pointer ou similaire, mais le fichier s'affiche pourtant bien avec d'autres outils, aussi bien sous XP que sous Debian...)
Je me suis dit : tu vas blinder le truc avec un bloc
Code:
1 2 3 4 5 6 7
| try
OuvertureFichier(filename);
except
ShowMessage('Ooops...');
Ménage; // restauration du curseur d'origine, etc.
Exit;
end; |
Ça fonctionnerait mais il doit se passer des choses bizarres dans le code du composant utilisé car une fois le ménage fait, je ne peux pas ouvrir d'autres images, mon programme freeze, :aie:
Qu'à cela ne tienne, j'ai donc décidé d'aller voir comment ça se passait dans le programme de démo fourni avec le compo mais là, c'est violent, je ne vois pas mon ShowMessage('Ooops...');, j'entraperçois pendant une fraction de seconde un message me parlant d'Access Violation puis le programme disparaît des écrans sans autre forme de procès...
Conclusion : Try Except End n'est pas aussi performant et efficace qu'il y parait.
Question : comment bien gérer ça ?
Démo rapide :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function Calcul: double;
var a,b: double;
begin
a := 5;
b := 0;
try
result := a / b;
except
ShowMessage('Ooops...');
result := 0;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(FloatToStr(Calcul));
end; |
Au clic :
Pièce jointe 381246
Pourquoi ne vois-je pas mon ShowMessage ?
Pourquoi ne vois-je pas le ShowMessage principal avec le zéro que je force ?