Ressources

Utilisation du graphique et du son dans les programmes MQL5

Les programmes MQL5 permettent de travailler avec des fichiers sonores et graphiques :

 

PlaySound()

Exemple d'appel de la fonction PlaySound ():

//+------------------------------------------------------------------+
//| La fonction appelle OrderSend() et joue le son         |
//+------------------------------------------------------------------+
void OrderSendWithAudio(MqlTradeRequest  &request, MqlTradeResult &result)
  {
 //--- envoie une demande au serveur
   OrderSend(request,result);
 //--- si la demande est acceptée, joue un son Ok.wav
   if(result.retcode==TRADE_RETCODE_PLACEDPlaySound("Ok.wav");
   //--- si elle échoue, joue une alarme à partir du fichier timeout.wav
   else PlaySound("timeout.wav");
  }

Cet exemple montre comment jouer des sons à partir des fichiers Ok.wav et timeoit.wav, qui sont inclus dans le package du terminal standard. Ces fichiers se trouvent dans le dossier terminal_directory\Sounds. Ici terminal_directory est le dossier à partir duquel le terminal Client MetaTrader 5 est démarré. L'emplacement du répertoire du terminal peut être trouvé à partir d'un programme MQL5 de la manière suivante :

//--- Dossier dans lequel les données du terminal sont stockées
   string terminal_path=TerminalInfoString(TERMINAL_PATH);

Vous pouvez utiliser des fichiers audio non seulement à partir du dossier terminal_directory\Sounds mais aussi de n'importe quel sous-dossier qui se trouve dans le dossier terminal_data_directory\MQL5. Vous pouvez trouver l'emplacement du répertoire des données du terminal à partir du menu du terminal "Fichier" - "Ouvrir le répertoire des données" ou en utilisant la méthode du programme :

//--- Dossier dans lequel les données du terminal sont stockées
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);

Par exemple, si le fichier audio Demo.wav se trouve dans le terminal_data_directory\MQL5\Files, l'appel à la fonction PlaySound() doit être écrit ainsi :

//--- joue un fichier audio Demo.wav à partir du terminal_directory_data\MQL5\Files
   PlaySound("\\Files\\Demo.wav");

Veuillez noter que le chemin vers le fichier est écrit en utilisant le symbole "\" dans le commentaire, et dans la fonction, le double backslash "\\" est utilisé.

Lorsque vous spécifiez le chemin d'accès, utilisez toujours le double backslash comme séparateur, car un seule backslash est le symbole de commande pour le compilateur lorsqu'il traite des chaînes constantes et des constantes de caractères dans le code source du programme.

Appelez la fonction PlaySound() avec le paramètre NULL pour arrêter la lecture :

//--- Appelez la fonction PlaySound () avec le paramètre NULL pour arrêter la lecture
   PlaySound(NULL);

 

ObjectCreate()

Exemple d'un Expert Advisor qui crée une "Etiquette graphique" (OBJ_BITMAP_LABEL) en utilisant la fonction ObjectCreate().

string label_name="currency_label";        // le nom de l'objet OBJ_BITMAP_LABEL 
string euro      ="\\Images\\euro.bmp";    // le chemin vers le fichier terminal_data_directory\MQL5\Images\euro.bmp
string dollar    ="\\Images\\dollar.bmp";  // le chemin vers le fichier terminal_data_directory\MQL5\Images\dollar.bmp
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'Expert                           |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- créer un bouton OBJ_BITMAP_LABEL, s'il n'a pas été encore crée
   if(ObjectFind(0,label_name)<0)
     {
      //--- essaye de créer l'objet OBJ_BITMAP_LABEL
      bool created=ObjectCreate(0,label_name,OBJ_BITMAP_LABEL,0,0,0);
      if(created)
        {
         //--- place le bouton dans le coin supérieur gauche du graphique
         ObjectSetInteger(0,label_name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
 //--- configuration des propriétés d'un objet
         ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,100);
         ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,50);
         //--- réinitialisation du code de la dernière erreur à 0 
         ResetLastError();
         //--- chargement d'une image pour indiquer le bouton en mode "appuyé" 
         bool set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,0,euro);
         //--- vérification du résultat
         if(!set)
           {
            PrintFormat("Échec de chargement de l'image à partir du fichier %s. Le code de l'erreur %d",euro,GetLastError());
           }
         ResetLastError();
         //--- chargement d'une image pour indiquer le bouton en mode "non appuyé"
         set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,1,dollar);
         
         if(!set)
           {
            PrintFormat("Échec de chargement de l'image à partir du fichier %s. Le code de l'erreur %d",dollar,GetLastError());
           }
         //--- envoi d'une commande pour la mise à jour du graphique de sorte que le bouton apparaisse immédiatement, sans attendre le tick
         ChartRedraw(0);
        }
      else
        {
         //--- impossible de créer l'objet
         PrintFormat("Impossible de créer l'objet OBJ_BITMAP_LABEL. Le code de l'erreur %d",GetLastError());
        }
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Fonction de désinstallation de l'Expert                    |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- suppression d'un objet du graphique
   ObjectDelete(0,label_name);
  }

