David, er lijken wat problemen van dat soort te zijn met build 402. Kijk hier enOriginally Posted by ;
http://forum.mql4.com/40874/page3. Ik heb de vlucht van de EA gevolgd en er gebeuren echt vreemde dingen. Ten eerste: als b.v. tijdgeschakeld, geeft de functie IsStopped () mql4 true als resultaat. Het is een bekend (duidelijk niet gedocumenteerd) feit dat terwijl IsStopped () = true is, het aanroepen van een user32.dll-functie ervoor zorgt dat de MT4 een paar seconden blijft hangen. Dat is prima, maar ik heb geregistreerd dat IsStopped () blijkbaar nog steeds waar is na een TF-verandering soms (!) In build 402. In ��n geval merkte ik dat het twee en een keer waar was en terug naar false, zonder iets te doen, zonder enige reden. Dat is gek. Ten tweede: InputResizer verandert kenmerken van het invoervenster zodat Windows het als aanpasbaar begint te behandelen. Daarom verschijnen er pijlen wanneer u grenzen met de muisaanwijzer aanwijst, en verandert het venster in werkelijkheid zoals we gewend zijn. Maar de knoppen binnen (knoppen, tabbladen, het formulier) blijven ongewijzigd op hun oorspronkelijke plaatsen:
De reden hiervoor is dat MT4 de DWM (Desktop Window Manager) belt om het venster te plotten en te beheren en geeft de stijl door als niet-aanpasbaar. Ik kan het uitvoerbare MT4 niet patchen om dit kleine beetje te veranderen omdat het is verpakt (beschermd tegen reverse engineering van de code) met Themida. En ik weet geen enkele manier om de DWM te vertellen het onverwachte te doen omdat ik niet MT4 ben - de app die het venster bestelde. Dus er is maar ��n manier - zodra IR het venster wijzigbaar maakt en de initco�rdinaten toepast, wordt gecontroleerd of het formaat van het venster is gewijzigd tussen teken (indy) of slaapinterval (EA) en zo ja, dan worden alle binnenelementen verplaatstbemeten -by-one indien nodig, ten opzichte van nieuwe positiegrootte. Nu, als IsStopped () waar wordt, heeft de EA ca 2 seconden om de bewerking te voltooien. Dat is ok als er redenen zijn waarom het waar is; de legitieme redenen zijn: TF-switch, EA-detachering, accountwijziging, eigen instellingen wijzigen. Misschien zijn er nog andere, maar ik kan me niet voorstellen dat IsStopped () een legitieme reden is om waar te worden terwijl je (een) invoervenster open hebt staan. Maar het gebeurt gewoon. Ik veronderstel dat de ophanging veroorzaakt wordt doordat de EA de Windows API aanroept en gedwongen wordt gestopt door MT4 in het midden van iets. Natuurlijk kan ik het mis hebben. Het ontbrekende herschrijf (uw foto) probleem kan soms gebeuren; het is precies zoals je beschrijft. Het is een onschuldige bug en ik denk dat we ermee moeten leven. De inhoud is correct, gewoon niet getekend. Dit wordt (nogmaals) veroorzaakt door het feit dat de DWM niet om ons raam geeft. Er is een functie in de code: Inserted Code/Dit zorgt ervoor dat het vak opnieuw tekent, anders krijgen we artefacts InvalidateRect (pWnd, s, true); die zorgt voor het herschilderen van de inhoud als we de co�rdinaten zien veranderen. In de vorige versie is dit gedaan als de breedte of hoogte is gewijzigd, nu worden we opnieuw geverfd, zelfs als deze gewoon wordt gesleept. Ik probeerde dit bij elke tikpass te doen, maar het flikkert slecht. Voor nu heb ik alle verwijzingen naar IsStopped () in de EA-code verwijderd. Het nadeel is nu een trage reactie bij het wisselen van tijdframes, maar de EA zou nu de focus met de API niet moeten verliezen. Ik raad aan om de EA aan een onheilspellend schema te koppelen. Het kan zich in elk lopend exemplaar op uw pc bevinden. Update in bericht # 1, probeer het en laat het me weten. Ik stel je hulp zeer op prijs. Ik zie echter dat het echt niet logisch is om deze venster-hack ge�mplementeerd te hebben in (elke) mql4-vorm. Ik zal dit hulpprogramma coderen als een native Win32-appliion, zittend in het systeemvak. En ik denk dat alle problemen verdwenen zijn. Nooit gedaan, maar hey, ik moet het leren
Ik wil mijn eigen platform coderen voor testen in het volgende jaar. Dank aan iedereen die het leuk vindt!