Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Font en DLL

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Font en DLL Responder citando

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.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.