Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MetaTrader4 Internal Message

Geschrieben

Hat jemand eine Liste von den <MetaTrader4_Internal_Message>. Ich habe nur eine "russiche" gefunden - müsste man halt übersetzten.

Man könnte doch eine eigene - TN-winUser32.mqh - aufbauen - was meint ihr?? vola2.gif oder 10points.gif

Featured Replies

Geschrieben

Hat jemand eine Liste von den

 

Ist ja nicht so wirklich mein Bereich....

Aber meinst du vllt. diese hier ?

 

List

 

Denke eher nicht, das wäre wohl zu einfach gewesen :vola3:

Geschrieben
  • Autor

Ist ja nicht so wirklich mein Bereich....

Aber meinst du vllt. diese hier ?

 

List

 

Denke eher nicht, das wäre wohl zu einfach gewesen vola3.gif

 

leider hast du recht fun.gif

es geht um die Erweiterung von der winUser32.mqh Library

Geschrieben

leider hast du recht fun.gif

 

Okay, letzter Versuch, dann lasse ich die Suche von Dingen, von denen ich nichts verstehe...

 

bullet_go.png

//===========================================================================
// FUNCTIONS LIBRARY
//===========================================================================

/*
AppendIfMissing() appends a character to a string if it's not already the rightmost character
AppendIfNotNull() appends a character to a string if the string is not null
BarConvert() converts a bar# (candle#) to the equivalent bar# on another timeframe
BaseToNumber() performs multibase arithmetic: converts a non-base 10 number (string) to a base 10 integer
BoolToStr() converts a boolean value to "true" or "false"
DateToStr() formats a MT4 date/time value to a string, using a very sophisticated format mask
DatesToStr() performs multiple DateToStr() operations in a single function
DebugDoubleArray() unloads a set of values from a double array, prefixed by the element number, to a single string
DebugIntegerArray() unloads a set of values from an int array, prefixed by the element number, to a single string
DebugStringArray() unloads a set of values from a string array, prefixed by the element number, to a single string
DivZero() returns 0 instead of 'divide by zero' error, if denominator evaluates to 0
DoubleArrayToStr() unloads a set of values from a double array to a single string, inserting a specified delimiter between the values
EasterDay() returns the MT4time value of Easter Sunday for the given year
ExpandCcy() expands a curency symbol name, e.g. "EJ" to "EURJPY"
ExtractAlpha() returns alphabetic (or other) characters in a string
ExtractUnique() returns 1 occurrence only of each char in a string; result may be optionally sorted asc/desc
FileSort() shell sorts an ASCII text file, rewriting the file with its records in alphanumeric order
GetHash() calculate and return checksum of a string
GetVisibility() returns suitable OBJPROP_TIMEFRAMES value from a timeframes string (e.g. "M1,M5,M15")
IntegerArrayToStr() unloads a set of values from an int array to a single string, inserting a specified delimiter between the values
ListGlobals() lists all GlobalVariables and their values, to a string
ListOrders() lists all orders of your chosen stati (open/pending/closed/deleted) to a string
LookupDoubleArray() looks up a numeric value in a double array, returning the element number (if found)
LookupIntegerArray() looks up a numeric value in an int array, returning the element number (if found)
LookupStringArray() looks up a string value in a string array, returning the element number (if found)
MathFactorial() calculates a factorial n(n-1)(n-2)...1 using a recursive technique
MathFix() returns the value of N, rounded to D decimal places (fixes precision bug in MQL4 MathRound)
MathInt() returns the value of N, rounded DOWN to D decimal places (fixes precision bug in MQL4 MathFloor)
MathSign() returns the sign (-1,0,+1) of a number
NumberToBase() performs multibase arithmetic: converts a base 10 integer to a non-base 10 number (string)
NumberToStr() formats a numeric (int/double) value to a string, using a very sophisticated format mask
NumbersToStr() performs multiple NumberToStr() operations in a single function
OrderStatus() given a ticket number, returns the order status (O=open, P=pending, C=closed, D=deleted, U=unknown)
ReadWebPage() reads a page from a specified URL into a string
ReduceCcy() reduces a currency symbol name, e.g. "EURJPY" to "EJ"
ReturnDay() returns the MT4time value of the (e.g.) 3rd Sunday after 14 Feb 2011
ShellsortDoubleArray() shell sorts an array of double values into ascending or descending sequence
ShellsortIntegerArray() shell sorts an array of int values into ascending or descending sequence
ShellsortString() shell sorts the characters in a string into ascending or descending ASCII sequence
ShellsortStringArray() shell sorts an array of string values into ascending or descending ASCII sequence
StrToBool() converts a suitable string (T(rue)/t(rue)/F(alse)/f(alse)/1) to a boolean value
StrToChar() returns the decimal ASCII value of a 1 byte string (inverse of MQL4's CharToStr())
StrToColor() converts a string (color name, RGB values, etc to a MQL4 color
StrToDate() converts a number of different string patterns to a MT4 date/time value
StrToDoubleArray() loads a double array from a delimiter-separated set of string values (e.g. "1,2,3"); returns the number of array elements loaded
StrToIntegerArray() loads an int array from a delimiter-separated set of string values (e.g. "1,2,3"); returns the number of array elements loaded
StrToNumber() strips all non-numeric characters from a string, returning a numeric (int/double) value
StrToStr() left/right/center aligns, or truncates, a string, using a very sophisticated format mask
StrToStringArray() loads a string array from a delimiter-separated set of string values (e.g. "1,2,3"); returns the number of array elements loaded
StrToTF() converts a timeframe string to a number (e.g. "M15" to 15)
StringArrayToStr() unloads a set of values from an string array to a single string, inserting a specified delimiter between the values
StringDecrypt() unencrypts a string that was previously encrypted using StringEncrypt()
StringEncrypt() encrypts a string
StringFindCount() returns the number of occurrences of a certain substring in a string
StringInsert() inserts characters into a given position in a string
StringLeft() returns the leftmost characters, or all but the N rightmost characters, of a string
StringLeftExtract() extracts N characters from a string, counting from the left
StringLeftPad() inserts specified padding characters at the beginning of a string
StringLeftTrim() removes all leading spaces from a string
StringLower() converts all alphabetic characters in a string to lowercase
StringOverwrite() overwrites characters in a given position of a string
StringRepeat() returns a given string, repeated N times
StringReplace() replaces substring in a string with another substring
StringReverse() reverses a string, e.g. "ABCDE" becomes "EDCBA"
StringRight() returns the rightmost characters, or all but the N leftmost characters, of a string
StringRightExtract() extracts N characters from a string, counting from the right
StringRightPad() appends specified padding characters to the end of a string
StringRightTrim() removes all trailing spaces from a string
StringTranslate() translates characters in a string, given a full translation table
StringTrim() removes all (leading, trailing and embedded) spaces from a string
StringUpper() converts all alphabetic characters in a string to uppercase
StrsToStr() performs multiple StrToStr() operations in a single function
TFToStr() converts a number to a timeframe string (e.g. 1440 to "D1")
YMDtoDate() converts 3 integers (year, month and day) to a MT4 date/time value
d() outputs up to 8 values to the file /EXPERTS/FILES/DEBUG.TXT, appending data to the end of the file
dd() outputs up to 8 values to the file /EXPERTS/FILES/DEBUG.TXT, creating a new file
err_msg() returns a full description of an error, given its error code number
log() outputs up to 8 values for viewing using Microsoft's DebugView facility

Geschrieben
  • Autor
guckst du hier ... C:\Program Files (x86)\MetaTrader\experts\include\WinUser32.mqh
  • 1 Monat später...
Geschrieben
  • Autor

... heute habe ich mal ein mql4 Rätsel für die Profis...

 

init {
...
get_val_from_EO_wnd(childWND);
}


double get_val_from_EO_wnd(int hWnd) {
string cName = "012345678901234567890123456789";
int dialog, edit, label;
string eo[1];

dialog = GetWindow(hWnd, GW_CHILD);
GetClassNameA(dialog, cName, 30);
string edVal = "	 ";
string labT = "	 ";
if (cName == "#32770") {
 edit = GetDlgItem(dialog, CID_EDIT);
 SendMessageA(edit, WM_GETTEXT, 10, edVal);
 eo[0] = edVal;
log("############");
log("edVal_0="+edVal);
//	 edVal = "";
//log("edVal_1="+edVal);
//log("edValue_1="+eo[0]);
log("-----------");
 dialog = GetWindow(hWnd, GW_CHILD);
 GetClassNameA(dialog, cName, 30);

 label = GetDlgItem(dialog, CID_LABEL);
 SendMessageA(label, WM_GETTEXT, 10, labT);
 eo[1] = labT;
}
log("edVal="+edVal);
log("labT="+labT);
log("eo[0]="+eo[0]);
log("eo[1]="+eo[1]);
return;
}

 

Ergebnis der Ausgabe: DebugView

[3112] ############

[3112] edVal_0=0.10

[3112] -----------

[3112] edVal=Lot

[3112] labT=Lot

[3112] eo[0]=Lot

[3112] eo[1]=Lot

 

Lass ich das mit dem Array weg stehen die korrekten Werte in den Variablen <edVal> und <labT>

Wie bekomme ich nun die Wert <0.10> in eo[0] und den Wert <Lot> in eo[1]

 

kann mir einer erklären was da abgeht?????

 

Der Dialog ist egal - Haupsache ein Label und eine Edit-Box

post-2251-0-08530500-1346924031.png

Geschrieben

Kannst Du bitte mal testen, was passiert wenn Du

string eo[2];

nutzt?

 

Vermutlich definierst Du mit "string eo[1]" einen Array mit nur einer Variablen(Wert/String wie auch immer) , nämlich den String den Du mit eo[0]="irgendwas" abrufen könntest .

 

Den Wert eo[1] gibt es in Deinem Code nicht, Du hast ihn nicht zugelassen . Das machst Du erst mit string eo[2]

 

Ist nur eine Vermutung und aus der Hüfte geschossen .

 

KB

Geschrieben

Hätte die gleiche Vermutung. Ich weiß nicht wie MT mit out-of-bounds reagiert, aber es gäbe ein paar mögliche Erklärungen warums genau so aussieht.

 

Ok, MT hat "interessantes" Verhalten bei out-of-bounds. Es gibt scheinbar einen "Out-of-Bounds Wert". Wenn man auf einen Index den es nicht gibt schreibt, wird danach bei Abfrage von einem index den es nicht gibt immer dieser Wert zurückgegeben.

Aber das erklärt das Verhalten in deinem Fall noch überhaupt nicht... :hmmmm:

Geschrieben
  • Autor

Kannst Du bitte mal testen, was passiert wenn Du

string eo[2];

nutzt?

 

Vermutlich definierst Du mit "string eo[1]" einen Array mit nur einer Variablen(Wert/String wie auch immer) , nämlich den String den Du mit eo[0]="irgendwas" abrufen könntest .

 

Den Wert eo[1] gibt es in Deinem Code nicht, Du hast ihn nicht zugelassen . Das machst Du erst mit string eo[2]

 

Ist nur eine Vermutung und aus der Hüfte geschossen .

 

KB

 

nein das ist es nicht...

 

es liegt wieder mal im Detail versteckt und zwar im Buffer

SendMessageA(label, WM_GETTEXT, 10, labT);

SendMessageA(hWnd, WM_GETTEXT, BufferSize, Var);

 

...der war einfach zu gross gewählt - die erste Länge ist 5 die zweite 4 - macht 9 und meine Size war 10 - d.h. die ersten Daten sind wahrscheinlich nach hinten geschoben wurden weil ja Platz im Buffer ist

 

habe jetzt vor WM_GETTEXT das gesetzt

len = SendMessageA(label, WM_GETTEXTLENGTH, 0, 0);
SendMessageA(label, WM_GETTEXT, len+1, labT);

 

jetzt geht es...

Bearbeitet von mtbf40

Geschrieben

... heute habe ich mal ein mql4 Rätsel für die Profis...

jetzt geht es...

 

Du bist der Profi. good2.gif

Geschrieben
  • Autor

... next Post - nächstes Problem

 

double set_val_to_EO_wnd(int hWnd, string labT, string par) {
string cName = "012345678901234567890123456789";
int dialog, edit, label;
double parS;

//String par = 1,12
parS = StrToDouble(par);
//parS = seltsamer Weise 1.000000 ?????
log("komme mit -> "+parS+" labT="+labT);
dialog = GetWindow(hWnd, GW_CHILD);
GetClassNameA(dialog, cName, 30);
 string labelT = "		 ";	
 edit = GetDlgItem(dialog, CID_EDIT);
 label = GetDlgItem(dialog, CID_LABEL);	
 SendMessageA(label, WM_GETTEXT, 10, labelT);
 if (labelT == labT) {
log("parS="+parS);
	 SendMessageA(edit, WM_SETTEXT, 0, parS);
 }

}

 

was läuft denn da schon wieder falsch???? - ich komme mit einem String -> 1,12 an und StrToDouble macht 1.00000000 daraus argg.gif

Bearbeitet von mtbf40

Geschrieben
Ich habe das jetzt nicht getestet, aber es muss doch heißen 1.12 nicht 1,12 oder ?
Geschrieben
  • Autor

Ich habe das jetzt nicht getestet, aber es muss doch heißen 1.12 nicht 1,12 oder ?

das ist richtig - aber ich bekomme im Moment nur 1,12 übergeben und muss damit arbeiten!

Geschrieben

Dann wirst Du vielleicht mit

int StringGetChar( string text, int pos)

 

weiter kommen ? Indem Du den Text an der 1., der 3. und 4.Stelle ausliest, dann einen "." einfügst und mit simplem "+" den String neu zusammenfügst

 

String par = "1,12";//
String A=StringGetChar(par,0);//
String B=StringGetChar(par,2);//
String C=StringGetChar(par,3);//
String NeuerString=A + "." + B + C;// jetzt sollte es 1.12 sein
parS = StrToDouble(NeuerString);//

 

Aber das wirst Du wohl auch schon überlegt haben ?

 

KB

Geschrieben
  • Autor

Ich würd mit StringFind und StringSubstr arbeiten um den , zu ersetzen aber im wesentlichen genau was KB meint ;)

 

es führen ja gewissermassen mehrere Wege nach Rom und zwar folgende:

1. die von euch beschriebenen - ich müsste dann auf jeden Fall mit einer for-Schleife arbeiten, denn die Werte können ja differieren - z.B. 1,25, 12,90, 123,00

2. einfach ein String-Edit in die Hauptapplikation statt einem Numeric-Edit - dann kann ich einfach 1.12 eingeben

3. ... und damit habe ich das eigentliche Problem gefunden - in den Systemeinstellungen unter <Region und Sprache> das Dezimaltrennzeichen auf <.> geändert.

das ausgerechnet das das Problem ist, habe ich mir fast gedacht!! - es ist eben "unser Problem" gegenüber dem englischsprachigen Raum, der unterschiedlichen Nutzung bestimmter Zeichen

 

ich habe jetzt erst einmal 3. angewandt, weil das am schnellsten ging - mal sehen wie sich das auf anderen Systemen auswirkt.

Am sinnvollsten ist 1. - denn dann habe ich überhaupt keine Probleme dance.gif

Geschrieben

1. ......., denn die Werte können ja differieren - z.B. 1,25, 12,90, 123,00

......

 

 

Dann wäre der Variante von Mythos , und richtig mit "For" , der Vorzug zu geben .Komma suchen und ersetzen .

 

Mir war nicht klar, dass die Stringlänge variieren kann, hätte ich auch dran denken können . -,-

 

KB

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.