Điều chỉnh hình ảnh trong các đối tượng bitmap
Các đối tượng loại OBJ_BITMAP_LABEL
(một bảng có hình ảnh được định vị theo tọa độ màn hình) cho phép hiển thị hình ảnh bitmap. Hình ảnh bitmap nghĩa là định dạng đồ họa BMP: mặc dù về nguyên tắc có nhiều định dạng raster khác (ví dụ, PNG hoặc GIF), nhưng hiện tại chúng không được hỗ trợ trong MQL5, cũng như các định dạng vector.
Thuộc tính chuỗi OBJPROP_BMPFILE
cho phép bạn chỉ định một hình ảnh cho đối tượng. Nó phải chứa tên tệp BMP hoặc tài nguyên.
Vì đối tượng này hỗ trợ khả năng chuyển đổi trạng thái hai vị trí (xem OBJPROP_STATE), một tham số sửa đổi nên được sử dụng cho nó: hình ảnh cho trạng thái "bật"/"nhấn" được đặt dưới chỉ số 0, và trạng thái "tắt"/"thả" được đặt dưới chỉ số 1. Nếu bạn chỉ chỉ định một hình ảnh (không có sửa đổi, tương đương với 0), nó sẽ được sử dụng cho cả hai trạng thái. Trạng thái mặc định của đối tượng là "tắt"/"thả".
Kích thước của đối tượng bằng kích thước của hình ảnh, nhưng nó có thể được thay đổi bằng cách chỉ định các giá trị nhỏ hơn trong thuộc tính OBJPROP_XSIZE
và OBJPROP_YSIZE
: trong trường hợp này, chỉ một phần của hình ảnh được hiển thị (xem chi tiết trong phần tiếp theo về khung hình).
Độ dài của chuỗi OBJPROP_BMPFILE
không được vượt quá 63 ký tự. Nó có thể chứa không chỉ tên tệp mà còn đường dẫn đến nó. Nếu chuỗi bắt đầu bằng ký tự phân cách đường dẫn (dấu gạch chéo '/' hoặc dấu gạch chéo đôi '\'), thì tệp được tìm kiếm tương ứng với terminal_data_directory/MQL5/
. Ngược lại, tệp được tìm kiếm tương ứng với thư mục nơi chương trình MQL đang nằm.
Ví dụ, chuỗi "\Images\euro.bmp" (hoặc "/Images/euro.bmp") đề cập đến một tệp trong thư mục MQL5/Images/euro.bmp
. Gói cung cấp terminal tiêu chuẩn bao gồm thư mục Images
trong thư mục MQL5, và có một vài tệp thử nghiệm euro.bmp
và dollar.bmp
, vì vậy đường dẫn này hoạt động. Nếu bạn chỉ định chuỗi "Images\euro.bmp" hoặc ("Images/euro.bmp"), thì điều này sẽ ngụ ý, ví dụ, đối với một script được khởi chạy từ MQL5/Scripts/MQL5Book/
, rằng thư mục Images
với tệp euro.bmp
nên nằm trực tiếp tại đó, tức là toàn bộ đường dẫn sẽ là MQL5/Scripts/MQL5Book/Images/euro.bmp
. Không có tệp như vậy trong sách của chúng ta, và điều này sẽ dẫn đến lỗi khi tải hình ảnh. Tuy nhiên, cách sắp xếp các tệp đồ họa cạnh chương trình này có những ưu điểm: dễ kiểm soát việc lắp ráp hơn, và không có sự nhầm lẫn với các hình ảnh lẫn lộn của các chương trình khác.
Script ObjectBitmap.mq5
tạo một bảng với hình ảnh trên biểu đồ và gán hai hình ảnh cho nó: "\Images\dollar.bmp" và "\Images\euro.bmp".
#include "ObjectPrefix.mqh"
void SetupBitmap(const string button, const int x, const int y,
const string imageOn, const string imageOff = NULL)
{
// tạo một bảng
const string name = ObjNamePrefix + "Bitmap";
ObjectCreate(0, name, OBJ_BITMAP_LABEL, 0, 0, 0);
// đặt vị trí
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
// thêm hình ảnh
ObjectSetString(0, name, OBJPROP_BMPFILE, 0, imageOn);
if(imageOff != NULL) ObjectSetString(0, name, OBJPROP_BMPFILE, 1, imageOff);
}
void OnStart()
{
SetupBitmap("image", 100, 100,
"\\Images\\dollar.bmp", "\\Images\\euro.bmp");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Cũng như kết quả của script từ phần trước, ở đây bạn cũng có thể nhấp vào đối tượng hình ảnh và thấy rằng nó chuyển đổi từ hình ảnh đô la sang hình ảnh euro và ngược lại.