Cài đặt phông chữ
Tất cả các loại đối tượng đều cho phép cài đặt một số văn bản nhất định cho chúng (OBJPROP_TEXT
). Nhiều đối tượng trong số đó hiển thị trực tiếp văn bản được chỉ định trên biểu đồ, đối với những đối tượng còn lại, nó trở thành một phần thông tin của tooltip.
Khi văn bản được hiển thị bên trong một đối tượng (đối với các loại OBJ_TEXT
, OBJ_LABEL
, OBJ_BUTTON
, và OBJ_EDIT
), bạn có thể chọn tên phông chữ và kích thước. Đối với các đối tượng thuộc các loại khác, cài đặt phông chữ không được áp dụng: mô tả của chúng luôn được hiển thị bằng phông chữ tiêu chuẩn của biểu đồ.
Định danh | Mô tả | Kiểu |
---|---|---|
OBJPROP_FONTSIZE | Kích thước phông chữ tính bằng pixel | int |
OBJPROP_FONT | Phông chữ | string |
Bạn không thể cài đặt kích thước phông chữ trong điểm in tại đây.
Script thử nghiệm ObjectFont.mq5
tạo các đối tượng có văn bản và thay đổi tên cùng kích thước phông chữ. Hãy sử dụng lớp ObjectBuilder
từ script trước đó.
Tại đầu của OnStart
, script tính toán giữa cửa sổ cả trong tọa độ màn hình và trong trục thời gian/giá. Điều này là cần thiết vì các đối tượng thuộc các loại khác nhau tham gia thử nghiệm sử dụng các hệ tọa độ khác nhau.
void OnStart()
{
const string name = "ObjFont-";
const int bars = (int)ChartGetInteger(0, CHART_WIDTH_IN_BARS);
const int first = (int)ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR);
const datetime centerTime = iTime(NULL, 0, first - bars / 2);
const double centerPrice =
(ChartGetDouble(0, CHART_PRICE_MIN)
+ ChartGetDouble(0, CHART_PRICE_MAX)) / 2;
const int centerX = (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) / 2;
const int centerY = (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS) / 2;
...
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Danh sách các loại đối tượng được thử nghiệm được chỉ định trong mảng types
. Đối với một số trong đó, đặc biệt là OBJ_HLINE
và OBJ_VLINE
, cài đặt phông chữ sẽ không có hiệu lực, mặc dù văn bản mô tả sẽ xuất hiện trên màn hình (để đảm bảo điều này, chúng ta bật chế độ CHART_SHOW_OBJECT_DESCR
).
ChartSetInteger(0, CHART_SHOW_OBJECT_DESCR, true);
ENUM_OBJECT types[] =
{
OBJ_HLINE,
OBJ_VLINE,
OBJ_TEXT,
OBJ_LABEL,
OBJ_BUTTON,
OBJ_EDIT,
};
int t = 0; // cursor
...
2
3
4
5
6
7
8
9
10
11
12
13
Biến t
sẽ được sử dụng để chuyển đổi tuần tự từ loại này sang loại khác.
Mảng fonts
chứa các phông chữ tiêu chuẩn Windows phổ biến nhất.
string fonts[] =
{
"Comic Sans MS",
"Consolas",
"Courier New",
"Lucida Console",
"Microsoft Sans Serif",
"Segoe UI",
"Tahoma",
"Times New Roman",
"Trebuchet MS",
"Verdana"
};
int f = 0; // cursor
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Chúng ta sẽ lặp qua chúng bằng biến f
.
Bên trong vòng lặp demo, chúng ta hướng dẫn ObjectBuilder
tạo một đối tượng của loại hiện tại types[t]
ở giữa cửa sổ (để thống nhất, tọa độ được chỉ định trong cả hai hệ tọa độ, để không tạo ra sự khác biệt trong mã tùy thuộc vào loại: các tọa độ không được hỗ trợ bởi đối tượng đơn giản là sẽ không có hiệu lực).
while(!IsStopped())
{
const string str = EnumToString(types[t]);
ObjectBuilder *object = new ObjectBuilder(name + str, types[t]);
object.set(OBJPROP_TIME, centerTime);
object.set(OBJPROP_PRICE, centerPrice);
object.set(OBJPROP_XDISTANCE, centerX);
object.set(OBJPROP_YDISTANCE, centerY);
object.set(OBJPROP_XSIZE, centerX / 3 * 2);
object.set(OBJPROP_YSIZE, centerY / 3 * 2);
...
2
3
4
5
6
7
8
9
10
11
12
Tiếp theo, chúng ta thiết lập văn bản và phông chữ (kích thước được chọn ngẫu nhiên).
const int size = rand() * 15 / 32767 + 8;
Comment(str + " " + fonts[f] + " " + (string)size);
object.set(OBJPROP_TEXT, fonts[f] + " " + (string)size);
object.set(OBJPROP_FONT, fonts[f]);
object.set(OBJPROP_FONTSIZE, size);
...
2
3
4
5
6
Cho lần lặp tiếp theo, chúng ta di chuyển con trỏ trong các mảng của loại đối tượng và tên phông chữ.
t = ++t % ArraySize(types);
f = ++f % ArraySize(fonts);
...
2
3
Cuối cùng, chúng ta cập nhật biểu đồ, đợi 1 giây, và xóa đối tượng để tạo một đối tượng khác.
ChartRedraw();
Sleep(1000);
delete object;
}
}
2
3
4
5
Hình ảnh dưới đây cho thấy khoảnh khắc script đang chạy.
Nút với cài đặt phông chữ tùy chỉnh