Edit-Feld auslesen



  • Hallo an alle,

    versuche gerade mein erstes C++ Programm mit dem Builder zu machen, hänge aber im moment an folgendem Problem:

    Ich habe in meinem Programm zwei Edit-Felder

    diese Edit-Felder möchte ich auslesen und den Inhalt später in eine Datei schreiben. Der Builder sagt mir aber bei folgender Zeile immer nur:
    E2294 Auf linker Seite der Struktur ist . oder .* erforderlich

    betreffende Zeile: name=Edit1.Text; name iss folgendermassen deklariert: char name[50],

    wo liegt der fehelr, bitte um antwort!



  • Da Alle VCL-Komponenten als Pointer angelegt werden, musst du über den Pfeil-Operator auf Eigenschaften usw. zugreifen.

    name = Edit->Text; // oder
    name = (*Edit).Text // ist das selbe in grün
    

    Das sind aber grundlegende Dinge, die du dir vorher noch aneigenen solltest.



  • wenn du mit irgendwelchen Komponenten nicht zurecht kommst, wähle die Komponente an und Drücke F1, dann öffnet sich die Hilfe!

    Da hättest du erkannt, das es Edit1->Text ist...(Pfeiloperator)
    Weiterhin hättest gesehen, das Edit1->Text ein AnsiString ist, also.

    String name = Edit1->Text;
    

    schau dir am besten mal das Tutorial hier an und ein Blick in die FAQ ist auch nicht verkehrt, damit brauchst du in Zukunft diese grundlegenden Sachen nicht immer nachzufragen!



  • Besten dank schon mal für euren Rat, werde mir das Tutorial angucken, wenn ich zeit habe. Noch ne Kurze Frage, wie bring ich das jetzt unter einen Hut: die Varaibale Name wurde ober array of char mit char name[50] deklariert, wenn ich jetzt die zuweisung mache --> name= Edit1->Text;
    dann sagt er mir E2277: L_Wert erwartet.

    Bin ich richtig in der Annahme, das es an der deklarierung liegt also char. wenn ich name als string deklariere, habe ich das problem, das ich nicht weiss wie ich den wert per ofstream in die datei schreiben soll. Wei soll cih vorgehen?



  • Hallo

    du kannst grundsätzlich immer (Ansi)String verwenden.
    das mit dem ofstream kannst du so lösen

    ofstream << name.c_str();
    

    oder du beachtest diesen Hinweis aus der Builder-Hilfe

    Wenn Sie #include <iostream> oder #define VCL_IOSTREAM angeben, bevor Sie die include-Anweisung für die Datei dstring.h (die normalerweise indirekt durch die Datei vcl.h einbezogen wird) festlegen, können Sie die Streaming-Operatoren (<< und >>) mit AnsiStrings als Argument verwenden

    bis bald
    akari



  • Hallo,

    Nimme lieber String (oder AnsiString, ist das Gleiche). Schau einfach mal in die Hilfe zu AnsiString, da steht auch wie mit streams zusammengearbeitet wird. Alternativ kannst du mit Hilfe von AnsiString::c_str() normal in einen ofstream schreiben.
    Zum Kopieren eines AnsiString in einen char* gibt es die Funktionen strcpy oder besser strncpy.
    Am Besten ist, du beschäftigst dich mal mit der BCB-Hilfe (zu AnsiString usw.) bzw. mit einen Tutorial (Texteditortutorial aus der Hilfe).

    [edit]Wieder mal später als akari. 😉 [edit]



  • langsam wirds, habe jetzt noch nen bissel verbessert und jetzt kommt er natürlich wieder mit einer Fehlermeldung:(ich hoffe die letzte, dann kann ich das tutorial anfangen)

    E2285 Keine Übereinstimmung für 'string::operator =(AnsiString)' gefunden

    die betreffende Zeile:

    name = Edit1->Text;

    danke schon mal



  • Hallo

    vielleicht solltest du dich mal entscheiden, was für eine String-Klasse du verwenden willst?
    Die Fehlermdung sagt das name wohl ein std::string ist, während ->Text immer von einen VCL-String ist! Das ist nicht dasselbe, also bitte immer auf die Groß/Kleinschreibung achten.

    AnsiString name;
    name = Edit1->Text;
    stream << name.c_str();
    

    /Edit also du must zwischen diesen Sorten unterscheiden
    VCL : AnsiString = String
    C++ : std::string
    C : char[], char*
    die sich alle mehr oder weniger direkt hin- und herkonvertieren lassen.

    bis bald
    akari



  • Danke schön, es klappt



  • PuppetMaster2k schrieb:

    Da Alle VCL-Komponenten als Pointer angelegt werden, musst du über den Pfeil-Operator auf Eigenschaften usw. zugreifen.

    Das sollte bestimmt heissen "auf dem Heap angelegt werden".



  • Hallo nochmal an alle! Bin schon weit vorangekommen. Habe mal ne Frage:

    Wenn man ein Programm öffnet, hat man ja unten in der Taskleiste ein "feld" von dem Programm, womit man sieht, das das Programm geöffnet ist. Wenn man da nen rechtsklick drauf macht, könnte man ja den Befehl schliessen anklicken. Ich bin jetzt auf der Suche nach einer Möglichkeit diese Menü, welches sich per rechtsklick aufrufen lässt, zu sperren oder abzuschalten. Habt ihr da ne Lösung?



  • Hallo

    ich vermute dazu müstest du die komplette Anzeige des Programms in der taskleiste selber abschalten, wie das geht steht in der FAQ.

    /Edit : übrigens : Ein Thema ein Thread, ein Thread ein Thema. Also hätte das in einen neuen Thread gehört, wenn du _nicht_ pber Suche oder FAQ gefunden hast.

    bis bald
    akari



  • Hallo, ich habe in einer GUI ein EDITTEXT-Feld in dem ich von einer Istwerte anzeigen lasse. Die Werte kommen von einer Counterkarte, die im Rechner verbaut ist und die erfassten Impulse hochzählt.
    Bisher lief der Rechner unter Windows2000 und hat alles prima funktioniert. Jetzt läuft der Rechner unter XP und das EDITTEXT-Feld zeigt mir nur noch den Wert -1.#J an. Der Datentyp ist double. Hat jmd. eine Idee woran das liegen kann?
    Den Quelltext kann ich gerne per Mail senden.

    Danke, Monty74


Log in to reply