La création et la configuration d'un objet graphique nommé currency_label sont effectuées dans la fonction OnInit(). Les chemins d'accès aux fichiers graphiques sont définis dans les variables globales euro et dollar, un double backslash est utilisé comme séparateur :

string euro      ="\\Images\\euro.bmp";    // le chemin vers le fichier terminal_data_directory\MQL5\Images\euro.bmp
string dollar    ="\\Images\\dollar.bmp";  // le chemin vers le fichier terminal_data_directory\MQL5\Images\dollar.bmp

Les fichiers se trouvent dans le dossier terminal_data_directory\MQL5\Images.

L'objet OBJ_BITMAP_LABEL est un bouton, qui affiche l'une des deux images en fonction de l'état du bouton (appuyé ou non) : euro.bmp ou dollar.bmp.

Propriétés de l'objet OBJ_BITMAP_LABEL

La taille du bouton avec une interface graphique est automatiquement ajustée à la taille de l'image. L'image est modifiée avec le bouton gauche de la souris sur l'objet OBJ_BITMAP_LABEL ( l'option "Désactiver la sélection" doit être cochée dans les propriétés). L'objet OBJ_BITMAP est créé de la même manière et est destiné à la création de l'arrière-plan avec le dessin demandé.

La valeur de la propriété OBJPROP_BMPFILE, qui est responsable de l'apparition des objets OBJ_BITMAP et OBJ_BITMAP_LABEL, peut être modifié dynamiquement. Cela permet de créer différentes interfaces utilisateur interactives pour les programmes MQL5.

 

Inclusion de ressources vers des fichiers exécutables lors de la compilation des programmes MQL5

Un programme MQL5 peut avoir besoin de beaucoup de ressources différentes téléchargeables sous forme de fichiers image et son. Afin d'éliminer la nécessité de transférer tous ces fichiers lors du déplacement d'un fichier exécutable dans MQL5, il faut utiliser la directive du compilateur #resource:

 #resource doit être utilisé : #resource path_to_resource_file

La commande #resource indique au compilateur que la ressource du chemin spécifié path_to_resource_file doit être inclus dans le fichier exécutable EX5. Ainsi, toutes les images et tous les sons nécessaires peuvent être placés directement dans un fichier EX5, de sorte qu'il n'y a pas besoin de transférer séparément les fichiers utilisés, si vous voulez exécuter le programme sur un autre terminal. N'importe quel fichier EX5 peut contenir des ressources et n'importe quel programme EX5 peut utiliser les ressources d'un autre programme EX5.

Les fichiers en format BMP et WAV sont automatiquement compressées avant de les inclure dans un fichier EX5. Cela signifie que, en plus de la création de programmes complets dans MQL5, utiliser les ressources permet également de réduire la taille totale des fichiers nécessaires lors de l'utilisation des graphiques et des sons, par rapport à la façon traditionnelle d'écriture des programmes MQL5 .

La taille du fichier de ressources ne doit pas dépasser 16 Mo.

 

Recherche des ressources spécifiées par le compilateur

La ressource est insérée en utilisant la commande #resource "<chemin vers le fichier ressource>"

 #resource "<chemin vers le fichier ressource>"

