OBJ_RECTANGLE_LABEL
Đối tượng Nhãn Hình Chữ Nhật.
Ghi chú
Tọa độ điểm neo được thiết lập bằng pixel. Bạn có thể chọn góc neo của nhãn hình chữ nhật từ danh sách liệt kê ENUM_BASE_CORNER. Kiểu viền của nhãn hình chữ nhật có thể được chọn từ danh sách liệt kê ENUM_BORDER_TYPE.
Đối tượng này được sử dụng để tạo và thiết kế giao diện đồ họa tùy chỉnh.
Ví dụ
Script sau tạo và di chuyển đối tượng Nhãn Hình Chữ Nhật trên biểu đồ. Các hàm đặc biệt đã được phát triển để tạo và thay đổi thuộc tính của đối tượng đồ họa. Bạn có thể sử dụng các hàm này nguyên trạng
trong các ứng dụng của riêng bạn.
cpp
//--- mô tả
#property description "Script tạo đối tượng đồ họa \"Rectangle Label\"."
//--- hiển thị cửa sổ tham số đầu vào khi khởi chạy script
#property script_show_inputs
//--- tham số đầu vào của script
input string InpName="RectLabel"; // Tên nhãn
input color InpBackColor=clrSkyBlue; // Màu nền
input ENUM_BORDER_TYPE InpBorder=BORDER_FLAT; // Kiểu viền
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Góc biểu đồ để neo
input color InpColor=clrDarkBlue; // Màu viền phẳng (Flat)
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Kiểu viền phẳng (Flat)
input int InpLineWidth=3; // Độ rộng viền phẳng (Flat)
input bool InpBack=false; // Đối tượng nền
input bool InpSelection=true; // Làm nổi bật để di chuyển
input bool InpHidden=true; // Ẩn trong danh sách đối tượng
input long InpZOrder=0; // Độ ưu tiên cho cú nhấp chuột
//+------------------------------------------------------------------+
//| Tạo nhãn hình chữ nhật |
//+------------------------------------------------------------------+
bool RectLabelCreate(const long chart_ID=0, // ID biểu đồ
const string name="RectLabel", // Tên nhãn
const int sub_window=0, // Chỉ số cửa sổ phụ
const int x=0, // Tọa độ X
const int y=0, // Tọa độ Y
const int width=50, // Chiều rộng
const int height=18, // Chiều cao
const color back_clr=C'236,233,216', // Màu nền
const ENUM_BORDER_TYPE border=BORDER_SUNKEN, // Kiểu viền
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // Góc biểu đồ để neo
const color clr=clrRed, // Màu viền phẳng (Flat)
const ENUM_LINE_STYLE style=STYLE_SOLID, // Kiểu viền phẳng
const int line_width=1, // Độ rộng viền phẳng
const bool back=false, // Ở nền
const bool selection=false, // Làm nổi bật để di chuyển
const bool hidden=true, // Ẩn trong danh sách đối tượng
const long z_order=0) // Độ ưu tiên cho cú nhấp chuột
{
//--- đặt lại giá trị lỗi
ResetLastError();
//--- tạo nhãn hình chữ nhật
if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": không thể tạo nhãn hình chữ nhật! Mã lỗi = ",GetLastError());
return(false);
}
//--- thiết lập tọa độ nhãn
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- thiết lập kích thước nhãn
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- thiết lập màu nền
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- thiết lập kiểu viền
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);
//--- thiết lập góc biểu đồ, mà tọa độ điểm được xác định tương đối với nó
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- thiết lập màu viền phẳng (trong chế độ Flat)
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- thiết lập kiểu đường viền phẳng
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- thiết lập độ rộng viền phẳng
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
//--- hiển thị ở tiền cảnh (false) hoặc nền (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- bật (true) hoặc tắt (false) chế độ di chuyển nhãn bằng chuột
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ẩn (true) hoặc hiển thị (false) tên đối tượng đồ họa trong danh sách đối tượng
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- thiết lập độ ưu tiên cho sự kiện nhấp chuột trên biểu đồ
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- thực thi thành công
return(true);
}
//+------------------------------------------------------------------+
//| Di chuyển nhãn hình chữ nhật |
//+------------------------------------------------------------------+
bool RectLabelMove(const long chart_ID=0, // ID biểu đồ
const string name="RectLabel", // Tên nhãn
const int x=0, // Tọa độ X
const int y=0) // Tọa độ Y
{
//--- đặt lại giá trị lỗi
ResetLastError();
//--- di chuyển nhãn hình chữ nhật
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": không thể di chuyển tọa độ X của nhãn! Mã lỗi = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": không thể di chuyển tọa độ Y của nhãn! Mã lỗi = ",GetLastError());
return(false);
}
//--- thực thi thành công
return(true);
}
//+------------------------------------------------------------------+
//| Thay đổi kích thước của nhãn hình chữ nhật |
//+------------------------------------------------------------------+
bool RectLabelChangeSize(const long chart_ID=0, // ID biểu đồ
const string name="RectLabel", // Tên nhãn
const int width=50, // Chiều rộng nhãn
const int height=18) // Chiều cao nhãn
{
//--- đặt lại giá trị lỗi
ResetLastError();
//--- thay đổi kích thước nhãn
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": không thể thay đổi chiều rộng của nhãn! Mã lỗi = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": không thể thay đổi chiều cao của nhãn! Mã lỗi = ",GetLastError());
return(false);
}
//--- thực thi thành công
return(true);
}
//+------------------------------------------------------------------+
//| Thay đổi kiểu viền của nhãn hình chữ nhật |
//+------------------------------------------------------------------+
bool RectLabelChangeBorderType(const long chart_ID=0, // ID biểu đồ
const string name="RectLabel", // Tên nhãn
const ENUM_BORDER_TYPE border=BORDER_SUNKEN) // Kiểu viền
{
//--- đặt lại giá trị lỗi
ResetLastError();
//--- thay đổi kiểu viền
if(!ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border))
{
Print(__FUNCTION__,
": không thể thay đổi kiểu viền! Mã lỗi = ",GetLastError());
return(false);
}
//--- thực thi thành công
return(true);
}
//+------------------------------------------------------------------+
//| Xóa nhãn hình chữ nhật |
//+------------------------------------------------------------------+
bool RectLabelDelete(const long chart_ID=0, // ID biểu đồ
const string name="RectLabel") // Tên nhãn
{
//--- đặt lại giá trị lỗi
ResetLastError();
//--- xóa nhãn
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": không thể xóa nhãn hình chữ nhật! Mã lỗi = ",GetLastError());
return(false);
}
//--- thực thi thành công
return(true);
}
//+------------------------------------------------------------------+
//| Hàm bắt đầu chương trình Script |
//+------------------------------------------------------------------+
void OnStart()
{
//--- kích thước cửa sổ biểu đồ
long x_distance;
long y_distance;
//--- thiết lập kích thước cửa sổ
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Không thể lấy chiều rộng biểu đồ! Mã lỗi = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Không thể lấy chiều cao biểu đồ! Mã lỗi = ",GetLastError());
return;
}
//--- xác định tọa độ nhãn hình chữ nhật
int x=(int)x_distance/4;
int y=(int)y_distance/4;
//--- thiết lập kích thước nhãn
int width=(int)x_distance/4;
int height=(int)y_distance/4;
//--- tạo nhãn hình chữ nhật
if(!RectLabelCreate(0,InpName,0,x,y,width,height,InpBackColor,InpBorder,InpCorner,
InpColor,InpStyle,InpLineWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- vẽ lại biểu đồ và đợi một giây
ChartRedraw();
Sleep(1000);
//--- thay đổi kích thước của nhãn hình chữ nhật
int steps=(int)MathMin(x_distance/4,y_distance/4);
for(int i=0;i<steps;i++)
{
//--- thay đổi kích thước
width+=1;
height+=1;
if(!RectLabelChangeSize(0,InpName,width,height))
return;
//--- kiểm tra nếu hoạt động của script bị tắt buộc
if(IsStopped())
return;
//--- vẽ lại biểu đồ và đợi 0.01 giây
ChartRedraw();
Sleep(10);
}
//--- 1 giây trì hoãn
Sleep(1000);
//--- thay đổi kiểu viền
if(!RectLabelChangeBorderType(0,InpName,BORDER_RAISED))
return;
//--- vẽ lại biểu đồ và đợi 1 giây
ChartRedraw();
Sleep(1000);
//--- thay đổi kiểu viền
if(!RectLabelChangeBorderType(0,InpName,BORDER_SUNKEN))
return;
//--- vẽ lại biểu đồ và đợi 1 giây
ChartRedraw();
Sleep(1000);
//--- xóa nhãn
RectLabelDelete(0,InpName);
ChartRedraw();
//--- đợi 1 giây
Sleep(1000);
//---
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236