Je développe une vaste DLL de soutien à un langage externe, en Delphi 6 Personal Edition.
Dans ce contexte, je veux créer une fonction qui me permette de changer dynamiquement l'icône de la barre de titre de la form principale et/ou de changer l'icône qui s'affiche dans la barre des tâches (TaskBar). Pour cela, je tente d'utiliser l'API SendMessage avec le handle de la form principale et avec le code message WM_SETICON et le paramètre ICON_SMALL ou ICON_BIG.
Problème:
Mais, quelque soit le code utiisé, c'est toujours l'icône de la barre de titre de la fenêtre principale qui est changée (correctement), mais jamais celle de la barre des tâches.
Pour opérer le changement d'icône, je charge une bitmap carrée de dimensions quelconque dans le presse-papier, dans le programme appelant (écrit dans un autre langage). Puis j'appelle une fonction dans ma DLL écrite en Delphi 6 PE pour effectuer le changement. Je procède comme suit:
- vérification que le presse-papier contient bien une image
- je récupère les dimensions de mon système pour petites ou grandes icônes par GetSystemMetrics (chez moi, ce sont 16x16 et 32x32)
- chargement de cette image dans une bitmap temporaire
- en fonction du code demandé (ICON_SMALL ou ICON_BIG) je crée une icône temporaire avec les dimensions adéquates
- j'utilise SendMessage pour affecter l'icône temporaire
- finalement, je libère les ressources remporaires
Ai-je commis une erreur de logique ?
Ai-je mal utilisé SendMessage ?
Je joins un fichier ZIP contenant l'ensemble des sources, un fichier bitmap utilisé pour les tests et les EXE générés. Ce ZIP contient un projet pour la DLL avec l'extrait nécessaire limité à la fonctioin concernée, et un projet de programme en Delphi appelant ette fonction. Ce programme est une simulation du programme du langage externe utilisant normalement la DLL, mais du coup, tout est en Delphi 6 PE et met le problème en evidence.
Merci d'avance pour votre aide !
P.S. Je précise que je suis sous Windows 10 toutes mises à jour faites.
Partager