La longueur de la chaîne constante <chemin vers le fichier ressource> ne doit pas dépasser 63 caractères.

Le compilateur recherche la ressource selon le chemin spécifié dans l'ordre suivant :

  • si le séparateur backslash "\" (écrit comme "\\") est placé au début du chemin, il recherche la ressource par rapport au répertoire terminal_data_directory \MQL5\,
  • s'il n'y a pas de backslash, il recherche la ressource par rapport à l'emplacement du fichier source, dans lequel la ressource est écrite.

Le chemin de la ressource ne peut pas contenir les sous-chaînes "..\\" et ":\\"

Exemples d'insertion de ressources :

//--- indication des ressources
#resource "\\Images\\euro.bmp" // euro.bmp se trouve dans terminal_data_directory\MQL5\Images\
#resource "picture.bmp"        // picture.bmp se trouve dans le même répertoire que le fichier source
#resource "Resource\\map.bmp"  // la ressource se trouve dans le dossier source_file_directory\Resource\map.bmp
 
//--- indication incorrecte des ressources
#resource ": picture_2.bmp"     // ne doit pas contenir ":"
#resource "..\\picture_3.bmp"  // ne doit pas contenir ".."
#resource "\\Files\\Images\\Folder_First\\My_panel\\Labels\\too_long_path.bmp" // plus de 63 caractères

 

Utilisation des ressources

Nom de la ressource

Quand la ressource est déclarée en utilisant la directive #resource, on peut l'utiliser dans n'importe quelle partie du programme. Le nom de la ressource devient son chemin sans le backslash au début de la ligne qui spécifie le chemin d'accès à la ressource. Pour utiliser votre propre ressource dans le code, il faut ajouter un signe spécial "::" avant le nom de la ressource.

Exemples :

//--- exemples de spécification des ressources et de leurs noms dans les commentaires
#resource "\\Images\\euro.bmp"          // le nom de la ressource - Images\euro.bmp
#resource "picture.bmp"                 // le nom de la ressource - picture.bmp
#resource "Resource\\map.bmp"           // le nom de la ressource - Resource\map.bmp
#resource "\\Files\\Pictures\\good.bmp" // le nom de la ressource - Files\Pictures\good.bmp
#resource "\\Files\\Demo.wav";          // le nom de la ressource - Files\Demo.wav"
#resource "\\Sounds\\thrill.wav";       // le nom de la ressource - Sounds\thrill.wav"
...                                  
 
//--- utilisation des ressources
ObjectSetString(0,bitmap_name,OBJPROP_BMPFILE,0,"::Images\\euro.bmp");
...
ObjectSetString(0,my_bitmap,OBJPROP_BMPFILE,0,"::picture.bmp");
...
set=ObjectSetString(0,bitmap_label,OBJPROP_BMPFILE,1,"::Files\\Pictures\\good.bmp");
...
PlaySound("::Files\\Demo.wav");
...
PlaySound("::Sounds\\thrill.wav");

Il convient de noter que pendant l'installation de l'image de la ressource pour les objets OBJ_BITMAP et OBJ_BITMAP_LABEL, on ne peut pas changer manuellement la valeur de la propriété OBJPROP_BMPFILE. Par exemple, supposons que nous utilisons les ressources des fichiers euro.bmp et dollar.bmp. pour créer OBJ_BITMAP_LABEL.

#resource "\\Images\\euro.bmp";    // euro.bmp est situé dans le terminal_data_directory\MQL5\Images\
#resource "\\Images\\dollar.bmp";  // dollar.bmp est situé dans le terminal_data_directory\MQL5\Images\

Lorsque vous affichez les propriétés de cet objet, nous voyons que les propriétés BitMap File (On) et BitMap File (Off) sont grisés et ne peuvent pas être changées manuellement :

using_resource

 

Utiliser les ressources des autres programmes mql5 #

L'utilisation des ressources a un autre avantage - on peut utiliser les ressources de chaque fichier EX5 dans chaque programme mql5. Ainsi, on peut utiliser les ressources d'un fichier EX5 dans les autres programmes mql5.

