Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата Johny777:
тк на день раз 20 запускаю для теста основы и очень часто оба примера перестают работать через несколько повторных запусков »
Johny777, Несколько замечаний по обоим примерам кастомного шрифта:
1. Совсем не обязательно рассылать сообщение WM_FONTCHANGE всем top-level окнам, достаточно послать форме. А можно и вообще Send/PostMessage убрать.
2. FontExists лучше делать до вызова AddFontResource, т.к. шрифт может быть уже установленым в системе и повторное его добавление это не есть хорошо.
3. Булев флаг IsCustomFontInstalled лишний.
4. Все это лучше не делать в функции InitializeSetup, когда формы еще нет.
5. Применить для уверенности функцию AddFontResourceEx, зная что шрифт будет использован только вызываемым приложением.
читать дальше »

Код: Выделить весь код
#define Font "Edisson.ttf"
#define FontName "Edisson"

[Files]
Source: {#Font}; Flags: dontcopy

[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
    FR_PRIVATE = $10;

function AddFontResource(lpszFilename: String; fl, pdv: DWORD): Integer; external 'AddFontResourceEx{#A}@gdi32.dll stdcall';
function RemoveFontResource(lpFileName: String; fl, pdv: DWORD): BOOL; external 'RemoveFontResourceEx{#A}@gdi32.dll stdcall';

procedure InitializeWizard();
begin
    if not FontExists('{#FontName}') then
    begin
        ExtractTemporaryFile('{#Font}');
        AddFontResource(ExpandConstant('{tmp}\{#Font}'), FR_PRIVATE, 0);
    end;
    WizardForm.Font.Name := '{#FontName}';
end;

procedure DeinitializeSetup();
begin
    RemoveFontResource(ExpandConstant('{tmp}\{#Font}'), FR_PRIVATE, 0);
    WizardForm.Free;
end;

Последний раз редактировалось El Sanchez, 10-03-2012 в 13:07. Причина: не удалялся шрифт

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:48, 09-03-2012 | #964