[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 259
Comment puis-je trouver l'adresse de ma fonction utilisateur ? C'est-à-dire que si ma liste dit
int start()
...
int num=myFunc()//вызов функции
...
int myFunc()//описание моей функции
{
...
}
alors comment puis-je obtenir l'adresse de myFunc ? J'en ai besoin pour trouver comment trouver l'adresse de WndProc (que je décris avec une fonction personnalisée) pour la passer au paramètre de la classe.
paladin80: Doit fermer sur un stop loss. Le marché du Forex s'ouvre à 00:00 GMT.
C'est loin d'être certain, il pourrait bien se fermer à la première citation. Vous devez lire les documents, et les sociétés de courtage écrivent ce qu'elles veulent.
Comment puis-je trouver l'adresse de ma fonction utilisateur ? C'est-à-dire que si ma liste dit
alors comment puis-je obtenir l'adresse de myFunc ? J'en ai besoin pour trouver comment trouver l'adresse de WndProc (que je décris avec une fonction personnalisée) pour la passer au paramètre de la classe.
Il s'agit d'une fonction MQL4 : elle n'est même pas compilée au sens littéral du terme, mais elle est exécutée par l'interpréteur au moment de l'exécution.
Il s'agit d'une fonction MQL4 : elle n'est même pas compilée au sens littéral du terme, mais elle est exécutée par l'interpréteur au moment de l'exécution.
C'est là que le chien est enterré. Je suis juste désolé d'avoir perdu mon temps pendant 2 ou 3 semaines, car j'ai choisi une interface de fenêtrage indépendante pour mon robot dans MQL4+WinAPI sans aucune dll auto-écrite. Je suis désolé de ne pas l'avoir réalisé plus tôt, je suis désolé pour mon propre code et mes développements.
Pour résumer. Vous ne pouvez pas créer une fenêtre superposée (c'est-à-dire non enfant) sans copier le code dans votre dll, car lors de la description de WNDCLASS (ou WNDCLASSEX)
typedef struct tagWNDCLASSEX {// это с MSDN
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;//<-
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;
lignes indiquées par la flèche lors de l'empaquetage de la structure dans un tableau d'int.
lpwcx[0]=0x30;//cbSize// это на MQL4
lpwcx[1]=0x0A23;//style//lpwcx[2]=lpfnWndProc;<-
lpwcx[3]=0;//cbClsExtra
lpwcx[4]=0;//cbWndExtra
lpwcx[5]=GetModuleHandleA(lpModuleName);//hInstance
lpwcx[6]=LoadIconA(hInstance,IDI[0]);//hIcon
lpwcx[7]=LoadCursorA(hInstance,IDC[0]);//hCursor
lpwcx[8]=GetStockObject(WHITE_BRUSH);//hbrBackground
lpwcx[9]=StrStrA(lpszMenuName,lpszMenuName);
lpwcx[10]=StrStrA(lpszClassName,lpszClassName);
lpwcx[11]=0;//hIconSm//передаём структуру в упакованном интовом массиве и регистрируем класс
atom=RegisterClassExA(lpwcx[12]);
l'adresse de la procédure de la fenêtre, c'est-à-dire le gestionnaire de la souris et du clavier pour cette fenêtre, est passée. La procédure de fenêtre dans MQL4 peut être implémentée comme une fonction définie par l'utilisateur, mais il est impossible d'obtenir son adresse dans l'interpréteur, il n'y a donc rien à passer. Le maximum qui est possible dans MQL4 est d'utiliser les classes de fenêtres standard, mais elles ne seront utilisées que comme fenêtres enfants. Pour simplifier, une fenêtre créée par l'indicateur ne peut pas être saisie avec la souris et placée sur le bord du terminal (puisqu'il s'agira d'une fenêtre enfant), alors qu'une fenêtre superposée peut être placée sur le bord du terminal. La fenêtre enfant sur les classes de fenêtres standard est déjà implémentée dans mt4gui.dll, si quelqu'un en a besoin. Mais la fenêtre superposée avec son propre gestionnaire de souris et de clavier est impossible.
Je demande aux modérateurs de poster ce dialogue et tous les messages connexes dans un sujet séparé comme "comment créer une fenêtre dans MQL4", afin que d'autres ne fassent pas les mêmes erreurs et puissent le trouver dans un moteur de recherche.
Bonjour, j'ai téléchargé metatreider4. L'onglet de trading ne s'affiche pas comme dans la version de démonstration(((. Dites-moi ce qui ne va pas ??????.
Le courtier lit-il l'adresse IP de l'ordinateur du trader uniquement en mode en ligne ou est-il techniquement possible de décharger l'historique à partir d'un dossier dans MT4 ?
J'ai décidé d'implémenter des "hotkeys" (sans utiliser les touches de contrôle comme Ctrl, Alt, Shift). Mais le code ne fonctionne pas.
#property indicator_chart_window#import "user32.dll"bool RegisterHotKey(int hWnd, int id, int fsModifiers, int vk);
bool PeekMessage (int& lpMsg[7], int hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg);
bool UnregisterHotKey (int hWnd, int id);
#importexternstring s0="идентификатор горячей клавиши";
externint id;
externstring s1="код клавиши (список см. winuser.h)";
externint vk;
externstring s2="номер окна (от нуля до WindowsTotal()-1)";
externint aWindowNumber;
bool PM;
int init()
{
ObjectCreate("Smile",OBJ_LABEL,aWindowNumber,0,0);
ObjectSet("Smile",OBJPROP_XDISTANCE,0);
ObjectSet("Smile",OBJPROP_YDISTANCE,0);
ObjectSetText("Smile", StringSetChar("", 0, 75), 50, "WingDings", Red);
return(RegisterHotKey(WindowHandle(Symbol(), Period()), id, 0, vk));
}
int deinit()
{
ObjectDelete("Smile");
WindowRedraw();
return(UnregisterHotKey(WindowHandle(Symbol(), Period()), id));
}
int start()
{
int lpMsg[7];
/*
Структура lpMsg для WM_HOTKEY:
0 - хэндл окна//HWND(MSDN)//int(MQL4)
1 - WM_HOTKEY (0x0312)//UINT(MSDN)//int(MQL4) 2 - заданный id//WPARAM(MSDN)//int(MQL4) 3 - млардшее слово - ноль (модификатор, - не задаём), старшее - код виртуальной клавиши//LPARAM(MSDN)//int(MQL4) 4 - время//DWORD(MSDN)//int(MQL4) 5 - координата х мышки//структура POINT. LONG(MSDN)//int(MQL4) 6- координата у мышки//LONG(MSDN)//int(MQL4)
*/
PM=PeekMessage(lpMsg, WindowHandle(Symbol(), Period()), 0, 0, 1);//1 = PM_REMOVEif (lpMsg[1]==0x0312){
if(lpMsg[2]==id){
switch(StringGetChar(ObjectDescription("Smile"),0)){
case74 : ObjectSetText("Smile", StringSetChar("", 0, 75), 50, "WingDings", Red);
case75 : ObjectSetText("Smile", StringSetChar("", 0, 74), 50, "WingDings", Red);
}
}
}
return(0);
}
Pourquoi ça ne marcherait pas ? En théorie, le smiley est censé changer. J'ai mis 81 (code clé Q), mais vous pouvez mettre n'importe quoi à cet endroit. Voici les codes clés :
123456784950515253545556
Q W E R T Y U I
8187698284898573
A S D F G H J K
6583687071727475
Z X C V B N M ,
90886786667877188
Ajouté: impossible d'appeler PeekMessage - erreur système 127 "specified procedure not found". RegisterHotKey renvoie 1 (vrai). J'ai essayé de regarder en appelant RtlGetLastWin32Error() avec NativeAPI après PeekMessage, cela ne vient même pas. Et de souligner
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Comment puis-je trouver l'adresse de ma fonction utilisateur ? C'est-à-dire que si ma liste dit
alors comment puis-je obtenir l'adresse de myFunc ? J'en ai besoin pour trouver comment trouver l'adresse de WndProc (que je décris avec une fonction personnalisée) pour la passer au paramètre de la classe.
Doit fermer sur un stop loss. Le marché du Forex s'ouvre à 00:00 GMT.
C'est loin d'être certain, il pourrait bien se fermer à la première citation. Vous devez lire les documents, et les sociétés de courtage écrivent ce qu'elles veulent.
Comment puis-je trouver l'adresse de ma fonction utilisateur ? C'est-à-dire que si ma liste dit
alors comment puis-je obtenir l'adresse de myFunc ? J'en ai besoin pour trouver comment trouver l'adresse de WndProc (que je décris avec une fonction personnalisée) pour la passer au paramètre de la classe.
Il s'agit d'une fonction MQL4 : elle n'est même pas compilée au sens littéral du terme, mais elle est exécutée par l'interpréteur au moment de l'exécution.
Pourquoi l'expert ne modifie-t-il pas les ordres ?
Voici la fonction :
Appelé au début comme ceci :
Il s'agit d'une fonction MQL4 : elle n'est même pas compilée au sens littéral du terme, mais elle est exécutée par l'interpréteur au moment de l'exécution.
C'est là que le chien est enterré. Je suis juste désolé d'avoir perdu mon temps pendant 2 ou 3 semaines, car j'ai choisi une interface de fenêtrage indépendante pour mon robot dans MQL4+WinAPI sans aucune dll auto-écrite. Je suis désolé de ne pas l'avoir réalisé plus tôt, je suis désolé pour mon propre code et mes développements.
Pour résumer. Vous ne pouvez pas créer une fenêtre superposée (c'est-à-dire non enfant) sans copier le code dans votre dll, car lors de la description de WNDCLASS (ou WNDCLASSEX)
lignes indiquées par la flèche lors de l'empaquetage de la structure dans un tableau d'int.
l'adresse de la procédure de la fenêtre, c'est-à-dire le gestionnaire de la souris et du clavier pour cette fenêtre, est passée. La procédure de fenêtre dans MQL4 peut être implémentée comme une fonction définie par l'utilisateur, mais il est impossible d'obtenir son adresse dans l'interpréteur, il n'y a donc rien à passer. Le maximum qui est possible dans MQL4 est d'utiliser les classes de fenêtres standard, mais elles ne seront utilisées que comme fenêtres enfants. Pour simplifier, une fenêtre créée par l'indicateur ne peut pas être saisie avec la souris et placée sur le bord du terminal (puisqu'il s'agira d'une fenêtre enfant), alors qu'une fenêtre superposée peut être placée sur le bord du terminal. La fenêtre enfant sur les classes de fenêtres standard est déjà implémentée dans mt4gui.dll, si quelqu'un en a besoin. Mais la fenêtre superposée avec son propre gestionnaire de souris et de clavier est impossible.
Je demande aux modérateurs de poster ce dialogue et tous les messages connexes dans un sujet séparé comme "comment créer une fenêtre dans MQL4", afin que d'autres ne fassent pas les mêmes erreurs et puissent le trouver dans un moteur de recherche.
Bonne journée !
Le courtier lit-il l'adresse IP de l'ordinateur du trader uniquement en mode en ligne ou est-il techniquement possible de décharger l'historique à partir d'un dossier dans MT4 ?
J'ai décidé d'implémenter des "hotkeys" (sans utiliser les touches de contrôle comme Ctrl, Alt, Shift). Mais le code ne fonctionne pas.
Pourquoi ça ne marcherait pas ? En théorie, le smiley est censé changer. J'ai mis 81 (code clé Q), mais vous pouvez mettre n'importe quoi à cet endroit. Voici les codes clés :
Ajouté: impossible d'appeler PeekMessage - erreur système 127 "specified procedure not found". RegisterHotKey renvoie 1 (vrai). J'ai essayé de regarder en appelant RtlGetLastWin32Error() avec NativeAPI après PeekMessage, cela ne vient même pas. Et de souligner
- l'erreur de compilation apparaîtra.