Trucs et astuces pour C++ Builder

Chargement d'un curseur animé depuis une ressource

CGI

- Titre : Trucs et astuces pour C++ Builder

- Auteur : CGI

- Parution : 23 octobre 2002

- Licence : Copyright 2002-2016 CGi - Tous droits réservés CGi. Toutes reproduction, utilisation ou diffusion de ce document par quelque moyen que ce soit autre que pour un usage personnel doit faire l'objet d'une autorisation écrite de la part de l'auteur, propriétaire des droits intellectuels. Les codes sources de ce document sont fournis en l'état. L'utilisateur les utilise à ses risques et périls, sans garantie d'aucune sorte de la part de l'auteur. L'auteur n'est responsable d'aucun dommage subi par l'utilisateur pouvant résulter de l'utilisation ou de la distribution des codes sources de ce document. De la même façon, l'auteur n'est en aucun cas responsable d'une quelconque perte de revenus ou de profits, ou de données, ou de tous dommages directs ou indirects, susceptibles de survenir du fait de l'utilisation des codes sources de ce document, quand bien même l'auteur aurait été averti de la possibilité de tels dommages. L'utilisation des codes sources de ce document vaut acceptation par l'utilisateur des termes de la licence ci-dessus.

Sommaire

- I. Chargement d'un curseur animé depuis une ressource

I - Chargement d'un curseur animé depuis une ressource

À ce jour, je n'ai trouvé qu'une solution pour charger un curseur animé à partir d'une ressource. C'est de sauvegarder la ressource dans un fichier temporaire puis de charger le curseur animé depuis le fichier temporaire.

Exemple :

Créer un fichier ressource « fichier.rc » à ajouter au projet :

MCursor RCDATA cursor.ani

Dans « Unit.cpp » :

const TCursor crMyCursor = 401;

//.............

//Sur l'événement OnCreate de la Form :
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TResourceStream *MRes = new TResourceStream((int)HInstance,"MCursor",RT_RCDATA);

char TempFileName[MAX_PATH];
char TempDir[MAX_PATH];
GetTempPath(MAX_PATH, TempDir);
GetTempFileName(TempDir, "~", 0, TempFileName);
//Création du nom de fichier temporaire

MRes->SaveToFile(TempFileName);
Screen->Cursors[crMyCursor] = LoadCursorFromFile(TempFileName);
Cursor = crMyCursor;
DeleteFile(TempFileName);

delete MRes;
}

Une solution plus simple, mais qui ne fonctionne que sous Windows XP, 2000 et NT.

(Je n'ai pas testé sous 2000 et NT.)

Créer un fichier ressource à ajouter au projet : « Ress.rc »

#include "ress.h"

MCursor ANICURSOR cursor.ani

Un fichier entête ressource : « Ress.h »

#define ANICURSOR 21
#define MCursor 210

Fichier principal : « Unit1.cpp »

#include « ress.h »

//........

const TCursor crAniCur = 401;

//........

//Sur l'événement OnCreate de la Form :
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Screen->Cursors[crAniCur]=LoadCursor(HInstance,MAKEINTRESOURCE(MCursor));
Cursor=crAniCur;
}

Retour à l'index.