Signification des codes d'erreur de l'api win32 - utilisation d'une tlistview

5/5 (14 avis)

Vue 11 152 fois - Téléchargée 789 fois

Description

Les différents messages d'erreur Win32 sont présentés dans une ListView avec tri croissant/décroissant alphabétique et numérique.

Suite à une question du forum sur l'interprétation des codes d'erreur Win32, je me suis dit que c'était une excellente occasion de réviser mon TLisView, en particulier un point auquel je ne m'étais pas encore intéressé, le tri.

Il s'agit donc presque autant d'une espèce de didacticiel sur l'utilisation d'un TListView que d'une antisèche à garder à portée de clic.

J'ai abondammant commenté le code relatif au tri (évènement OnCompare déclenché par ColomnClick). N'hésitez pas à me signaler toute amélioration possible, dans la mesure où les solutions utilisées sont le fruit d'une réflexion personnelle, et donc certainement perfectibles.

Un grand Merci à la fonction SysErrorMessage qui accomplit l'essentiel du travail.

Source / Exemple :


Voir dans le Zip.

Conclusion :


Garanti compilable sous D4.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
25 oct. 2007 à 19:25
Ton code m'a bien rendu service, je l'ai inclu dans une unité à part que j'appelle UDEbugAPI qui comprends une seule fonction :
Function FErrorAPIToStr(CodErrorAPI : Integer): String;
Begin
{ SysErrorMessage retourne parfois une chaîne vide }
if ArrStrErrorCodes[CodErrorAPI] = EmptyStr
then Result := '[non documenté]'
else Begin
{Des caractères retour chariot parasitent certaines chaînes }
Result := SysErrorMessage(CodErrorAPI);
{On ajoute la signification du message d'erreur dans la 3ème colonne }
Result := StringReplace(Result, #13#10, '', [rfReplaceAll]);
end;
end;
Je l'utilise en incluant l'unité dans le Uses du code que je veux surveiller.

Exemple :
if not RenameFile(FicDonnees, ChangeFileExt(FicDonnees,'.old')) then
begin
ER := GetLastError;
if MessageDlg(FicDonnees +' ne peut être sauvegardé en Bakup!'+#13#10+
'Erreur : '+IntToStr(ER)+' => '+FErrorAPIToStr(ER)
+#13#10+'Continuer ?',mtConfirmation, [mbYes, mbNo],0) = mrYes then
begin
... on continue
end;
end;
D'ailleurs, on voit bien que plus un système d'exploitation évolue, plus il contient de message d'erreurs...
Si c'est pas déplorable ça...

Moi aussi je note 10/10: faut bien motiver les troupes, et ce programme est super pratique.
A proposer aussi pour les autres langages, puisqu'il ne s'agit pas d'erreurs de Delphi.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
17 oct. 2007 à 22:33
Oups
Je n'avais pas encore vu ce subtil changement de l'interface de CS qui consiste à devoir commenter quand on veut noter.
Finies les anciennes pratiques anonymes déplorables!
C'est bien.

Donc, je note(10) et pardon pour la vacuité de ce msg.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 oct. 2007 à 21:53
"Le doute existentiel ne doit pas reléguer la nécessité de se sustenter"

Là-dessus, je n'ai aucun doute, mais il ne faut surtout pas que ça nous empêche de manger.

Salut, Cari, nos messages se sont croisés...
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 oct. 2007 à 21:47
J'ai donc testé dans plusieurs cas de figure : Delphi 4 pro, Delphi 6 Entreprise, Delphi 7 Entreprise pour la compilation, et Windows 98 SE, Windows XP Pro et Windows Vista personnel pour les OS.

Pour effectuer les tests, j'ai remplacé la procedure initiale par celle-ci :

procedure TForm1.ListErrors;
var
i: Integer;
S: string;
Compteur: Integer;
begin
Compteur := 0;
StatusBar1.SimpleText := '';
with ListView1.Items do
begin
Clear;
BeginUpdate;
for i := 0 to 20000 do // on prévoit large
begin
S := SysErrorMessage(i);
if S <> EmptyStr then
begin
S := StringReplace(S, #13#10, '', [rfReplaceAll]);
with Add do
begin
Caption := IntToStr(Compteur);
SubItems.Add(IntToStr(i));
SubItems.Add(S);
Inc(Compteur);
end;
end;
end;
EndUpdate;
NombreItems := Compteur;
end;
end;

Voici les résultats que j'obtiens :

Delphi 4 pro - Win98 : 658
(doublons : 14)
Delphi 6 entreprise - Win98 : 658
(doublons : 14)
Delphi 7 entreprise - Win98 : 658
(doublons : 14)

Delphi 4 pro - XP : 2661
(doublons : 70)
Delphi 6 entreprise - XP : 2661
(doublons : 70)
Delphi 7 entreprise - XP : 3008
(doublons : 95)

Delphi 4 pro - Vista : 3263
(doublons : 71)
Delphi 6 entreprise - Vista : 3263
(doublons : 71)
Delphi 7 entreprise - Vista : 3626
(doublons : 97)

Les doublons relevés sont des messages d'erreurs identiques correspondant à des codes d'erreur différents (j'ai testé ultérieurement).

Voilà, maintenant il appartient à chacun de personnaliser s'il le désire en fonction de ses outils et de son système d'exploitation, le système de la ListView devenant alors caduque.

Bonne prog' :p

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.