Zahl von Textfeld in eine Variable einlesen?



  • //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include <iostream.h>
    #pragma hdrstop
    
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::PChClick(TObject *Sender)
    {
    system("C:\\WINDOWS\\System32\\shutdown.exe -s -f -t 60 ");
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::PCaClick(TObject *Sender)
    {
    system("C:\\WINDOWS\\System32\\shutdown.exe -a ");
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::TextfeldChange(TObject *Sender)
    {
    
    }
    //---------------------------------------------------------------------------
    

    Also kleine Beschreibung! Ich will im Textfeld des was ich dort eingebe einlesen in eine Variable int xx;
    Diese soll dann wiederrum beim klicken auf die Buttons anstatt der 60 geschrieben werden!

    char OutStr[100];
    sprintf(OutStr, "shutdown -s -f -t %d",a)xx;
    system (OutStr);
    

    wie bekomm ich jetzt aber die verdamte zahl in die variable xx rein? ich mein ich kann etwas java und nun auch c++ aber mit dem borland und oberflächiger programmierung kenn ich mich leidern icht so aus! woher bekomm ich da gute tutorials?
    bin neu hier im board und das is mein erster post 😉 hoffe war alles richtig und mit wird nett geholfen!

    MfG 1st



  • Statt dem system-Aufruf solltest du lieber die Funktion InitiateSystemShutdown verwenden.



  • ja aber wie mache ich dies? kannste mir mal eine tutorial homepage geben oder mir den code schreiben ? thx ^^



  • Vielleicht mit:

    xx=StrToInt(Editorfeldname->Text);

    ??
    Wenn es das is was du meinst 😃



  • void __fastcall TForm1::TextfeldChange(TObject *Sender)
    {
    float xx;
    xx=StrToInt(Textfeld->Text);
    char OutStr[100];
    sprintf(OutStr, "shutdown -s -f -t %d",xx);
    system (OutStr);
    }
    

    So das habe ich jetzt nun geschrieben! Dann hab ich noch Dateien included weil es sonst nicht möglich wäre!

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include <iostream.h>
    

    Dann nachdem ich es mit dem Compiler durchlaufen hat kam die Meldung:
    [Linker Fehler] Unresolved external 'TForm1::' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\PROJECT1.OBJ

    Mein gesamter Code sieht im Moment so aus!

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include <iostream.h>
    #pragma hdrstop
    
    #include "UnitX.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::TextfeldChange(TObject *Sender)
    {
    float xx;
    xx=StrToInt(Textfeld->Text);
    char OutStr[100];
    sprintf(OutStr, "shutdown -s -f -t %d",xx);
    system (OutStr);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::PCnClick(TObject *Sender)
    {
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::PChClick(TObject *Sender)
    {
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    
    }
    //---------------------------------------------------------------------------
    

    Die geschriebene Zahl soll im Textfeld eingelesen und in eine Variable geschrieben werden! Dannach soll sie als Shutdown zeit beim klicken auf einen der 3 button dienen!

    😕



  • Hallo

    Lösch die gesamte Methode TextfeldChange.
    Dann erstellst du nochmal mit dem Objektinspektor diese Methode, dann wird sie auch im Header des Forms angelegt.
    Und dann schreibst du bitte in die Funktion

    AnsiString OutStr = "shutdown -s -f -t " + StrToInt(Textfeld->Text);
    system (OutStr.c_str());
    

    Und wenn du damit fertig bist arbeitest du erstmal die Grundlagen von C++ und OOP durch, damit du erstens nicht mehr alte C-Funktionen benutzt wenn es nicht nötig ist und zweitens den Aufbau von Klassen verstehst.
    Und danach kannst du die von "tipp" genannte WinAPI-Funktion nachschlagen, dann kannst du diesen Ausruf so umbauen das du nicht mehr die ineffiziente system-Funktion brauchst.

    bis bald
    akari



  • Ich würde um das ganze noch einen try/catch-Block machen und diese Zeilen nicht in die OnChange sondern eher in die OnExit von Textfeld packen.

    AnsiString OutStr = "shutdown -s -f -t ";
    try
    {
      OutStr += StrToInt(Textfeld->Text);
    }
    catch(...)
    {
      OutStr += "0";
    }
    system (OutStr.c_str());
    


  • oder noch einfacher ohne Prüfung so

    AnsiString OutStr = "shutdown -s -f -t " + Textfeld->Text;
    


  • Hallo

    Ja OnExit ist definitiv besser als OnChange ;). Vielleicht doch eher ein Button?

    Aber statt try-catch würde ich hier StrToIntDef bevorzugen.

    bis bald
    akari



  • Man könnte auch das Editfeld (Textfeld) durch einen SpinButton ersetzen, dann braucht man auch nicht mehr zu prüfen.



  • Hallo

    Oder sogar ein TTrackBar... für feststehende Intervalle 😉

    bis bald
    akari



  • AnsiString OutStr = "shutdown -s -f -t " + StrToInt(Textfeld->Text);
    system (OutStr.c_str());
    

    jetzt blinkt das dos fenster 1 sekunde lang auf geht zu und es passiert garnicht! es wird irgentwas mit falsch ausgegeben aber kann man leidern icht erkennen!?



  • Geh doch einfach mal mit dem Debugger durch und schau nach was in OutStr drin steht.
    http://www.junix.ch/bcb/help/debug.html


Anmelden zum Antworten