Pour utiliser le nom de la ressource d'un fichier tiers, il faut le spécifier comme <chemin_du nom_du fichier_EX5>::<nom_de la ressource>. Par exemple, si la ressource pour une image dans le fichier triangle.bmp est spécifiée dans le script Draw_Triangles_Script.mq5 :

 #resource "\\Files\\triangle.bmp"

Puis son nom pour l'utilisation dans le script lui-même comme "Files\triangle.bmp", et pour l'utiliser, il faut ajouter un signe spécial "::" pour le nom de la ressource.

//--- utilisation de la ressource dans le script
ObjectSetString(0,my_bitmap_name,OBJPROP_BMPFILE,0,"::Files\\triangle.bmp");

Pour utiliser la même ressource d'un autre programme, par exemple à partir d'un EA, il faut ajouter au nom de la ressource le chemin vers le fichier EX5 par rapport au dossier terminal_data_directory\MQL5\ et le nom du fichier EX5 du script - Draw_Triangles_Script.ex5. Si le script se trouve dans le dossier standard terminal_data_directory\MQL5\Scripts\, il faut écrire l'appel de cette façon :

//--- utilisation de la ressource à partir d'un script dans un EA
ObjectSetString(0,my_bitmap_name,OBJPROP_BMPFILE,0,"\\Scripts\\Draw_Triangles_Script.ex5::Files\\triangle.bmp");

Si le chemin d'accès au fichier exécutable n'est pas spécifié lors de l'appel de la ressource d'un autre EX5, le fichier exécutable est recherché dans le même dossier qui contient le programme qui appelle la ressource. Cela signifie que si un EA appelle une ressource à partir du fichier Draw_Triangles_Script.ex5 sans indication du chemin, comme ceci :

//--- appel d'une ressource du script dans un EA sans spécifier le chemin
ObjectSetString(0,my_bitmap_name,OBJPROP_BMPFILE,0,"Draw_Triangles_Script.ex5::Files\\triangle.bmp");

le fichier sera recherché dans le dossier terminal_data_directory\MQL5\Experts\, si l'EA se trouve dans le dossier terminal_data_directory\MQL5\Experts\.

 

Travailler avec les indicateurs personnalisés inclus en tant que ressources

Un ou plusieurs indicateurs personnalisés peuvent être nécessaires pour le fonctionnement des applications MQL5. Chacun d'entre eux peuvent être inclus dans le code d'un programme MQL5 exécutable. L'insertion des indicateurs comme des ressources simplifie la distribution des applications.

Voici un exemple d'insertion et d'utilisation d'un indicateur personnalisé SampleIndicator.ex5 situé dans le dossier : terminal_data_folder \\MQL5\Indicators\ :

//+------------------------------------------------------------------+
//|                                                     SampleEA.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#resource "\\Indicators\\SampleIndicator.ex5"
int handle_ind;
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'Expert                           |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5");
   if(handle_ind==INVALID_HANDLE)
     {
      Print("Expert : appel à iCustom : Code d'erreur=",GetLastError());
      return(INIT_FAILED);
     }
//--- ...
   return(INIT_SUCCEEDED);
  }

Le cas où un indicateur personnalisé dans la fonction OnInit() crée une ou plusieurs copies de lui-même, exige une attention particulière. Rappellons que la ressource doit être spécifiée de la manière suivante : <path_EX5_file_name>::<resource_name>.

Par exemple, si l'indicateur SampleIndicator.ex5 fait partie de l'EA SampleEA.ex5 comme une ressource, le chemin vers lui-même, spécifié lors de l'appel iCustom() dans la fonction d'initialisation de l'indicateur personnalisé sera ainsi : "\\Experts\\SampleEA.ex5::Indicators\\SampleIndicator.ex5". Lorsque ce chemin est défini explicitement, l'indicateur personnalisé SampleIndicator.ex5 sera attaché à l'EA SampleEA.ex5 et perdra la capacité de travailler de façon indépendante.

Le chemin d'accès à lui-même peut être reçu en utilisant la fonction GetRelativeProgramPath(), dont l'exemple de l'utilisation est fourni ci-dessous :

