 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 12 Nov, 2007 7:32 am Asunto: Font en DLL |
|
|
Hola me toca preguntar.
Estoy usando un archivo de recursos, para usar una fuente, como muchos saben, la fuente al estar inmersa en un archivo de recursos esta agranda el ejecutable pues al compilarse la fuente se "une" al archivo final.
usado este metodo:
| Código: | Archivo.rc
------------
ttfCALIBRI RCDATA "CALIBRI.TTF" //CALIBRI |
y cargando la fuente en alguna parte de mi programa con la siguiente rutina, que lo que realmente hace es extraer del archivo de recursos, la fuente y grabarla en el directorio de mi aplicacion
| Código: | TResourceStream(0,"ccCALIBRIB", RT_RCDATA).SaveToFile("CALIBRIB.TTF");
if( !AddFontResource("CALIBRII.TTF"))
return false;
else
::SendMessage(HWND_BROADCAST, WM_FONTCHANGE,0,0); |
le indico a windows, con la funcion AddFontResource que la carge en el directorio de Fonts y posteriormente con SendMessage le indico a todas las ventanas que he realizado un cambio de fuente (agregar/eliminar)
ahora bien, para usar la fuente pero contenida en una DLL, el archivo de recursos cambia, segun la ayuda de builder asi debe ser la definicion del archivo para la fuente pues contiene el IDs <-- esto ultimo me ha costado trabajo entender
| Código: | Archivo1.rc
6 FONT "CALIBRI.TTF" |
verificando la ayuda del mismo builder y en otro apartado dice que el archivo debe ser de la siguiente manera.
| Código: | Archivo2.rc
FONT 12 "CALIBRI.TTF" |
Indicando que el numero 12 es el tamaño de la fuente y no el identificador de la fuente.
el problema es que por mas que busco la manera de cargar la fuente desde una DLL no he podido conseguirla.
¿Alguna Idea?
Gracias, por leer el post de manera anticipada. _________________
 |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 24 Nov, 2007 9:19 pm Asunto: |
|
|
| César C. Salazar González escribió: | | FONT 12 "CALIBRI.TTF" |
Esta sintaxis se refiere solo a cuando creas un dialogo en un archivo de recursos para especificar la fuente por defecto en el mismo.
Una opción que funciona bastante bien es usando la función del API "AddFontMemResourceEx", aunque esta solo funciona en Windows 2000 o superior.
Un pequeño ejemplo. En el archivo RC:
| Código: | miFuente RCDATA "LCDmono2.TTF" |
En el form principal:
| Código: | class TForm1 : public TForm
{
//...
protected:
virtual void __fastcall CreateWnd(void)
{
inherited::CreateWnd();
std::auto_ptr<TResourceStream> rc(new TResourceStream(0, "miFuente", RT_RCDATA));
DWORD cFonts = 0;
AddFontMemResourceEx(rc->Memory, rc->Size, 0, &cFonts);
}
//...
}; |
|
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Dom 25 Nov, 2007 1:48 am Asunto: |
|
|
Gracias _Leo, La funcion es en relativa el proceso que ando buscando, es decir, la idea principal de cargar la fuente "tal y como si fuera una función" y que solo sea usada por mi aplicación en tiempo de ejecución es lo mas acertado.
Con el proceso que me indicas, puedo "instalar" literalmente una fuente unica y exclusivamente cuando mi programa se esta ejecutando, al finalizar la actividad puedo usar funcion "RemoveFontMemResourceEx" al cual le paso como parametro el valor regresado por la función "AddFontMemResourceEx" para remover la fuente y hacer de cuenta que "nunca" se instaló.
Gracias por la respuesta. _________________
 |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 25 Nov, 2007 1:55 am Asunto: |
|
|
En la referencia del API pone:
"However, when the process goes away, the system will unload the fonts even if the process did not call RemoveFontMemResource."
Por lo que aunque no llames a RemoveFont... al finalizar el proceso se descarga la fuente. Aunque bueno, siempre queda más claro llamándola o bien si necesitas liberarlas antes de finalizar, en algún plugin etc... |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|