关闭@1x
香港:2025-03-27 00:10:25
  • 紐約:2025-03-26 11:10:25
  • 倫敦:2025-03-26 16:10:25
  • 東京:2025-03-27 01:10:25
  • 悉尼:2025-03-27 02:10:25
  • 香港:2025-03-27 00:10:25
  • 新加坡:2025-03-27 00:10:25
首頁> 資訊> 最新 >正文

第四單元(4-2) - 應用圖形對象

William 2024-06-21 17:18:50 關注
接觸圖形對象的創建與使用過程

爲什麽要進行函數封裝?

在 MQL4 編程中,圖形對象是非常重要的一部分,它可以幫助我們在交易圖表上顯示各種可視化的元素,如線條、矩形、文本等。爲了更好地管理和使用這些圖形對象,我們可以将它們的創建、設置屬性、等操作封裝成函數。

我們以這三個按鈕爲例,在不進行函數封裝的情況下,其代碼如下所示!很顯然,這種方式會給後期維護代碼帶來極大的不方便,重複性片段非常龐大,一旦對象數量過多,很容易造成錯誤的發生,狗看了都搖頭!

函數封裝的好處包括:

  • 代碼複用: 将常用的圖形對象創建和操作過程封裝成函數,可以在多個地方重複使用,提高開發效率。
  • 代碼可讀性: 通過給函數取一個有意義的名稱,可以讓代碼更加易讀和理解。
  • 參數靈活性: 函數可以接受各種參數,使創建和設置圖形對象更加靈活。
  • 錯誤處理: 函數内部可以進行錯誤檢查和處理,确保圖形對象的創建和操作更加安全可靠。

一個圖形對象創建函數的基本結構如下所示:

那麽在經過封裝好的函數創建對象時,上面提到的三個按鈕,我們隻需要3行代碼即可搞定,而且一次封裝便可以永久使用這個函數,這是什麽概念呢?以後你不管創建多少個按鈕,每個按鈕隻需要一行代碼即可創建!這就是函數封裝的重要性。

調用封裝好的函數創建3個按鈕:


函數結構解析

在這個函數中,每一個參數都對應了OBJ_BUTTON對象不同的屬性值,在創建時,參數的順序可以自由調換位置,但必須注意一點,在調用時,參數位置和類型必須和函數順序保持一緻,比如函數中第一個參數是對象名稱,類型爲string,那麽在調用時也必須把第一個參數傳遞爲字符串作爲按鈕1的名稱。其次是對象上顯示的内容、坐标、尺寸、顔色、字體。

  • 參數數量

細心的同學可能會發現,函數本身帶有13個參數,但是我調用的時候爲啥隻有10個呢?原因在于,某些參數在系統默認情況下,已經有了默認值,而我在創建這個對象的時候,剛好不需要設置這個參數的屬性,所以就忽略了一些參數。
注意:這種方式隻适用于參數靠後排序的情況下,也就是不能跨順序忽略,比如第8個是設置字體,第9個是設置字體大小,你就不能忽略掉第八個,否則你以爲是在設置字體大小,其實參數的位置是設置字體名稱。所以,盡可能保持全數調用函數養成良好習慣。如果某些參數你不需要外部設置,直接保持默認,就可以在函數内部定義成下圖所示:

或者,你想爲了盡可能的保證函數的功能完整性,也可以将全部參數接口公開,并設置好默認值。當調用函數時,即使你調用了5個靠前的參數,函數也會爲你自動補齊并設置剩下的對象屬性爲預設形參默認值。

  • 函數設置過程解讀:

設置當前圖表名爲“對象”的按鈕X軸的水平圖表邊緣距離爲100個像素;設置垂直圖表邊緣距離爲50個像素。


圖形對象命名、屬性設置要領

光标放在對象屬性上,按F1查看幫助文檔,在官方的文檔中可以查詢到每個參數的具體屬性,學習MQL多用F1。

  • 顔色
    可以在圖表色卡上去參考和複制,顔色的表達方式可以有很多種,可以使标準顔色可以用名稱比如紅色“clrRed”或者“Red”、或C'255,0,0',

  • 字體
    字體名稱在幫助手冊中并不包含,而是存在于你的電腦字庫中,可以在圖表上點開一個文本标簽查找和适配,填入相同的名稱即可。

  • 坐标
    上一期我們提到過,以屏幕左上角爲錨點的時候,橫坐标和縱坐标都是從0開始。越往右,橫坐标就越大;越往下,縱坐标就越大。
    而屏幕分爲四個角,其坐标增加的反向分别從反向延伸,每個角的錨點值在對應的錨點屬性上都是0。

  • 左上角錨點:X坐标向右延伸,Y坐标向下延伸

  • 左下角錨點:X坐标向右延伸,Y坐标向上延伸

  • 右上角錨點:X坐标向左延伸,Y坐标向下延伸

  • 右下角錨點:X坐标向左延伸,Y坐标向上延伸