//+------------------------------------------------------------------+
//|                                              SampleIndicator.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_plots 0
int handle;
//+------------------------------------------------------------------+
//| Fonction d'initialisation d'un indicateur personnalisé           |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- mauvaise façon de fournir un lien a lui-même
//--- string path="\\Experts\\SampleEA.ex5::Indicators\\SampleIndicator.ex5";   
//--- bonne façon de recevoir un lien à lui-même
  string path=GetRelativeProgramPath();
//--- mapping des buffers de l'indicateur
   handle=iCustom(_Symbol,_Period,path,0,0);
   if(handle==INVALID_HANDLE)
     {
      Print("Indicateur : appel à iCustom : Code d'erreur=",GetLastError());
      return(INIT_FAILED);
     }
   else Print("Handle de l'indicateur=",handle);
//---
   return(INIT_SUCCEEDED);
  }
///....
//+------------------------------------------------------------------+
//| GetRelativeProgramPath                                           |
//+------------------------------------------------------------------+
string GetRelativeProgramPath()
  {
   int pos2;
//--- obtient le chemin absolu vers le programme
   string path=MQLInfoString(MQL_PROGRAM_PATH);
//--- trouve la position de la sous-chaîne "\MQL5\"
   int    pos =StringFind(path,"\\MQL5\\");
//--- la sous-chaîne n'est pas trouvée - erreur
   if(pos<0)
      return(NULL);
//--- saut du répertoire "\MQL5"
   pos+=5;
//--- Sauts supplémentaires '\' symboles
   tandis que (StringGetCharacter(path,pos+1)=='\\')
      pos++;
//--- si c'est la ressource, retourne le chemin relatif au répertoire MQL5
   if(StringFind(path,"::",pos)>=0)
      return(StringSubstr(path,pos));
//--- trouve un séparateur pour le premier sous-répertoire MQL5 (par exemple, MQL5\Indicators)
//--- s'il est absent, retourne le chemin relatif au répertoire MQL5
   if((pos2=StringFind(path,"\\",pos+1))<0)
      return(StringSubstr(path,pos));
//--- retourne le chemin relatif au répertoire (par exemple, MQL5\Indicators)
   return(StringSubstr(path,pos2+1));
  }
//+------------------------------------------------------------------+
//| Fonction d'itération d'un indicateur personnalisé |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,        
                const double& price[])
  {
//--- valeur de retour de prev_calculated pour le prochain appel 
   return(rates_total);
  }

 

Resource variables #

Les ressources peuvent être déclarées en utilisant des variables de ressources et traitées comme si elles étaient de variables du type correspondant. Format de déclaration :

#resource chemin_vers_le_fichier_de_ressource as type_de_la_variable_de_ressource nom_de_la_variable_de_ressource

Exemples de déclarations :

#resource "data.bin" as int ExtData[]             // déclare un tableau numérique contenant des données du fichier data.bin
#resource "data.bin" as MqlRates ExtData[]        // déclare un tableau de structures simples contenant des données du fichier data.bin
//--- chaînes de caractères
#resource "data.txt" as string ExtCode            // déclare une chaîne de caractères contenant des données du fichier data.txt (les encodates ANSI, UTF-8 et UTF-16 sont supportés)
//--- ressources graphiques
#resource "image.bmp" as bitmap ExtBitmap[]       // déclare un tableau à une dimension contenant l'image d'un fichier BMP, taille du tableau = hauteur * largeur
#resource "image.bmp" as bitmap ExtBitmap2[][]    // déclare un tableau à deux dimensions contenant l'image d'un fichier BMP, taille du tableau [hauteur][largeur]

Dans le cas d'une telle déclaration, les données de la ressources ne sont utilisables que via la variable, l'auto-adressage via "::<nom de la ressource>" ne fonctionne pas.

#resource "\\Images\\euro.bmp" as bitmap euro[][]
#resource "\\Images\\dollar.bmp"
//+------------------------------------------------------------------+
//|  Fonction de création de l'OBJ_BITMAP_LABEL avec une ressource |
//+------------------------------------------------------------------+
void Image(string name,string rc,int x,int y)
  {
   ObjectCreate(0,name,OBJ_BITMAP_LABEL,0,0,0);
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(0,name,OBJPROP_BMPFILE,rc);
  }
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme                              |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- affiche la taille de l'image [largeur, hauteur] stockée dans la variable de ressource euro
   Print(ArrayRange(euro,1),", ",ArrayRange(euro,0));
