//+------------------------------------------------------------------+
//| Skript Programm Start Funktion |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Deklaration der Parameter der grafischen Ressource
string rc_name="Resource";
uint rc_width=100;
uint rc_height=100;
uint rc_data[];
uint rc_size=rc_width*rc_height;
ResetLastError();
//--- Festlegen der Größe des Pixelarrays
if(ArrayResize(rc_data,rc_size)!=rc_size)
{
Print("ArrayResize() failed. Error code: ",GetLastError());
return;
}
//--- Füllen des Pixelarrays mit einer transparenten Farbe und Erstellen einer grafischen Ressource auf der Grundlage dieser Farbe
ArrayInitialize(rc_data,0x00FFFFFF);
if(!ResourceCreate(rc_name,rc_data,rc_width,rc_height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
{
Print("ResourceCreate() failed. Error code: ",GetLastError());
return;
}
Print("Size of created recource array: ",rc_data.Size());
//--- Überprüfung der erstellten grafischen Ressource.
//--- Ermitteln der Zeit- und Preisdaten des aktuellen Balkens
MqlTick tick={};
if(!SymbolInfoTick(Symbol(),tick))
{
Print("SymbolInfoTick() failed. Error code: ",GetLastError());
return;
}
//--- Erstellen des Bitmap-Objekts unter Verwendung der Koordinaten des letzten Tickpreises und der Zeit
string obj_name="Bitmap";
if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
{
Print("ObjectCreate() failed. Error code: ",GetLastError());
return;
}
//--- die Breite und Höhe des erstellten Bitmap-Objekts auf die Breite und Höhe der grafischen Ressource einstellen.
//--- Setzen des Ankerpunkts des Objekts auf seine Mitte.
ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- Angabe der zuvor erstellten grafischen Ressource für das Bitmap-Objekt als Bilddatei
//--- in diesem Fall müssen wir, um den Namen der verwendeten grafischen Ressource anzugeben, "::" vor ihrem Namen hinzufügen
ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
//--- Einstellen der Farbe DodgerBlue mit einer Transparenz von 200
uint clr=ColorToARGB(clrDodgerBlue,200);
//--- Füllen des gesamten Pixelarrays der grafischen Ressource mit der eingestellten Farbe
ArrayInitialize(rc_data,clr);
//--- Aktualisierung der grafischen Ressourcendaten
Update(rc_name,rc_data,rc_width,rc_height,true);
//--- drei Sekunden warten und dann die Bildfarbe ändern
Print("Wait 3 seconds before changing color");
Sleep(3000);
//--- Einstellen der Farbe OrangeRed mit einer Transparenz von 200
Print("Change color");
clr=ColorToARGB(clrOrangeRed,200);
//--- Füllen des gesamten Pixelarrays der grafischen Ressource mit der eingestellten Farbe
ArrayInitialize(rc_data,clr);
//--- Aktualisierung der grafischen Ressourcendaten
Update(rc_name,rc_data,rc_width,rc_height,true);
//--- drei Sekunden warten und dann grafische Ressource freigeben
Print("Wait 3 seconds before ResourceFree()");
Sleep(3000);
bool res=ResourceFree("::"+rc_name);
Print("ResourceFree: ",res);
//--- Versuch, die Farbe nach Freigabe der Ressource zu ändern
Print("Trying to change color to GreenYellow after ResourceFree()");
//--- Einstellen der Farbe GreenYellow mit einer Transparenz von 200
clr=ColorToARGB(clrGreenYellow,200);
//--- Füllen des gesamten Pixelarrays der grafischen Ressource mit der eingestellten Farbe
ArrayInitialize(rc_data,clr);
//--- Aktualisierung der grafischen Ressourcendaten (das Bild bleibt erhalten, aber die Farbe kann nicht geändert werden)
Update(rc_name,rc_data,rc_width,rc_height,true);
Print("The color has not changed because the resource has been released");
//--- drei Sekunden warten und dann das Bitmap-Objekt löschen
Print("Wait 3 seconds before deleting the Bitmap object");
Sleep(3000);
Print("Delete Bitmap object");
ObjectDelete(0,obj_name);
}
//+------------------------------------------------------------------+
//| Grafische Ressourcendaten aktualisieren |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
{
//--- Verlassen, wenn Dimensionen von 0 übergeben wurden
if(width==0 || height==0)
return;
//--- Ressourcendaten aktualisieren und den Chart neu zeichnen
if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
ChartRedraw();
}
|