爲了更直觀的知道坐标值到底是什麽,我們在OnChartEvent事件内輸出一下第2、3個參數,在圖表的任意位置點擊時,就會看到該位置的坐标。


由此得出,我們要調整對象的顯示位置,隻需要指定坐标值即可。


圖形對象使用規範

在創建或設置對象屬性時,有許多需要明确注意的基本常識,一旦設置錯誤,将會導緻無法顯示或者顯示錯亂問題,這些問題包括:

  • 對象名稱重複:名稱是圖表對象的唯一标識符,無論何種對象,名稱必須保持唯一性。
  • 圖層遮蓋:對象創建的優先級,既先後順序,這裏得提到《圖層》的概念,先創建的在最底層,和物體疊放一個代理。
  • 錨點和坐标計算錯誤:下圖是一個對象在X、Y坐标都爲0的情況下顯示的位置,同尺寸的對象不同的錨點其坐标計算也不一樣;此時假如位于左下角錨點,對象高度20個像素,如果此時我們設置0/0的坐标,是看不到對象的,必須調整爲100/20才能正常顯示,其他位置也需要根據對象自身高度來計算坐标才能正常顯示。
    (注:無視錨點位置,二維對象自身的坐标起始位置都是以左和上作爲起始錨點)

    我們再次給右邊的兩個對象按照其寬度計算顯示的位置,右上向左位移100個像素,右下向左位移100個像素和向上位移20個像素,這時的對象才在可視範圍内。
  • 字體大小設置錯誤:這個很好理解,我們可以根據需求改編不同的字體大小,但如果字體大小太小或者超過對象的高、寬度,就會丢失顯示的内容。
  • 對象顔色搭配重合:當使用黑色背景時,你把字體色調成黑色,這就是重合,也是無法正常顯示的。

圖形對象矩陣

在某些場景中,我們需要創建相同類型和大小的多個對象時,可以使用循環的方式來解決,在下列圖示中,看樣子我們隻調用了兩次對象創建,但實際上,是通過循環的方式反複執行10次(10*2)後得到的20個對象。

讓我進一步解釋一下名稱和 Y 坐标的變化原理:
第一列X坐标向右縮進100個像素,第二列200個像素()

  • 名稱變化:
    對于第一個對象,名稱爲 "OBJ-A" + IntegerToString(i)
    對于第二個對象,名稱爲 "OBJ-B" + IntegerToString(i)
    循環從0開始,這樣,每個對象的名稱都包含了一個前綴("OBJ-A"或"OBJ-B")和一個數字後綴(從0到9)
    随着循環 i 的增加,數字後綴也相應地從0增加到9,使得每個對象都有一個唯一的名稱.
  • Y 坐标變化:
    循環從0開始,Y 坐标的計算公式爲 (20xi)
    這意味着,第一個對象的 Y 坐标爲 0 (20x0)
    第二個對象的 Y 坐标爲 20 (20x1)
    第三個對象的 Y 坐标爲 40 (20*2)
    以此類推,每個對象的 Y 坐标都會比上一個對象增加 20 像素
    這樣,随着循環 i 的增加,這些對象會垂直排列,并且間距爲 20 像素
    通過這種方式,代碼可以自動生成 20 個具有不同名稱和垂直位置的按鈕圖形對象,從而實現了一個簡單而有效的布局方式。

文章最後我們一起來看一個矩陣對象的成功案例,在下一期我們會将學習怎樣使用圖形對象和内部邏輯進行交互。

【免責聲明】123财經導航所發布的信息内容僅供交易投資者參考,并不構成投資建議“據此操作,風險自擔”。網站上部分信息内容及圖片來自于網絡/注冊作者/投稿人,版權歸原作者所有,如有侵權,請您與我們聯系關閉,郵箱:938123@qq.com。
hhhhhhh
热门评论
最新评论
还没有评论快来抢沙发吧!
第三方賬号登錄
第三方賬号登錄
第三方賬号登錄
  • *站點:
  • *網址:
  • 類型:
  • 聯系方式:
  • 簡介:

  • RRH123歡迎您的加入!如有問題請添加咨詢管理員【微信号:938123】
  • *類型:
  • *問題:
  • 圖片說明:
  • 聯系方式:

  • RRH123感謝您的反饋!如有問題請添加咨詢管理員【微信号:938123】