Suite à mon code de 'Récupération des curseurs Windows', voici une nouvelle fonction qui permet, sous 2000/XP, de charger le curseur 'Main' de Windows (.CUR ou .ANI) et de remplacer crHandPoint.
Il utilise une fonction de résolution de variables d'environnement, pour ceux qui ne connaisse pas, '%SYSTEMROOT%\Cursors' = 'C:\WINDOWS\Cursors', etc...
Source / Exemple :
// Retourne un nom de fichier avec résolution des variables d'environnement
// Filename: nom contenant
function ExpandEnv(s: string): string;
var
Res: Cardinal;
Name: PChar;
begin
// Alloue la mémoire
GetMem(Name, MAX_PATH);
// Appel de la fonction de résolution de variables
Res := ExpandEnvironmentStrings(PChar(s), Name, MAX_PATH);
// Si la mémoire allouée n'est pas assez grande, le résultat est la taille
// nécessaire devant être allouée
if Res > MAX_PATH then
begin
// Réallocation de la mémoire et nouvel appel
GetMem(Name, Res);
ExpandEnvironmentStrings(PChar(s), Name, Res);
end;
Result := Name;
// Libération de la mémoire
FreeMem(Name);
end;
function LoadWindowsHand: boolean;
var
s: string;
Res: HCURSOR;
begin
// Initialise les variables
Result := true;
s := '';
// Vérifie si un fichier est définit dans la base de registre
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
if Openkey('\Control Panel\Cursors', false) then
begin
s := ExpandEnv(ReadString('Hand'));
CloseKey;
end;
finally
Free;
end;
// Vérifie si le fichier existe
if (s <> '') and FileExists(s) then
// Essaie de charger le fichier
Res := LoadCursorFromFile(Pchar(s))
else
// Essaie de charger le curseur Windows par défaut
Res := LoadCursor(0, IDC_HAND);
// Un curseur a été chargé si Res n'est pas nul
if Res <> 0 then
// Remplace le curseur Delphi 'crHandPoint'
Screen.Cursors[crHandPoint] := Res
else
// Aucun curseur n'a été chargé
Result := false;
end;
Conclusion :
J'utilise la fonction de résolution depuis très longtemps et je n'ai jamais eu de soucis avec, pour le chargement du curseur, je n'ai pas eu de problème.
Si vous voyez une quelconque erreur, une portion inutile ou non optimisée, n'hésitez pas à laisser vos modifications, parce que je compte bien utiliser celle-ci dans la majorité de mes programmes.
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.