Problème de transtypage

Problème de transtypage - Delphi/Pascal - Programmation

Marsh Posté le 13-10-2014 à 18:09:57    

Bonjour à tous :)
 
Un source très utile  -trouvé sur le Net- et qui ne passe pas chez moi :  

Code :
  1. // -> http://msdn.microsoft.com/library/ms534231
  2. // Copie le fichier de police dans le répertoire Fonts de Windows
  3. CopyFile('Police.ttf', Pchar(RepertoiresSpeciaux(CSIDL_FONTS) + '\Police.ttf'), False);
  4. // Ajoute la police à la liste des polices de Windows
  5. AddFontResource(Pchar(RepertoiresSpeciaux(CSIDL_FONTS) + '\Widgets.ttf'));
  6. // Envoi un message à tous les programmes ouverts pour leur annoncer
  7. // qu'une police à été ajoutée
  8. SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);


 
Mais voilà... Les variables d'environnement en "CSIDL" ne sont plus valides. GetEnvironmentVariable() et GetKnownFolderPath() . Or, je ne connais pas cette foutue variable d'environnement pour les fontes ! Je ne peux donc pas l'initialiser. :/  
 
J'ai donc tenté ceci :  
 

Code :
  1. Rep_Dest := Path_System_Root + '\FONTS';   // C:\Windows\Fonts
  2.       Nom_F_Police := 'MISTRAL.TTF';
  3.       // Copie le fichier de police dans le répertoire Fonts de Windows
  4.       CopyFile( PChar(Nom_F_Police),  Pchar(Rep_Dest), False);
  5.       // Ajoute la police à la liste des polices de Windows
  6.       AddFontResource(Pchar(Rep_Dest) + '\' + AnsiChar(Nom_F_Police) );  // Paf ! Transtypage incorrect !
  7.       // Envoi un message à tous les programmes ouverts pour leur annoncer qu'une police à été ajoutée
  8.       SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);


 
Comment tyranstyper correctement, dans ce cas-là ?  
 
Merci.


Message édité par HERIBERT le 13-10-2014 à 18:10:44
Reply

Marsh Posté le 13-10-2014 à 18:09:57   

Reply

Marsh Posté le 17-10-2014 à 11:13:19    

CSIDL_FONTS est définie dans l'unité shlobj..
 

Code :
  1. //ShlObj
  2.   CSIDL_DESKTOP                 = $0000;
  3.   CSIDL_INTERNET                = $0001;
  4.   CSIDL_PROGRAMS                = $0002;
  5.   CSIDL_CONTROLS                = $0003;
  6.   CSIDL_PRINTERS                = $0004;
  7.   CSIDL_PERSONAL                = $0005;
  8.   CSIDL_FAVORITES               = $0006;
  9.   CSIDL_STARTUP                 = $0007;
  10.   CSIDL_RECENT                  = $0008;
  11.   CSIDL_SENDTO                  = $0009;
  12.   CSIDL_BITBUCKET               = $000a;
  13.   CSIDL_STARTMENU               = $000b;
  14.   CSIDL_DESKTOPDIRECTORY        = $0010;
  15.   CSIDL_DRIVES                  = $0011;
  16.   CSIDL_NETWORK                 = $0012;
  17.   CSIDL_NETHOOD                 = $0013;
  18.   CSIDL_FONTS                   = $0014;
  19.   CSIDL_TEMPLATES               = $0015;
  20.   CSIDL_COMMON_STARTMENU        = $0016;
  21.   CSIDL_COMMON_PROGRAMS         = $0017;
  22.   CSIDL_COMMON_STARTUP          = $0018;
  23.   CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
  24.   CSIDL_APPDATA                 = $001a;
  25.   CSIDL_PRINTHOOD               = $001b;
  26.   CSIDL_ALTSTARTUP              = $001d;
  27.   CSIDL_COMMON_ALTSTARTUP       = $001e;
  28.   CSIDL_COMMON_FAVORITES        = $001f;
  29.   CSIDL_INTERNET_CACHE          = $0020;
  30.   CSIDL_COOKIES                 = $0021;
  31.   CSIDL_HISTORY                 = $0022;
  32. // a ajouter
  33.   CSIDL_COMMON_APPDATA          = $0023;
  34.   CSIDL_WINDOWS                 = $0024;
  35.   CSIDL_SYSTEM                  = $0025;
  36.   CSIDL_PROGRAM_FILES           = $0026;
  37.   CSIDL_MYPICTURES              = $0027;
  38.   CSIDL_PROFILE                 = $0028;
  39.   CSIDL_SYSTEMX86               = $0029;
  40.   CSIDL_PROGRAM_FILESX86        = $002A;
  41.   CSIDL_PROGRAM_FILES_COMMON    = $002B;
  42.   CSIDL_PROGRAM_FILES_COMMONX86 = $002C;
  43.   CSIDL_COMMON_TEMPLATES        = $002D;
  44.   CSIDL_COMMON_DOCUMENTS        = $002E;
  45.   CSIDL_COMMON_ADMINTOOLS       = $002F;
  46.   CSIDL_ADMINTOOLS              = $0030;
  47.   CSIDL_FLAG_CREATE             = $8000;
  48.   CSIDL_FLAG_DONT_VERIFY        = $4000;
  49.   CSIDL_FLAG_MASK               = $FF00;

Reply

Marsh Posté le 17-10-2014 à 12:31:43    

Ah.. OK, merci ;) Toujours utile à  savoir !  
 
Alors pour le code que j'ai posté, ne pas en tenir compte : aucun besoin de transtypage. J'étais un peu fatigué :D
 

Code :
  1. {
  2.       Rep_Dest, Nom_Court_F_Police, Nom_Cplt_F_Police sont des string
  3. }
  4.       Rep_Dest := Path_System_Root + '\FONTS';   // C:\Windows\Fonts
  5.       Nom_Court_F_Police := ExtractFileName(Nom_F);
  6.       Nom_Cplt_F_Police := Rep_Dest + '\' + Nom_Court_F_Police;
  7.       // Copie le fichier de police dans le répertoire Fonts de Windows
  8.       CopyFile( PChar(Nom_Court_F_Police),  PChar(Nom_Cplt_F_Police), False);
  9.       // Ajoute la police à la liste des polices de Windows
  10.       Retour := AddFontResource(Pchar(Nom_Cplt_F_Police));


Message édité par gilou le 17-10-2014 à 14:12:09
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed