//+------------------------------------------------------------------+
//| FineClock.mq5 |
//| Copyright 2009, Vladimir Gomonov |
//| MetaDriver@rambler.ru |
//+------------------------------------------------------------------+
#property copyright "(c) 2009, Vladimir Gomonov; MetaDriver@rambler.ru"
#property link "MetaDriver@rambler.ru"
#property version "1.00"
#property description "Ñèìïàòè÷íûå ÷àñèêè"
#property description "-----------------------------------------------"
#property description "Îòîáðàæàþòñÿ ñðàçó íà âñåõ ãðàôèêàõ"
#property description "Ìîæíî âðó÷íóþ ïåðåìåùàòü, ìåíÿòü øðèôò è ðàçìåð"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum eClockFormats
{
Seconds=0, // ÷÷:ìì:ññ
Minutes=1 // ÷÷:ìì
};
// Óãëû ïåðåïèñàë äëÿ ðóñèôèêàöèè
enum åMyCorners
{
CLU = CORNER_LEFT_UPPER, // Ëåâûé âåðõíèé
CLL = CORNER_LEFT_LOWER, // Ëåâûé íèæíèé
CRU = CORNER_RIGHT_UPPER, // Ïðàâûé âåðõíèé
CRL = CORNER_RIGHT_LOWER, // Ïðàâûé íèæíèé
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum eTimeType
{
TLocal, // Ìåñòíîå âðåìÿ
TServer, // Âðåìÿ òîðãîâîãî ñåðâåðà
TGMT, // Âðåìÿ ïî Ãðèíâè÷ó
};
#include <\Enums\eIntNumbers.mqh>
#include <\Enums\eFloatNumbers.mqh>
//--- input parameters
input eTimeType TimeType=TLocal; // ×àñîâîé ïîÿñ
input eClockFormats Fmt=Seconds; // Ôîðìàò îòîáðàæåíèÿ
input åMyCorners Corner=CRL; // Óãîë ïðèâÿçêè
input ePInt X= 170; // Ñìåùåíèå ïî ãîðèçîíòàëè
input ePInt Y = 38; // Ñìåùåíèå ïî âåðòèêàëè
input string FontName="Magneto"; // Øðèôò
input ePInt FontSize=16; // Ðàçìåð øðèôòà
input color FontColor=clrDarkSlateGray; // Öâåò øðèôòà
input color ShadowColor=clrDarkSeaGreen;// Öâåò òåíè
input ePInt SS=1; // Ñìåùåíèå òåíè
input eFloat01 eSA=-12; // Ïîâîðîò òåíè
//--- vars
string Clock="Clock";
double SA;
bool First=true;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
SA=eFloatToDouble(eSA);
//---
for(long i=ChartNext(0);i>0;i=ChartNext(i))
{
for(int j=0;j<2;j++)
{
if(bool(ObjectFind(i,Clock+(string)j)+1)) // ;-)
ObjectDelete(i,Clock+(string)j);
ObjectCreate(i,Clock+(string)j,OBJ_LABEL,0,0,0);
ObjectSetInteger(i,Clock+(string)j,OBJPROP_CORNER,Corner);
ObjectSetInteger(i,Clock+(string)j,OBJPROP_XDISTANCE,X-Fmt*X/3+j*SS);
ObjectSetInteger(i,Clock+(string)j,OBJPROP_YDISTANCE,Y+j*SS);
ObjectSetInteger(i,Clock+(string)j,OBJPROP_COLOR,FontColor);
ObjectSetInteger(i,Clock+(string)j,OBJPROP_FONTSIZE,FontSize);
ObjectSetInteger(i,Clock+(string)j,OBJPROP_SELECTABLE,j);
ObjectSetInteger(i,Clock+(string)j,OBJPROP_ANCHOR,ANCHOR_LEFT);
ObjectSetInteger(i,Clock+(string)j,OBJPROP_BACK,true);
ObjectSetString(i,Clock+(string)j,OBJPROP_FONT,FontName);
ObjectSetString(i,Clock+(string)j,OBJPROP_TEXT,
" "+TimeToString(Time(),Fmt ? TIME_MINUTES : TIME_SECONDS)+" ");
//ObjectSetInteger(i, Clock+j, OBJPROP_SELECTED, j); // ìîæíî äîáàâèòü - ïî âêóñó
}
ObjectSetInteger(i,Clock+"0",OBJPROP_COLOR,ShadowColor);
ObjectSetDouble(i,Clock+"0",OBJPROP_ANGLE,SA);
ChartRedraw(i);
}
if(Fmt==Seconds) { EventSetTimer(1); First=false; }
else EventSetTimer((int)60-int(TimeLocal()%60));
//---
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
EventKillTimer();
for(long i=ChartNext(0);i>0;i=ChartNext(i))
for(int j=0;j<2;j++)
ObjectDelete(i,Clock+(string)j);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTimer()
{
if(First) { EventSetTimer(60); First=false; }
string T=" "+TimeToString(Time(),Fmt ? TIME_MINUTES : TIME_SECONDS)+" ";
for(long i=ChartNext(0);i>0;i=ChartNext(i))
// Ïåðåðèñîâûâàåì òîëüêî åñëè âèäèìî. Ýêîíîìèÿ, ìäà.
if(ChartGetInteger(i,CHART_WINDOW_IS_VISIBLE))
{
for(int j=1;j>=0;j--)
{
ObjectSetString(i,Clock+(string)j,OBJPROP_TEXT,T);
}
// Ïðèâîäèì òåíü â ñîîòâåòñòâèå... Íà ñëó÷àé ðó÷íîãî èçìåíåíèÿ àòðèáóòîâ.
ObjectSetInteger(i,Clock+"0",OBJPROP_XDISTANCE,
ObjectGetInteger(i,Clock+"1",OBJPROP_XDISTANCE)-SS);
ObjectSetInteger(i,Clock+"0",OBJPROP_YDISTANCE,
ObjectGetInteger(i,Clock+"1",OBJPROP_YDISTANCE)-SS);
ObjectSetString(i,Clock+"0",OBJPROP_FONT,
ObjectGetString(i,Clock+"1",OBJPROP_FONT));
ObjectSetInteger(i,Clock+"0",OBJPROP_FONTSIZE,
ObjectGetInteger(i,Clock+"1",OBJPROP_FONTSIZE));
ChartRedraw(i);
}
}
//+------------------------------------------------------------------+
datetime Time()
{
switch(TimeType)
{
case TLocal: return TimeLocal();
case TServer: return TimeTradeServer();
case TGMT: return TimeGMT();
default: return TimeLocal();
}
}
//+------------------------------------------------------------------+
Comments