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

Lazarus Pascal Discussion :

[LazReport][Windows 7] Sélectionner une police sans l'installer [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut [LazReport][Windows 7] Sélectionner une police sans l'installer
    Bonjour,

    Je suis confronté à un blocage. J'ai développé une application au travail.
    L'application s’installe avec un Setup.exe. Lors de l'installation, une police d’écriture spécifique est installée dans le répertoire Font de Windows.
    Problème : Depuis la migration de nos machines vers Windows 7, il est impossible pour un utilisateur d'installer une police d'écriture. Ce "privilège" est réservé aux administrateurs.

    Je dois donc trouver un moyen pour que LazReport puisse utiliser la police d'écriture sans qu'elle soit installée.
    J'ai cherché, et j'ai essayé ceci mais sans résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      If (View.Name = 'Memo4') THen (frReport1.Pages.Pages[0].FindObject('Memo4') as TfrMemoView).Font.Name:=ExtractFilePath(Application.ExeName) + 'c39hrp24dhtt.ttf';
    LazReport ne semble pas reconnaître le fichier ttf.

    Existe-t-il une solution ?

    Cordialement,

  2. #2
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Re,

    Je suis sur une piste, il semble que la solution se tourne vers l'API : AddFontMemResourceEx

    Je n'arrive pas à essayer le code trouvé car je n'arrive pas à mettre la main sur le nom à rajouter dans la close uses de mon code...

    Je vous tiens informé.

  3. #3
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    J'ai visiblement trouvé la solution.

    Pensez à ajouter "Windows" aux "uses" du fichier Unit.
    Dans la procedure FormCreate de mon premier formulaire, j'ai ajouté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AddFontResource(PChar((ExtractFilePath(Application.ExeName) + 'c39hrp24dhtt.ttf')));
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
    Ensuite, dans la procedure FormDestroy j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RemoveFontResource(PChar((ExtractFilePath(Application.ExeName) + 'c39hrp24dhtt.ttf')) ;
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
    Cela semble fonctionner...

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Bonsoir,

    Suite à lecture attentive de cette discussion puis essai du code donné par RAW en fin de page 2 (4e post en partant du bas), et malgré le fait que l'auteur a écrit "This runs fine too in D7 AND in LAZARUS !!! (W7 x64)", j'ai le regret de vous informer que chez moi (machine virtuelle XP SP2 32 bits et Lazarus 1.6 rc1) ça ne fonctionne absolument pas...

    J'ai fait une microscopique modification du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          if ChargementOk
          Then SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)
          Else ShowMessage('Error loading ' +strFontPath+'\'+FileListBox1.Items[i]);// ajout
    qui me permet de voir si ça coince ou pas et non, ça ne coince pas, mais après l'exécution du chargement, rien n'est chargé...

    Je suis retourné aux sources (code Delphi7 compilé sous Win2000) et l'exécutable généré par cette compilation fonctionne très bien, le problème semble donc être du côté du binaire généré par Lazarus,
    Et je ne sais pas du tout où chercher.


    /!\ IMPORTANT /!\ IMPORTANT /!\ IMPORTANT /!\

    Par ailleurs, ces manipulations m'ont permis de constater que parfois, une police trouvée sur le web ne peut pas être chargée avec l'outil compilé par Delphi (qui s'appuie sur le couple AddFontResource/RemoveFontResource), alors que d'autres polices sont parfaitement bien chargées.
    Bon courage pour trier vos fichiers, car l'outil Windows fonctionne toujours correctement, et ça, c'est désagréable.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Bonjour,

    La solution que j'avais trouvée en son temps pour faire fonctionner tout ça sous Delphi était d'utiliser le nom du fichier d'une manière pas habituelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      for i := 0 to FileListBox1.Items.Count - 1 do // les polices supplémentaires sont classées dans des dossiers bien précis choisis en amont
      begin
        sFontfile := workdir + FileListBox1.Items[i] + #0; // noter l'ajout du #0
        if AddFontResource(@sFontfile[1]) // et l'arrobase et les crochets 
        then SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)
        else ShowMessage('Error loading ' + sFontfile);
    J'ai repassé cette combine sous Lazarus et ça fonctionne.

    Sauf pour les fichiers mal formés, comme je le disais hier soir.
    Mais ça, on n'y peut pas grand chose...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Sauf pour les fichiers mal formés, comme je le disais hier soir.
    Mais ça, on n'y peut pas grand chose...
    En fait, les fichiers doivent être bien formés, le souci semble venir de l'âge des outils utilisés pour les visionner.

    Plus d'explications dans ce post et celui qui le suit, chronologiquement parlant.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. [WD18] utiliser une police sans qu'on puisse l'installer sur le client ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 4
    Dernier message: 21/10/2013, 08h16
  2. [VB6] [Excel] Feuille dans une form, sans excel installé
    Par ro2v dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 05/05/2010, 12h45
  3. Utiliser une font sans l'installer.
    Par Masterglob dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 17/07/2008, 09h14
  4. Réponses: 1
    Dernier message: 26/07/2006, 17h02
  5. [Interbase] Utiliser une BD sans devoir installer le client?
    Par MiJack dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2006, 18h41

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