//--- açıklama
#property description "Script, \"Etiket\" grafikksel nesnesini oluşturur."
//--- betiğin çalıştırılması sırasında giriş parametreleri penceresini göster
#property script_show_inputs
//--- betiğin giriş parametreleri
input string InpName="Label"; // Etiket ismi
input int InpX=150; // X-ekseni uzunluğu
input int InpY=150; // Y-ekseni uzunluğu
input string InpFont="Arial"; // Yazı tipi
input int InpFontSize=14; // Yazı tipi büyüklüğü
input color InpColor=clrRed; // Renk
input double InpAngle=0.0; // Derece olarak eğim açısı
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER; // Tutturma (çapa) tipi
input bool InpBack=false; // Arkaplan nesnesi
input bool InpSelection=true; // Taşıma için vurgula
input bool InpHidden=true; // Nesne listesinde gizleme
input long InpZOrder=0; // Fare tıklaması için öncelik
//+------------------------------------------------------------------+
//| Bir metin etiketi oluştur |
//+------------------------------------------------------------------+
bool LabelCreate(const long chart_ID=0, // çizelge kimliği
const string name="Label", // etiket ismi
const int sub_window=0, // alt pencere indisi
const int x=0, // X koordinatı
const int y=0, // Y koordinatı
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // tutturma yapılacak çizelge köşesi
const string text="Label", // metin
const string font="Arial", // yazı tipi
const int font_size=10, // yazı tipi boyutu
const color clr=clrRed, // renk
const double angle=0.0, // metin eğimi
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // çapa tipi
const bool back=false, // arka-planda
const bool selection=false, // taşımak için vurgula
const bool hidden=true, // nesne listesinde gizle
const long z_order=0) // fare tıklaması önceliği
{
//--- hata değerini sıfırla
ResetLastError();
//--- metin etiketi oluştur
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": metin etiketinin oluşturulması başarısız oldu! Hata kodu = ",GetLastError());
return(false);
}
//--- etiket koordinatlarını ayarla
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- tanımlanan nokta koordinatlarına göre çapa (tutturma) köşesini ayarla
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- metni ayarla
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- metin yazı tipini ayarla
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- yazı tipi boyutunu ayarla
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- metnin eğim açısını ayarla
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- tutturma noktası tipini ayarla
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- rengi ayarla
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- ön-planda (false) veya arkaplanda (true) göster
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- etiketi fare ile taşıma modunu etkinleştir (true) veya devre dışı bırak (false)
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- nesne listesinde grafiksel nesnenin adını sakla (true) veya göster (false)
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- çizelge üzerinde fare tıklaması olayının alınması için özellik ayarla
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- başarılı çalıştırma
return(true);
}
//+------------------------------------------------------------------+
//| Metin etiketini taşı |
//+------------------------------------------------------------------+
bool LabelMove(const long chart_ID=0, // çizelge kimliği
const string name="Label", // etiket ismi
const int x=0, // X koordinatı
const int y=0) // Y koordinatı
{
//--- hata değerini sıfırla
ResetLastError();
//--- metin etiketini taşı
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": etiketin X koordinatı taşınamadı! Hata kodu = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": etiketin Y koordinatı taşınamadı! Hata kodu = ",GetLastError());
return(false);
}
//--- başarılı çalıştırma
return(true);
}
//+------------------------------------------------------------------+
//| Etiketin bağlanacağı çizelge köşesini değiştir |
//+------------------------------------------------------------------+
bool LabelChangeCorner(const long chart_ID=0, // çizelge kimliği
const string name="Label", // etiket ismi
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER) // tutturma yapılacak çizelge köşesi
{
//--- hata değerini sıfırla
ResetLastError();
//--- tutturma köşesini değiştir
if(!ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner))
{
Print(__FUNCTION__,
": tutturma köşesi değiştirilemedi! Hata kodu = ",GetLastError());
return(false);
}
//--- başarılı çalıştırma
return(true);
}
//+------------------------------------------------------------------+
//| Nesnenin metnini değiştir |
//+------------------------------------------------------------------+
bool LabelTextChange(const long chart_ID=0, // çizelge kimliği
const string name="Label", // nesne ismi
const string text="Text") // metint
{
//--- hata değerini sıfırla
ResetLastError();
//--- nesne metnini değiştir
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": metin değiştirilemedi! Hata kodu = ",GetLastError());
return(false);
}
//--- başarılı çalıştırma
return(true);
}
//+------------------------------------------------------------------+
//| Metin etiketini sil |
//+------------------------------------------------------------------+
bool LabelDelete(const long chart_ID=0, // çizelge kimliği
const string name="Label") // etiket ismi
{
//--- hata değerini sıfırla
ResetLastError();
//--- etiketi sil
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": metin etiketini silinemedi! Hata kodu = ",GetLastError());
return(false);
}
//--- başarılı çalıştırma
return(true);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- etiketin koordinatlarını yerel değişkene depola
int x=InpX;
int y=InpY;
//--- çizelge penceresi büyüklüğü
long x_distance;
long y_distance;
//--- pencere büyüklüğünü ayarla
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Çizelgenin genişlik değeri alınamadı! Hata kodu = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Çizelgenin yükseklik değeri alınamadı! Hata kodu = ",GetLastError());
return;
}
//--- giriş parametrelerinin doğruluğunu kontrol et
if(InpX<0 || InpX>x_distance-1 || InpY<0 || InpY>y_distance-1)
{
Print("Hata! Hatalı giriş parametresi değerleri!");
return;
}
//--- etiket için başlangıç metnini hazırla
string text;
StringConcatenate(text,"Sol üst köşe: ",x,",",y);
//--- çizelge üzerinde bir metin etiketi oluştur
if(!LabelCreate(0,InpName,0,InpX,InpY,CORNER_LEFT_UPPER,text,InpFont,InpFontSize,
InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- çizelgeyi yenile ve yarım saniye bekle
ChartRedraw();
Sleep(500);
//--- etiketi taşı ve aynı anda metnini de değiştir
//--- eksen üzerindeki tekrarlama sayısı
int h_steps=(int)(x_distance/2-InpX);
int v_steps=(int)(y_distance/2-InpY);
//--- etiketi aşağı taşı
for(int i=0;i<v_steps;i++)
{
//--- koordinatı değiştir
y+=2;
//--- etiketi taşı ve metnini değiştir
MoveAndTextChange(x,y,"Sol üst köşe: ");
}
//--- yarım saniyelik gecikme
Sleep(500);
//--- etiketi sağa taşı
for(int i=0;i<h_steps;i++)
{
//--- koordinatı değiştir
x+=2;
//--- etiketi taşı ve metnini değiştir
MoveAndTextChange(x,y,"Sol üst köşe: ");
}
//--- yarım saniyelik gecikme
Sleep(500);
//--- etiketi yukarı taşı
for(int i=0;i<v_steps;i++)
{
//--- koordinatı değiştir
y-=2;
//--- etiketi taşı ve metnini değiştir
MoveAndTextChange(x,y,"Sol üst köşe: ");
}
//--- yarım saniyelik gecikme
Sleep(500);
//--- etiketi sola taşı
for(int i=0;i<h_steps;i++)
{
//--- koordinatı değiştir
x-=2;
//--- etiketi taşı ve metnini değiştir
MoveAndTextChange(x,y,"Sol üst köşe: ");
}
//--- yarım saniyelik gecikme
Sleep(500);
//--- şimdi, tutturma köşesini değiştirerek noktayı taşı
//--- sol alt köşeye taşı
if(!LabelChangeCorner(0,InpName,CORNER_LEFT_LOWER))
return;
//--- etiket metnini değiştir
StringConcatenate(text,"Sol alt köşe: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- çizelgeyi yeniden çiz ve iki saniye bekle
ChartRedraw();
Sleep(2000);
//--- sağ alt köşeye taşı
if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_LOWER))
return;
//--- etiket metnini değiştir
StringConcatenate(text,"Sol alt köşe: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- çizelgeyi yeniden çiz ve iki saniye bekle
ChartRedraw();
Sleep(2000);
//--- sağ üst köşeye taşı
if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_UPPER))
return;
//--- etiket metnini değiştir
StringConcatenate(text,"Sağ üst köşe: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- çizelgeyi yeniden çiz ve iki saniye bekle
ChartRedraw();
Sleep(2000);
//--- sol üst köşeye taşı
if(!LabelChangeCorner(0,InpName,CORNER_LEFT_UPPER))
return;
//--- etiket metnini değiştir
StringConcatenate(text,"Sol üst köşe: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- çizelgeyi yeniden çiz ve iki saniye bekle
ChartRedraw();
Sleep(2000);
//--- etiketi sil
LabelDelete(0,InpName);
//--- çizelgeyi yenile ve yarım saniye bekle
ChartRedraw();
Sleep(500);
//---
}
//+------------------------------------------------------------------+
//| Fonksiyon, nesneyi taşır ve metnini değiştirir |
//+------------------------------------------------------------------+
bool MoveAndTextChange(const int x,const int y,string text)
{
//--- etiketi taşı
if(!LabelMove(0,InpName,x,y))
return(false);
//--- etiket metnini değiştir
StringConcatenate(text,text,x,",",y);
if(!LabelTextChange(0,InpName,text))
return(false);
//--- script işlemi zorla sonlandırılmış mı kontrol et
if(IsStopped())
return(false);
//--- çizelgeyi yeniden çiz
ChartRedraw();
// 0.01 saniyelik gecikme
Sleep(10);
//--- fonksiyondan çık
return(true);
}
|