Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: Cymas en Enero 05, 2015, 03:03:56 am
-
De antemano gracias por la ayuda.
Soy nuevo así que si me lo ponen como receta mucho mejor... gracias.
Necesito extraer una fuente(.ttf) personalizada que está en el archivo de recursos del proyecto y al mismo tiempo como poder utilizarla para mostrar el contenido de un label con esa fuente.
Sin registrar el archivo ttf en la carpeta Fonts del win.
Function ExtraerFuente() as stdfont
extraerfuente = recursos.mifuente
end function
por ejemplo.
-
Agregas la fuente en un archivo de recursos, en el ejemplo yo cargue la fuente como TTF, luego llamas a la funcion LoadResourceFont(<nombre de la fuente>) y listo, la fuente va a estar disponible en el contexto de tu programa. Si tenes problemas luego subo un ejemplo completo pero tendrias que poder hacerlo funcionar.
'---------------------------------------------------------------------------------------
' Module : mLoadResFont
' Author : Cobein
' Date : 28/10/2011
' Purpose : Load font from resource
'---------------------------------------------------------------------------------------
Option Explicit
Private Declare Function LoadResource Lib "kernel32.dll" (ByVal hInstance As Long, ByVal hResInfo As Long) As Long
Private Declare Function FindResource Lib "kernel32.dll" Alias "FindResourceA" (ByVal hInstance As Long, ByVal lpName As String, ByVal lpType As String) As Long
Private Declare Function SizeofResource Lib "kernel32.dll" (ByVal hInstance As Long, ByVal hResInfo As Long) As Long
Private Declare Function AddFontMemResourceEx Lib "gdi32.dll" (ByVal pvoid As Long, ByVal dword As Long, ByVal DESIGNVECTOR As Long, ByVal pDword As Long) As Long
Private Declare Function CreateFont Lib "gdi32.dll" Alias "CreateFontA" (ByVal pbFont As Long, ByVal cbFont As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal I As Long, ByVal u As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long
Public Function LoadResourceFont(ByVal sFontName As String) As Long
Dim lResource As Long
Dim lAddress As Long
Dim lSize As Long
Dim lCount As Long
On Error GoTo LoadResourceFont_Error
lResource = FindResource(App.hInstance, sFontName, "TTF") 'Im using TTF with XN resource Editor but you can use RT_FONT
lAddress = LoadResource(App.hInstance, lResource)
lSize = SizeofResource(App.hInstance, lResource)
LoadResourceFont = AddFontMemResourceEx(lAddress, lSize, ByVal 0&, VarPtr(lCount))
On Error GoTo 0
Exit Function
LoadResourceFont_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure LoadResourceFont of Módulo mLoadResFont"
End Function
-
Disculpa cobein pero no logro hacer que la fuente que esta en el archivo de recursos se cargue en memoria (supongo que eso es lo que hace), como debería hacerse exactamente la llamada a la función y si es necesaria alguna variable que almacene la fuente.
Una pregunta mas el nombre de la fuente al que se hace referencia en la llamada a la función es la del archivo que se cargó en el .res o es el numero que lo identifica en los recursos.
¿podría ser así? ???
Dim Fuente as long
sub algun_procedimiento
fuente = LoadResourceFont("Mi_Fuente.ttf")
label1.font = fuente
end sub
¿O como debe ser?
Gracias por responder
-
Adjunto un ejemplo, un detalle que olvide decir es que tiene que estar compilado para que funcione. Esto no es problema porque durante el desarrollo podes instar las fuentes en el sistema sin ningún problema.
Use XN resource editor.
Hay tres nombres que tenes que tener en cuenta, primero el de la sección del recurso en este caso "TTF", luego el recurso en si que seria "TTF1" y por ultimo el nombre de la fuente "Code 128".
https://dl.dropboxusercontent.com/u/43394978/Font.rar
Saludos
-
Gracias amigo cobein, esta cuestión de las fuentes ¡¡¡ya fue resuelta!!!
Yo utilizo el Resource Hacker y también funciona de maravilla
es para poner la fuente en un control de usuario ya voy a probar el code supongo que funcionará.
Ya pueden cerrar el tema.
Saludos desde S.M. Guatemala
-
Buenas, se qué es un tema antiguo, pero el fichero del Dropbox ya no existe.
Alguien podría guiarme en el paso final?
He grabado la fuente en el archivo de recursos
Lo he grabado
La cargo con
Dim fuente as long
fuente = LoadResourceFont("bc39") (la he llamado así en ttf1)
Pero cobein dice que hay que saber el nombre de la fuente, así que antes de:
label1.font = fuente
Tengo que cambiar eso por el nombre, pero no doy con la tecla.
Una ayudita?
Muchas gracias!
-
Listo!
No hay que hacer nada más que llamar al recurso con LoadResourceFont "BC39", sin asignarlo a ninguna variable ni nada, y automáticamente la fuente queda disponible en el sistema para su uso, llamándola por su nombre completo, claro.
Gracias !
-
Hola gracias por compartir podria subir algun ejemplo para entenderlo mejor gracias...