Editboxen auslesen und Inhalt ausgeben



  • Hallo erstmal,
    also sry wenn der Beitrag schon besteht ...
    Aber ist echt dringend^^...

    Also ich möchte in ein Editfeld (eine Editbox) eine Zahl schreiben
    dann soll ,wenn ein Button gedrückt wurde, diese Zahl mit Text dahinter also z.B.: 1000(Zahl) + Euro wurden ausgegeben(Text)
    1000 Euro wurden ausgegeben
    in einer MessageBox oder irgendwie anders ausgegeben werden.
    Mein Problem liegt darin das Editfeld auszulesen und dann den Inhalt auszugeben.
    Bitte um schnelle und passende Antworten!!^^
    Danke im Voraus!
    dontfedphil



  • wie wär's mit ➡ WM_GETTEXT ?

    Greetz, Swordfish



  • Also ich denke mir mal das du die Editbox wie folgt deklarierst.

    hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
       "edit",
       Text,  
       WS_CHILD | WS_VISIBLE, 
       0,0,0,0, 
       hWnd, 
       NULL, 
       ((LPCREATESTRUCT)lParam)->hInstance, 
       NULL);
    

    Text ist hierbei ein Zeiger auf char.
    Falls nun etwas in die Editbox geschrieben wird, so steht dies auch in Text, Vorraussetzung man holt den Inhalt aus der Editbox.....

    //....
    int iLength = GetWindowTextLength(hEdit);
    Text = new char[iLength];
    GetWindowText(hEdit, Text, iLength+1);
    //....
    

    Hiernach steht alles in Text.



  • Der arme Buffer wird dir warscheinlich überlaufen 😉



  • (D)Evil schrieb:

    Der arme Buffer wird dir warscheinlich überlaufen 😉

    LOL, schöne Formulierung! 😃



  • Vielen Dank für die schnellen und guten (hilfreichen) Antworten!!!!!!!!
    Es klappt!!!!!!!!!! *freufreu* 😉 🙂

    THX



  • (D)Evil schrieb:

    Der arme Buffer wird dir warscheinlich überlaufen 😉

    Ich würde mal gerne wissen wieso. Denn bisher hatte ich noch nie Probleme damit, allerdings kommt es dabei ja auch darauf an wie man die Variable weiterverwendet...

    Trotzdem würde es mich mal interessieren wie du das meinst.



  • Weil

    int iLength = GetWindowTextLength( hEdit ); // die Länge des Textes zurückgibt, die MSDN schweigt sich zum '\0' aus.
    Text = new char[ iLength ];                      // also musst du hier mindestens iLength + 1 Bytes reservieren
    GetWindowText( hEdit, Text, iLength + 1 );       // da hier sonst über den Puffer geschrieben werden könnte.
    

    Greetz, Swordfish



  • Du legst nen kleineren Array an, als du chars max. holst 😉



  • Bei

    GetWindowTextLength (hEdit);
    

    wird der Terminator ('\0') nicht mitgezählt.
    Bei der GetWindowText Funktion wird dieser allerdings schon wieder mitgezählt, wenn man diesen nun aber nicht haben, will ist dies eine Notlösung.

    Daraus folgt: der Buffer kann/wird überschrieben, so hat man allerdings keinen Terminator mehr im String. Ob das ne gute Lösung ist bezweifle ich auch ;).



  • Den '\0' will man aber haben 😃

    Greetz, Swordfish

    BTW: Buffer-Overruns sind nie eine "Lösung"



  • Platy schrieb:

    Bei

    GetWindowTextLength (hEdit);
    

    wird der Terminator ('\0') nicht mitgezählt.
    Bei der GetWindowText Funktion wird dieser allerdings schon wieder mitgezählt, wenn man diesen nun aber nicht haben, will ist dies eine Notlösung.

    Daraus folgt: der Buffer kann/wird überschrieben, so hat man allerdings keinen Terminator mehr im String. Ob das ne gute Lösung ist bezweifle ich auch ;).

    <- ⚠ <-> ⚠ <-> ⚠ ->

    Was soll das denn bitte für ne schwachsinnige Schlussfolgerung sein ?!
    Wenn dir '\0' auf S*** geht, dann nimm std::strings o.ä.. Wenn du aber mit C-Strings arbeitest musst du Null-Terminieren.

    ➡ Siehe auch Swordfish's Post:

    Swordfish schrieb:

    BTW: Buffer-Overruns sind nie eine "Lösung"



  • CodeFinder schrieb:

    Platy schrieb:

    Bei

    GetWindowTextLength (hEdit);
    

    wird der Terminator ('\0') nicht mitgezählt.
    Bei der GetWindowText Funktion wird dieser allerdings schon wieder mitgezählt, wenn man diesen nun aber nicht haben, will ist dies eine Notlösung.

    Daraus folgt: der Buffer kann/wird überschrieben, so hat man allerdings keinen Terminator mehr im String. Ob das ne gute Lösung ist bezweifle ich auch ;).

    <- ⚠ <-> ⚠ <-> ⚠ ->

    Was soll das denn bitte für ne schwachsinnige Schlussfolgerung sein ?!
    Wenn dir '\0' auf S*** geht, dann nimm std::strings o.ä.. Wenn du aber mit C-Strings arbeitest musst du Null-Terminieren.

    ➡ Siehe auch Swordfish's Post:

    Swordfish schrieb:

    BTW: Buffer-Overruns sind nie eine "Lösung"

    Naja.....
    Es kommt immer darauf an wie man die Strings später weiterverwenden will. Ich brauchte in meinen ehem. Projekt nun einmal eine solche Lösung. Als ich auf die Frage im ersten Post geantwortet habe, habe ich nuneinmal den Code aus dem Projekt genommen, daher ist der Terminator nicht vorhanden. Mir ist auch klar das wenn man einfachen Text einließt der automatische Terminator schon eine nützliche z.T. "notwendige" Sache ist.



  • Ich denke du hast noch nicht wirklich erfasst, worum es mir geht. Wenn du über Puffergrenzen schreibst verursachst du einen sog. Buffer-Overrun, welcher (dann als Sicherheitslücke) uU. ausgenützt werden kann, um fremden Code auf deinem Rechner auszuführen.

    Greetz, Swordfish



  • Swordfish schrieb:

    Ich denke du hast noch nicht wirklich erfasst, worum es mir geht. Wenn du über Puffergrenzen schreibst verursachst du einen sog. Buffer-Overrun, welcher (dann als Sicherheitslücke) uU. ausgenützt werden kann, um fremden Code auf deinem Rechner auszuführen.

    Greetz, Swordfish

    Dessen bin ich mir durchaus bewusst.
    Wenn ich ein Programm entwickle, welches auf fremden Rechnern laufen soll, dann baue ich so oder so noch ein paar mehr Technicken ein um solche dinge zu untersagen.

    Fazit:
    Ich weiß was du meinst, ich weiß auch das solche Overruns zum Programmabsturz oder noch schlimmeren Dingen führen kann.



  • Platy schrieb:

    Dessen bin ich mir durchaus bewusst.

    Hmmm.... ➡

    Platy schrieb:

    Wenn ich ein Programm entwickle, welches auf fremden Rechnern laufen soll, dann

    ... muss man dort die C-Strings auch Null-Terminieren, oder du arbeitest mit 'Systemen', die diese Welt noch nicht gesehen hat 😃 ...die würd ich gern mal kennen lernen

    Platy schrieb:

    baue ich so oder so noch ein paar mehr Technicken ein um solche dinge zu untersagen.

    Wow!, Das hört sich aber futuristisch an...Was sind das denn für 'Technicken' ? 😃

    Platy schrieb:

    Fazit:
    [...]

    😃 Sicher ?! 😃



  • CodeFinder schrieb:

    Platy schrieb:

    baue ich so oder so noch ein paar mehr Technicken ein um solche dinge zu untersagen.

    Wow!, Das hört sich aber futuristisch an...Was sind das denn für 'Technicken' ? 😃

    Würd' ich auch gerne wissen 😉

    Greetz, Swordfish



  • CodeFinder schrieb:

    Platy schrieb:

    Fazit:
    [...]

    😃 Sicher ?! 😃

    Ja.

    Naja...
    Damit diese Diskussion nicht noch weiter ausartet sag ich es mal so:

    Habt gewonnen, ich habe einen Fehler gemacht.


Anmelden zum Antworten