Float aus Edit-Box lesen



  • Hallo,

    Weiss von euch jemand, wie man einen Float-Wert aus einer Edit-Box lesen kann? Da stehen ja nur Strings drin, brauche aber Zahlen mit Komma (oder eben Punkt).

    Und natuerlich muss das Ergebnis, welches wieder ein Float ist in eine weitere Edit-Box geschrieben werden.

    habe folgendes, funktioniert aber nicht

    float GetFloatFromEdit(HWND hWnd)
    {	
    	char* EditContent[256];
    	GetWindowText(hWnd, EditContent, 255);
    	return (float) atof(EditContent);
    }
    

    Den Handle zur Box uebergebe ich mit

    GetDlgItem(hWnd,IDC_EDIT)
    

    Wobei hWnd das Panel ist und IDC_EDIT die Edit-Box.

    Vielleicht weiss jemand Rat.

    der Guenther



  • das beste wäre wenn du die editbox subclasst
    http://www.winapi.net/index.php?inhalt=s27
    und halt nur zahlen und den punkt zulässt.



  • Hallo,

    Danke fuer deine Hilfe,

    Aber soweit bin ich noch gar nicht. Im Moment schreibe ich tatsaechlich nur Zahlen und Punkte rein.

    Habe mir jetzt auch mal mit

    MessageBox(NULL,EditContent,"Content",0);
    

    angesehe, was der ausliest. Und siehe, es sind tatsaechlich meine eingegebnen Zahlen.

    Also das Auslesen der Textbox kann es nicht sein. Es muss also an atof() liegen.

    Die MSDN schweigt ueber solche Probleme. Ich habe es auch nur mit Kommafreien Zahlen versucht und bekomme auch kein Ergebnis.

    Ist schon komisch.

    der Guenther



  • atof kann es auch nicht sein. Habe das mal als temporaere Varible gespeichert. und siehe da, alles toll in einen Float ueberfuehrt.

    Ist echt komisch.

    Also, habe jetzt folgendes probiert:

    double GetDoubleFromEdit(HWND hWnd, int EditID)
    {	double temp;
    	char* EditContent[100];
    	GetDlgItemText(hWnd,EditID,EditContent,100);
    	MessageBox(NULL,EditContent,"Content",0);
    	temp=atof(EditContent);
    	return temp;
    }
    

    Bis hierhin ist das alles Toll. Die MessageBox liefert den richtigen Inhalt und in temp steht beim Debuggen auch das richtige drin.

    Wenn ich jetzt aber folgendes mache:

    double box=GetDoubleFromEdit(hWnd,IDC_EDIT);
    

    steht in box nicht mehr das richtige drin (sondern 5022176.0000000 unabhaengig davon, was ich in die EditBox reinschreibe). Was laeuft denn da schief? Da sollte doch genau das gleiche drin stehen wie in temp.

    komisch komisch,

    der Guenther



  • char* EditContent[100] muss des ned char EditContent[100] sein ?



  • Deine "double temp" ist nach verlassen der Funktion nicht mehr existent. Warum das so ist, fragst Du am besten ein C/C++-Tutorial Deines Vertrauens.



  • Scopewächter schrieb:

    Deine "double temp" ist nach verlassen der Funktion nicht mehr existent. Warum das so ist, fragst Du am besten ein C/C++-Tutorial Deines Vertrauens.

    das stimmt, aber in dieser funktion spielt der scope keine rolle, da per value zurückgegeben wird und dieses wird bekanntermassen kopiert.



  • Hallo Leute,

    Danke fuer eure Hilfe.

    <peinlich>

    Hatte vergessen den Prototyp der Funktion anzupassen. Die Funktion hat naemlich vorher int aus ner Editbox geholt und naja, ihr wisst wie das geht.

    </peinlich>

    der Guenther.


Anmelden zum Antworten