Что нового

Проблема с использованием ресурса "шрифт"

saraconor

Новичок
Сообщения
379
Репутация
2
Попытка использовать данный пример http://autoit-script.ru/index.php?topic=2849.0#post_15 ни к чему не приводит. Шрифт не устанавливается почему-то, и текст остается Arial.
Что может быть не так?
Порывшись в справке вижу что функция _WinAPI_AddFontMemResourceEx использует MemFont.au3 - которого в Include найти не удалось. Может быть в этом проблема? Если так, то выложите пожалуйста сюда.
 

joiner

Модератор
Локальный модератор
Сообщения
3,385
Репутация
592
Код:
#Region
#AutoIt3Wrapper_Res_File_Add=Still Time Cyr.ttf, 8, My_font
#EndRegion

#include <WinAPIEx.au3>
Local $hInstance = _WinAPI_LoadLibraryEx(@ScriptFullPath, $LOAD_LIBRARY_AS_DATAFILE)
_LoadResourceFont($hInstance, 8, 'My_font')
GUICreate('MyProg', 280, 100)
GUICtrlCreateLabel('qerty', 38, 23, 204, 54)
GUICtrlSetFont(-1, 30, 800, 0, 'Still Time Cyr');точное имя шрифта(обязательно)
GUICtrlSetColor(-1, 0xE00000)
GUISetState()

Do
Until GUIGetMsg() = -3

Func _LoadResourceFont($hInstance, $sResType, $sResName, $iResLanguage = 0)
	Local $hInfo, $hData, $pData, $iSize, $hFont
	If $iResLanguage Then
		$hInfo = _WinAPI_FindResourceEx($hInstance, $sResType, $sResName, $iResLanguage)
	Else
		$hInfo = _WinAPI_FindResource($hInstance, $sResType, $sResName)
	EndIf
	$hData = _WinAPI_LoadResource($hInstance, $hInfo)
	$iSize = _WinAPI_SizeOfResource($hInstance, $hInfo)
	$pData = _WinAPI_LockResource($hData)
	If @error Then
		Return SetError(1, 0, 0)
	EndIf
	$hFont = _WinAPI_AddFontMemResourceEx($pData, $iSize)
	If @error Then
		_WinAPI_FreeLibrary($hInstance)
		Return SetError(1, 0, 0)
	EndIf
	_WinAPI_FreeLibrary($hInstance)
	Return $hFont
EndFunc   ;==>_LoadResourceFont
 

joiner

Модератор
Локальный модератор
Сообщения
3,385
Репутация
592
это работа с ресурсами. а значит, код нужно компилировать
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    10.2 КБ · Просмотры: 3
Автор
S

saraconor

Новичок
Сообщения
379
Репутация
2

Тоже самое в скомпилированном виде. В общем причина найдена: сделовало удалить символы _ из названия файла шрифта.
 

joiner

Модератор
Локальный модератор
Сообщения
3,385
Репутация
592
как можно без компиляции делать
Код:
#Region
#AutoIt3Wrapper_Res_File_Add=Still Time Cyr.ttf, 8, My_font
#EndRegion

#include <WinAPIEx.au3>
Local $hInstance
If @Compiled Then
	$hInstance = _WinAPI_LoadLibraryEx(@ScriptFullPath, $LOAD_LIBRARY_AS_DATAFILE)
	_LoadResourceFont($hInstance, 8, 'My_font')
Else
	_WinAPI_AddFontResourceEx(@ScriptDir & '\Still Time Cyr.ttf', $FR_PRIVATE)
EndIf

GUICreate('MyProg', 280, 100)
GUICtrlCreateLabel('Привет всем', 38, 23, 204, 54)
GUICtrlSetFont(-1, 30, 800, 0, 'Still Time Cyr');точное имя шрифта(обязательно)
GUICtrlSetColor(-1, 0xE00000)
GUISetState()

Do
Until GUIGetMsg() = -3

Func _LoadResourceFont($hInstance, $sResType, $sResName, $iResLanguage = 0)
	Local $hInfo, $hData, $pData, $iSize, $hFont
	If $iResLanguage Then
		$hInfo = _WinAPI_FindResourceEx($hInstance, $sResType, $sResName, $iResLanguage)
	Else
		$hInfo = _WinAPI_FindResource($hInstance, $sResType, $sResName)
	EndIf
	$hData = _WinAPI_LoadResource($hInstance, $hInfo)
	$iSize = _WinAPI_SizeOfResource($hInstance, $hInfo)
	$pData = _WinAPI_LockResource($hData)
	If @error Then
		Return SetError(1, 0, 0)
	EndIf
	$hFont = _WinAPI_AddFontMemResourceEx($pData, $iSize)
	If @error Then
		Return SetError(1, 0, 0)
	EndIf
	Return $hFont
EndFunc   ;==>_LoadResourceFont
 
Верх