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

Soyez le premier à donner votre avis sur cette source.

Vue 10 552 fois - Téléchargée 733 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

Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2
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.
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
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.
Messages postés
1719
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 août 2020
3
"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...
Messages postés
1719
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 août 2020
3
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
Afficher les 14 commentaires

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.