I had been developing indicators and EAs in MT4 MQL4 for about a year when I first came in touch with MT4GUI@FX1.
It was a “magical” moment, it was like finding something completely unique that the developers of MT4 “forgotten” to implement.
The functionality is amazing and the coding of it is rather easy, hey I can do it :-).
I will, in a miniseries of 10 blogs exploit MT4GUIs functionalities, with a daily blog update with new code example/functions.
I hope you find it interesting as well as valuable!
Sincerely
Thommy Tikka
Who hasn’t been frustrated by the lack of an easy way to within MT4 take screenshots of the charts for POST-trade analysis!?
Now you can do it, and I will show you how!
// mt4gui-Screenshot.mq4
// Created by Thommy Tikka (thommy_tikka@hotmail.com)
// Version 0.1, 20130401
// Include library file with common functions for mt4gui
#include <mt4gui.mqh>
// Declare global variables
int hwnd = 0;
int screenshotBtn;
int menuOptions,menuSubScreenshot, menuSubResolution, menuSubSub640, menuSubSub1024, menuSubSub1280;
// Default Screenshot resolution set to 1024x768
int screenShotResX=1024, screenShotResY=768;
// MT4 function called during the module initialization
//+-------------------------------------------------------------------------------------------+
int init()
{
hwnd = WindowHandle(Symbol(),Period());
guiRemoveAll(hwnd);
// Add screenshot button to chart function call
CreateScreenshotBtn();
// Add options menu to MT4 function call
CreateOptionsMenu();
return(0);
}
// MT4 function called during deinitialization of the module
//+-------------------------------------------------------------------------------------------+
int deinit()
{
// Very important to cleanup and remove all gui items from chart
if (hwnd>0) guiRemoveAll(hwnd);
guiCleanup(hwnd);
return(0);
}
// MT4 function called on every MT4 tick
//+-------------------------------------------------------------------------------------------+
int start()
{
// Call function ManageEvents on every MT4 tick
ManageEvents();
}
// MT4GUI functions to create Button
//+-------------------------------------------------------------------------------------------+
void CreateScreenshotBtn()
{
// Position and size of the button ,x ,y ,a ,b (x, y = position from top left corner. a, b = size of button)
screenshotBtn = guiAdd(hwnd,"button",10,30,30,20,"");
// Screenshot button rounded corners radius
guiSetBorderRadius(hwnd,screenshotBtn, 10);
// Screenshot button Border color
guiSetBorderColor(hwnd,screenshotBtn,White);
// Screenshot button Background color
guiSetBgColor(hwnd,screenshotBtn, Blue);
// Screenshot button Text color
guiSetTextColor(hwnd,screenshotBtn,White);
// Add "eye" webdings symbol to screenshot button
guiSetText(hwnd,screenshotBtn,"N",25,"Webdings");
}
// MT4GUI functions to create Menu
//+-------------------------------------------------------------------------------------------+
void CreateOptionsMenu()
{
// Add "Options" menu to MT4 menu
menuOptions = guiAddMenu(hwnd,"Options",0,0);
// Add sub-menu Screenshot with enable/disable & sub-meny Resolution
menuSubScreenshot = guiAddMenu(hwnd,"ScreenShotBtn",menuOptions,1);
menuSubResolution = guiAddMenu(hwnd,"Resolution",menuOptions,0);
// Add sub-sub menu to Resolution menu
menuSubSub640 = guiAddMenu(hwnd,"Screen: 640x480",menuSubResolution,0);
menuSubSub1024 = guiAddMenu(hwnd,"Screen: 1024x768",menuSubResolution,0);
menuSubSub1280 = guiAddMenu(hwnd,"Sreen: 1280x1024",menuSubResolution,0);
// Set Options menu background color to Aqua
guiSetMenuBgColor(hwnd,menuOptions,Aqua);
// Set sub-menu Screenshot background color to Blue and text to White
guiSetMenuBgColor(hwnd,menuSubScreenshot,Blue);
guiSetMenuTextColor(hwnd,menuSubScreenshot,White);
// Set Screenshot meny item to enable
guiCheckMenu(hwnd,menuSubScreenshot,true);
}
// MT4GUI functions to capture Menu & Button Events
//+-------------------------------------------------------------------------------------------+
void ManageEvents()
{
// If screenshotBtn is clicked execute function ScreenShotMT4
if (guiIsClicked(hwnd,screenshotBtn)) ScreenShotMT4();
// If menuitem SubScreenshot is clicked check status, remove/create Screenshot button
if (guiIsMenuClicked(hwnd,menuSubScreenshot))
{
if (!guiIsMenuChecked(hwnd,menuSubScreenshot))
{
guiRemove(hwnd,screenshotBtn);
}
else
{
CreateScreenshotBtn();
}
}
// If menuitem SubResolution is clicked and a sub-sub menu resolution is choosed that one will be used for the screen shot (including Alert pop-up)
if (guiIsMenuClicked(hwnd,menuSubSub640)) {screenShotResX=640; screenShotResY=480; Alert ("Screenshot resolution set to: 640x480");}
if (guiIsMenuClicked(hwnd,menuSubSub1024)) {screenShotResX=1024; screenShotResY=768;Alert ("Screenshot resolution set to: 1024x768");}
if (guiIsMenuClicked(hwnd,menuSubSub1280)) {screenShotResX=1280; screenShotResY=1024;Alert ("Screenshot resolution set to: 1280x1024");}
}
// MT4 function for screen shot to file (...\'MT4-directory'\experts\files\...)
//+-------------------------------------------------------------------------------------------+
void ScreenShotMT4()
{
// Take screenshot based on pre-defined settings
WindowScreenShot ("Button_"+Symbol()+"_M"+Period()+"_"+TimeToStr(TimeCurrent(),TIME_DATE)+"_"+Hour()+"."+Minute()+"."+Seconds()+".gif",screenShotResX,screenShotResX);
// Alert user with a pop-up window
Alert ("Screenshot taken (",screenShotResX,"x",screenShotResY,")");
}
Tomorrow I will show you how you can use preset trade comments in your trading.
You must be logged in to post a comment.