Font aus Ressource?

  • Moin,

    ihr kennt sicherlich die resources.udf, mit der man kompilierte Ressourcen verwenden kann.

    Selbiges suche ich für Fonts. Ich möchte das Ganze als Ressource einbetten alá

    [autoit]

    #AutoIt3Wrapper_Res_File_Add=font.ttf, rt_rcdata, myfont

    [/autoit]

    und später dann entsprechend nutzen:

    [autoit]

    _SetFontToCtrl($CtrlId, $hFont)

    [/autoit]

    Zur Zeit verwende ich folgende Funktion, um zumindest mitgelieferte Fonts nutzen zu können:

    [autoit]

    Func _GDI_AddFontResourceEx($lpszFilename, $fl, $pdv = 0) ;Progandy
    If Not IsNumber($pdv) Or $pdv <> 0 Then $pdv = 0
    Local $aResult = DllCall("gdi32.dll", 'int', 'AddFontResourceExW', 'wstr', $lpszFilename, 'dword', $fl, 'ptr', $pdv)
    If @error Then Return SetError(@error, 0, False)
    Return $aResult[0]
    EndFunc ;==>_GDI_AddFontResourceEx

    [/autoit]


    Wäre nice, wenn das geht und wenn mir jemand sagt, wie :)

    Danke im Vorraus.

    Einmal editiert, zuletzt von SoftCreatR (9. Januar 2012 um 12:51)

  • Hi,

    der Ablauf ist im Groben dieser:

    [autoit]

    Global $RT_FONT = 8 ; Font in RT_FONT den Ressourcen hinzufügen !
    Global $IDR_FONT = 101 ; $IDR_FONT ist der Identifizierer der Font-Ressource, hier z.B. 101

    [/autoit][autoit][/autoit][autoit]

    $cnFonts = DllStructCreate ("DWORD")
    $hResrc = FindResource (0, $IDR_FONT, $RT_FONT)
    $dwLength = SizeofResource (0, $hResrc)
    $hMemRes = LoadResource (0, $hResrc)
    $lpvData = LockResource ($hMemRes)
    $hResFont = AddFontMemResourceEx ($lpvData, $dwLength, 0, DllStructGetPtr ($cnFonts))

    [/autoit][autoit][/autoit][autoit]

    $hFont = CreateFont ("FontName", ...)

    [/autoit][autoit][/autoit][autoit]

    ; Font benutzen ...

    [/autoit][autoit][/autoit][autoit]

    ; Wenn Font nicht mehr benötigt wird

    [/autoit][autoit][/autoit][autoit]

    DeleteObject ($hFont) ; Nicht vergessen !
    RemoveFontMemResourceEx ($hResFont) ; Nicht vergessen !

    [/autoit]


    Gruß
    Greenhorn