//--- change l'image de euro - dessine des bandes horizontales rouges au milieu
   for(int x=0;x<ArrayRange(euro,1);x++)
      euro[ArrayRange(euro,1)/2][x]=0xFFFF0000;
//--- crée la ressource graphique en utilisant la varaiable de ressource
   ResourceCreate("euro_icon",euro,ArrayRange(euro,1),ArrayRange(euro,0),0,0,ArrayRange(euro,1),COLOR_FORMAT_ARGB_NORMALIZE);
//--- crée l'objet étiquette graphique Euro, sur laquelle l'image de la ressource euro_icon sera affectée
   Image("Euro","::euro_icon",10,40);
//--- autre méthode appliquant la ressource, il n'est pas possible de dessiner dessus
   Image("USD","::Images\\dollar.bmp",15+ArrayRange(euro,1),40);
//--- la méthode directe d'adressage de la ressource euro.bmp n'est pas disponible puisqu'elle a déjà été déclarée via la variable de ressource euro 
   Image("E2","::Images\\euro.bmp",20+ArrayRange(euro,1)*2,40); // execution time error is to occur
  }

Résultat d'exécution du script — seuls deux objets OBJ_BITMAP_LABEL sur trois sont créés. L'image du premier objet a les bandes rouges au milieu.

res_variables

Un avantage important d'appliquer les ressources est que les fichiers de ressources sont automatiquements compressés avant d'être inclus dans le fichier exécutable EX5 avant sa compilation. Ainsi, l'utilisation des variables de ressources vous permet de mettre toutes les données nécessaires dans le fichier exécutable EX5 mais aussi de réduire le nombre et la taille totale des fichiers comparé à la méthode habituelle d'écriture des programmes MQL5.

L'utilisation des variables de ressources est particulièrement pratique pour publier les produits sur le Market.

Fonctionnalités

  • Le type spécial de variable de ressource bitmap informe le compilateur que la ressource est une image. Ce type de variables est de type uint.
  • La variable de ressource tableau de type bitmap peut avoir 2 dimensions. Dans ce cas, la taille du tableau est définie comme [ hauteur_image ][ largeur_image ]. Si un tableau à 1 dimension est spécifié, le nombre d'éléments est égal à hauteur_image * largeur_image.
  • Lors du chargement d'une image 24 bits, le composant canal alpha est défini à 255 pour tous les pixels de l'image.
  • Lors du chargement d'une image 32 bits sans canal alpha, le composant canal alpha est également défini à 255 pour tous les pixels de l'image.
  • Lors du chargement d'une image 32 bits avec un canal alpha, les pixels ne sont pas traités.
  • La taille du fichier de ressource ne peut pas être supérieure à 128 Mo.
  • La détection automatique de l'encodage par la présence du BOM (en-tête) est effectuée pour les fichiers de chaînes de caractères. Si le BOM est absent, l'encodage est défini par le contenu du fichier. Le fichiers avec un encodage ANSI, UTF-8 et UTF-16 sont supportés. Toutes les chaînes de caractères sont converties en Unicode lors de la lecture des données des fichiers.

Programmes OpenCL

Utiliser les variables de ressource de chaînes de caractères facilite grandement le développement de certains programmes. Par exemple, vous pouvez écrire le code d'un programme OpenCL dans un fichier CL séparé et l'inclure ensuite comme une simple chaîne de caractères dans les ressources de votre programme MQL5.

#resource "seascape.cl" as string cl_program
...
int context;
if((cl_program=CLProgramCreate(context,cl_program)!=INVALID_HANDLE)
  {
   //--- effectue d'autres actions avec le programme OpenCL
  }

Dans cet exemple, vous auriez à écrire le code entier comme une seule grosse chaîne de caractères si la variable de ressource cl_program n'avait pas été utilisée.

Voir aussi

ResourceCreate(), ResourceSave(), PlaySound(), ObjectSetInteger(), ChartApplyTemplate(), Fonctions de fichier