Bonsoir à tous,

Pour gérer les erreurs nous avons le système avec les Exceptions dans mon cas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
if not Assigned(Result) then
   raise EInvalidImageFile.CreateFmt('Format de fichier non supporté (%s,%s)',
     [ext, 'GLZImageFile' + UpperCase(ext)]);
En mode "debug" nous avons cette petite fenêtre :

Nom : 2017-08-16_154213.jpg
Affichages : 570
Taille : 25,0 Ko

et en mode "Conception" nous avons celle-ci :

Nom : 2017-08-17_222843.jpg
Affichages : 587
Taille : 14,2 Ko

Ce n'est pas le mode débug qui me pose problème, mais à la conception

Par exemple dans mon programme pour charger un fichier j'ai la fonction suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
procedure TMainForm.FormDropFiles(Sender: TObject;const FileNames: array of String);
begin
   BmpFileName := FileNames[0];
   Screen.Cursor:=crHourGlass;
   ImageView1.Picture.LoadFromFile(BmpFileName); // ---> L'EXCEPTION EST LEVEE DANS CETTE PROCEDURE
   Screen.Cursor:=crDefault;
   lblBmpName.Caption:=BmpFileName;
   IsUpdated:=True;
   ImageView1.Invalidate;
end;
Dans ce cas l'exception fait irrémédiablement sortir de la procedure et Screen.Cursor n'est pas exécuté.

J'ai également testé ça : (même si il faut rajouter les unités Forms et Controls dans le Uses de l'implementation )

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
function TGLZImageFileFormatsList.FindFromFileName(const fileName: string): TGLZBitmapClass;
var
 ext: string;
 Screen : TScreen = nil;
begin
 ext := ExtractFileExt(Filename);
 System.Delete(ext, 1, 1);
 Result := FindExt(ext);
 if not Assigned(Result) then
 begin
   raise EInvalidImageFile.CreateFmt('Format de fichier non supporté (%s,%s)', [ext, 'GLZImageFile' + UpperCase(ext)]);
   Screen.Cursor:=crDefault;
 end;
end;
Idem :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Screen.Cursor:=crDefault;
n'est pas exécuté.

Le plus simple serait que ma fonction retourne un boolean, mais dans ce cas il faudrait que toute (une majorité retourne un boolean) et dans dans certain cas ce n'est pas faisable.

Donc, concernant les exceptions :
  • Existe-t-il une autre façon de procéder pour avoir plus de contrôles ?
  • Faut-il se passer des exceptions et gérer soit même ce genre d'erreur afin de ne pas perturber le bon fonctionnement d'un programme ?
  • Faut-il utiliser les exceptions que dans des cas "Critiques" (Acces dans un pointer par exemple) ?


En gros quel serai le meilleur chemin à suivre ?

Concernant la traduction

  • Peux-t-on intégrer des fichiers "PO" pour la traductions des divers messages. Et lier ceux-ci à une unité ou bien un paquet de conception ? si oui comment faire marcher tout ce petit monde au pas ?
  • La procédure à suivre est-t-elle la même que pour traduire une application ?


Merci

A+