Ajoute une ressource de police au système à partir d'une image mémoire
#include <WinAPIGdi.au3>
_WinAPI_AddFontMemResourceEx ( $pData, $iSize )
$pData | Le pointeur sur la ressource de police. |
$iSize | Le nombre d'octets dans la ressource de police. |
Succès: | Retourne le handle qui identifie les polices qui ont été installés sur le système, @extended contiendra un certain nombre de polices ajoutées au système à la suite de cet appel. |
Échec: | Retourne 0. |
Cette fonction permet à une application d'obtenir une police qui est incorporé dans un document ou une page Web.
Une police qui est ajoutée de cette façon est toujours privée au processus qui a fait l'appel et n'est pas énumérable.
Lorsque la fonction réussit, l'appelant de cette fonction peut libérer la mémoire pointée par $pData parce que le système a fait sa propre copie de la mémoire.
Pour supprimer les polices qui ont été installées, appeler _WinAPI_RemoveFontMemResourceEx().
Toutefois, lorsque le processus s'arrêtera, le système déchargera les polices.
_WinAPI_RemoveFontMemResourceEx
Consultez AddFontMemResourceEx dans la librairie MSDN.
#include <APIMiscConstants.au3> #include <APIResConstants.au3> #include <GUIConstantsEx.au3> #include <Memory.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WinAPIMisc.au3> #include <WinAPIRes.au3> Local Const $sJpg = @TempDir & '\~Tech.jpg' ; Charge Resources.dll en mémoire Local $hInstance = _WinAPI_LoadLibraryEx(@ScriptDir & '\Extras\Resources.dll', $LOAD_LIBRARY_AS_DATAFILE) If Not $hInstance Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', @ScriptDir & '\Extras\Resources.dll n''est pas trouvé.') Exit EndIf ; Charge une ressource JPEG de la bibliothèque Resources.dll Local $hResource = _WinAPI_FindResource($hInstance, 'JPEG', 1) Local $iSize = _WinAPI_SizeOfResource($hInstance, $hResource) Local $hData = _WinAPI_LoadResource($hInstance, $hResource) Local $pData = _WinAPI_LockResource($hData) ; Enregistre la ressource dans un fichier jpg Local $hFile = FileOpen($sJpg, 2 + 16) Local $tData = DllStructCreate('byte['& $iSize & ']', $pData) FileWrite($hFile, DllStructGetData($tData, 1)) FileClose($hFile) ; Charge la ressource de police de la bibliothèque Resources.dll $hResource = _WinAPI_FindResource($hInstance, $RT_FONT, 'TECHNOVIA_CAPS') $iSize = _WinAPI_SizeOfResource($hInstance, $hResource) $hData = _WinAPI_LoadResource($hInstance, $hResource) $pData = _WinAPI_LockResource($hData) ; Ajoute une police en mémoire au système Local $hFont = _WinAPI_AddFontMemResourceEx($pData, $iSize) ; Charge une ressource SOUND de la bibliothèque Resources.dll $hResource = _WinAPI_FindResource($hInstance, 'SOUND', 1) $iSize = _WinAPI_SizeOfResource($hInstance, $hResource) $hData = _WinAPI_LoadResource($hInstance, $hResource) $pData = _WinAPI_LockResource($hData) ; Copie WAV en mémoire pour une utilisation ultérieure Local $hWave = _MemGlobalAlloc($iSize, $GMEM_MOVEABLE) Local $pWave = _MemGlobalLock($hWave) _MemMoveMemory($pData, $pWave, $iSize) ; _MemGlobalUnlock ($HWave) ; Charge une ressource STRING de la bibliothèque Resources.dll Local $sText = _WinAPI_LoadString($hInstance, 1) ; Décharge Resources.dll de la mémoire _WinAPI_FreeLibrary($hInstance) ; Crée une GUI GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 350, 350) GUICtrlCreatePic($sJpg, 0, 0, 350, 350) GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlCreateLabel($sText, 10, 18, 330, 36, $SS_CENTER) GUICtrlSetFont(-1, 30, -1, -1, 'Technovia Caps') GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1, 0xF06000) Local $idButton = GUICtrlCreateButton('Play Sound', 125, 316, 100, 23) GUISetState(@SW_SHOW) Local $iMsg Do $iMsg = GUIGetMsg() If $iMsg = $idButton Then _WinAPI_PlaySound($pWave, BitOR($SND_ASYNC, $SND_MEMORY, $SND_NOWAIT)) EndIf Until $iMsg = $GUI_EVENT_CLOSE ; Libère les ressources _WinAPI_RemoveFontMemResourceEx($hFont) FileDelete($sJpg)