이제 MT4GUI의 새 버전을 출시했습니다. 모든 베타 테스터는 저에게 연락을 환영합니다
샘플: http://www.fx1.net/wiki/pmwiki.php/MT4GUI/MT4GUI
#import "toolbox.dll"
int tbPutObject( int , string , int , int , int , int , string );
int tbRemoveAll( int );
int tbSetText( int , string , int , string );
int tbSetBgColor( int , int );
int tbSetTextColor( int , int );
bool tbIsClicked( int );
int tbRemove( int );
int tbEnable( int , int );
#import
좋은 아이디어지만 제품이 아직 작동하지 않습니다. "libtrade.mqh" 및 "libvisual.mqh" 없이는 아닙니다. mt4gui.dll을 실제로 테스트하기 위해 해당 파일을 어디에서 얻을 수 있습니까?
이러한 파일이 없으면 컴파일러는 "pFontSize", "pReset", "p" 및 "CloseAllByMagic" 기능을 정의할 수 없습니다.
제품이 작동 중이며 정확히 제가 필요로 하는 것입니다. 하지만...
몇 가지 문제가 있습니다.
1) 화면에 텍스트를 배치할 수 없습니다. (lot, SL, TP 등 라인)
2) 내가 무엇을 하든 색상이 작동하지 않습니다.
3) 이것은 더 많은 제안입니다. 별도의 하위 창에 버튼을 배치할 수 있습니까? 훨씬 더 편리하고 무역 콘솔처럼 보일 것이며 하위 창이 최소화되면 실수로 버튼을 클릭하는 것을 방지하는 데 도움이 됩니다. PutObject 함수 에서 볼 수 있는 한 좌표는 기본 또는 하위 창과 관련이 없습니다.
그러나 이 모든 것에 관계없이 이것은 훌륭한 제품입니다. MT4에서 구현하는 것은 오랫동안 기다려온 일이었습니다. 감사합니다.
찬성__
1) 화면에 텍스트를 배치하려면 MQL 내부 개체를 사용할 수 있습니다. 다음은 예제 코드입니다.
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= string pxy( string mytext, color clr, int posx, int posy, int size) { string n= "pxy3txt" +posx+posy; ObjectCreate (n, OBJ_LABEL , 0 , Time[lib_startbarno], lib_nextlinelevel); ObjectSet(n, OBJPROP_CORNER , 0 ); ObjectSet(n, OBJPROP_XDISTANCE , posx); ObjectSet(n, OBJPROP_YDISTANCE , posy); ObjectSet(n, OBJPROP_COLOR , clr); ObjectSet(n, OBJPROP_BACK , false); ObjectSetText(n, mytext, size); return (n); }
또 다른 전체 예는 다음과 같습니다.
#import "mt4gui.dll" int tbPutObject( int , string , int , int , int , int , string ); int tbRemoveAll( int ); int tbSetText( int , string , int , string ); int tbSetBgColor( int , int ); int tbSetTextColor( int , int ); string tbGetText( int ); bool tbIsClicked( int ); int tbRemove( int ); int tbEnable( int , int ); #import #include <libtrade.mqh> #include <libvisual.mqh> // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Login implementation demo // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= int btn1,btn2,edit1,edit2,l1,l2; int ticks; bool LoggedIn = false; string obj1= "" ; int init() { int hwnd=WindowHandle( Symbol (), Period ()); tbRemoveAll(hwnd); ObjectsDeleteAll (); //void pxy(string mytext,color clr,int posx,int posy,int size) pxy( "Please login" , Yellow , 250 , 50 , 19 ); pxy( "Login :" , White , 250 , 100 , 17 ); pxy( "Passwd:" , White , 250 , 140 , 17 ); l1=tbPutObject(hwnd, "text" , 350 , 100 , 250 , 30 , "Username" ); l2=tbPutObject(hwnd, "text" , 350 , 140 , 250 , 30 , "Password" ); btn1=tbPutObject(hwnd, "button" , 250 , 200 , 150 , 40 , "Login" ); btn2=tbPutObject(hwnd, "button" , 450 , 200 , 150 , 40 , "Exit" ); // set colors tbSetBgColor(btn1, Green ); tbSetTextColor(btn1, White ); tbSetBgColor(btn2, IndianRed ); tbSetTextColor(btn2, White ); tbSetText(l2, "xxxxxxxxxx" , 24 , "Wingdings" ); return ( 0 ); } //+------------------------------------------------------------------+ //| expert deinitialization function | //| dont forget to remove objects on deinit() | //+------------------------------------------------------------------+ int deinit() { tbRemove(btn1);tbRemove(btn2); tbRemove(l1);tbRemove(l2); return ( 0 ); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int hwnd=WindowHandle( Symbol (), Period ()); ticks++; pReset(); if ( MathMod (ticks, 20 )== 19 && StringLen (obj1)> 0 ) ObjectDelete (obj1); // If still not logged in we use this block if (!LoggedIn) { // exit button if (tbIsClicked(btn2)) { ObjectsDeleteAll (); tbRemoveAll(hwnd); Destroy( "Authentification Failed" ); return ( 1 ); } // login button if (tbIsClicked(btn1)) { if (tbGetText(l1)== "admin" && tbGetText(l2)== "pass" ) { PlaySound ( "ok.wav" ); LoggedIn=true; tbRemoveAll(hwnd); ObjectsDeleteAll (); } else { PlaySound ( "alert2.wav" ); obj1 = pxy( "Authentification Failed" , Red , 250 , 20 , 12 );} } return ( 1 ); } // From here we have the functions after login p( "Admin has been autentificated successfully" , Green ); return ( 0 ); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= string pxy( string mytext, color clr, int posx, int posy, int size) { string n= "pxy3txt" +posx+posy; ObjectCreate (n, OBJ_LABEL , 0 , Time[lib_startbarno], lib_nextlinelevel); ObjectSet(n, OBJPROP_CORNER , 0 ); ObjectSet(n, OBJPROP_XDISTANCE , posx); ObjectSet(n, OBJPROP_YDISTANCE , posy); ObjectSet(n, OBJPROP_COLOR , clr); ObjectSet(n, OBJPROP_BACK , false); ObjectSetText(n, mytext, size); return (n); }
내 스크린샷에서 볼 수 있듯이 데모가 작동합니다. 이 mt4gui 버전은 방금 버전 0.3으로 업로드했습니다. 최신 버전을 사용할 수 있습니다. 0.1에는 색상 지원이 전혀 없습니다. 아마도 0.1을 사용하고 있을 것입니다.
화면에서 버튼을 제거 하려면 deinit()를 사용해야 합니다.
//+------------------------------------------------------------------+ //| expert deinitialization function | //| dont forget to remove objects on deinit() | //+------------------------------------------------------------------+ int deinit() { tbRemove(btn1);tbRemove(btn2); tbRemove(l1);tbRemove(l2); return ( 0 ); }
여기에서 미리보기로 mt4에 대한 새로운 무료 애드온을 소개하고 싶습니다. 현재 mt4gui라는 제품 을 테스트하고 있습니다. 이 제품을 사용하면 버튼, 텍스트 필드, 목록 필드를 차트에 직접 배치할 수 있습니다. 다음은 이미 작동 중인 미리보기 스크린샷입니다.
http://fx1.net/wiki/uploads/img_7.png
버튼은 브로커 측 틱을 기다리지 않고 클릭 직후에 반응합니다. 다음 주에 더 많은 기능으로 이 제품을 개선할 예정입니다. 내가 이것을 게시하는 이유는 커뮤니티에서 필요한 아이디어를 얻기 위함입니다. 물론 모든 것이 실제로 실현될 수 있는 것은 아니지만 여기서 흥미로운 아이디어를 필터링하겠습니다.
다음은 사용법을 보여주는 매우 기본적인 코드의 예입니다.