IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Comment utiliser une Font en fichier de ressources (.res) ?


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Points : 47
    Points
    47
    Par défaut Comment utiliser une Font en fichier de ressources (.res) ?
    Bonjour,

    Je voudrais utiliser une fonte (par exemple MATURA) qui se trouve dans un fichier de ressources.

    J'ai déjà utilisé la méthode LoadFromResourcesName pour des bitmap
    ou encore TResourceStream.Create(hinstance, 'IMAGEACCUEIL', RT_RCDATA); pour extraire une image jpg d'un .res, mais
    TResourceStream.Create(hinstance, 'MATURA', RT_FONT) ne m'amène à rien.

    Comment faire donc pour affecter une fonte se trouvant dans un fichier .res à un TLabel (par exemple), sans que cette fonte ne soit installée dans le PC ?

    Merci.

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 965
    Points
    6 965
    Par défaut
    J'avais trouvé ca, il y a quelque temps :
    Tu mets tes fichiers polices avec ton application et dans OnCreate tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    procedure TForm1.FormCreate(Sender: TObject); 
    var haFont : HFONT; 
        WinTempDir : PChar; 
    begin 
    GetMem(WinTempDir,255); 
    GetTempPath(255,WinTempDir); 
    GetTempFileName(WinTempDir,'Xdf',3,FileNameTemp); 
    CreateScalableFontResource(0,FileNameTemp,'lhandw.ttf',nil); 
    AddFontResource(FileNameTemp);//Lucida Handwriting 
    haFont:=CreateFont (18,7,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS, 
                       CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH or FF_ROMAN, 
                       'Lucida Handwriting'); 
    Label1.Font.Handle:=haFont; 
    Label4.Font.Handle:=haFont; 
    Label5.Font.Handle:=haFont; 
    haFont:=CreateFont (46,20,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS, 
                       CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH or FF_ROMAN, 
                       'Lucida Handwriting'); 
    RxLabel1.Font.Handle:=haFont; 
    RxLabel2.Font.Handle:=haFont; 
    end;
    Puis dans le OnClose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RemoveFontResource(FileNameTemp); 
    DeleteFile(FileNameTemp); 
    SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileNameTemp : Array[0..1024] of Char;
    Comme variale global.

    Ici j'utilise du Lucida Handwriting du fichier 'lhandw.ttf' dans des TRxLabel (idem TLabel).
    Mais, sauf si c'est pour un programme qui est par exemple sur un CD, il est préférable d'installer les polices avec ton application.
    Je te le donne tel quel. Je ne l'ai pas testé ...

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Points : 47
    Points
    47
    Par défaut
    Merci pour la réponse.

    Si je comprends bien, je dois d'abord extraire le fichier *.TTF de la fonte de mon .res et le copier en temporaire quelque part avant de pouvoir utiliser le code que tu m'indiques ?

    J'essaye

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Points : 47
    Points
    47
    Par défaut
    J'ai donc mis ça dans le create, et ça va bien comme je veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        GetMem(WinTempDir,255);
        GetTempPath(255,WinTempDir);
     
        Res := TResourceStream.Create(hinstance, 'MATURASC_TTF', RT_RCDATA);
        Res.SaveTofile(WinTempDir + 'MATURASC.TTF');
     
        GetTempFileName(WinTempDir,'Xdf',3,FileNameTemp);
        CreateScalableFontResource(1,FileNameTemp, pchar(Path_appli + 'MATURASC.TTF'),nil);
        AddFontResource(FileNameTemp);
        haFont:=CreateFont (-24,12,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH or FF_ROMAN,'Matura MT Script Capitals');
        MonLabel1.Font.Handle:=haFont;
     
        DeleteFile(WinTempDir + 'MATURASC.TTF');
    en utilisant tes déclarations de variable plus Res de type TResourceStream
    et en n'oubliant pas le code dans destroy, mais

    j'ai dû mettre mon fichier Font.tty dans le .res en tant que RCDATA et en le copiant en temporaire avant de l'exécuter.

    Toutefois, il existe bien un type de ressource FONT qui serait peut-être plus indiqué, sinon il n'existerait pas... Mais je ne sais pas m'en servir, c'est là mon drame

    En tout cas, merci, ça marche !

    Amitiés.

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 965
    Points
    6 965
    Par défaut
    Citation Envoyé par ybruant

    En tout cas, merci, ça marche !
    De rien.
    N'oublie pas le tag [Résolu]

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Points : 47
    Points
    47
    Par défaut
    J'aurais aimé une réponse concernant l'utilisation d'une ressource FONT directement

    Demain matin, si ya pas, je dirai 'résolu', promis

  7. #7
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 152
    Points
    10 152
    Par défaut
    Citation Envoyé par ybruant
    J'aurais aimé une réponse concernant l'utilisation d'une ressource FONT directement

    Demain matin, si ya pas, je dirai 'résolu', promis
    C'est impossible, vu la façon dont Windows gère les polices...
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut Re: Font en fichier de ressources (.res)
    Citation Envoyé par ybruant
    Je voudrais utiliser une fonte (par exemple MATURA) qui se trouve dans un fichier de ressources.
    Attention à l'aspect légal : beaucoup de fontes sont copyrightées, et leur usage est soumis à l'achat, possession et installation d'un autre logiciel (MS Office, Acrobat Reader, etc...). Elles ne sont donc pas libres de droits, ni redistribuables : tu n'as donc pas le droit de les inclure dans tes propres programmes.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Points : 47
    Points
    47
    Par défaut
    Merci pour toutes les réponses, et naturellement d'accord pour l'aspect copyright

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment utiliser une font special (skia)
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 20/03/2012, 09h43
  2. Réponses: 8
    Dernier message: 02/11/2010, 16h24
  3. Réponses: 5
    Dernier message: 31/03/2010, 23h59
  4. Réponses: 10
    Dernier message: 08/02/2007, 13h18
  5. Réponses: 2
    Dernier message: 14/05/2006, 19h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo