Text aus Textbox holen



  • Hallo,

    ich hab folgenden code um mit HGE eine Textbox zu machen:

    //Small Input textfield
    class Forminput : public hgeGUIObject{
    
    public:
       Forminput(hgeFont* _fnt, int _id, float xPos, float yPos,
          float length, char* prevalue);
       ~Forminput();
       virtual void Render();
       //void Render(float x, float y);
       virtual bool MouseLButton(bool bDown);
       virtual void Focus(bool bFocused);
       virtual bool KeyClick(int key, int chr);
       virtual void Update(float fDeltaTime);
       void setText(char *newText);
       char *getText();
    
    protected:
       int caretposition;
       char* caret;
       bool caretVisible; //for blinking effect
       bool focused;
       float caretTimer; //for blinking effect
       const static int maxchar = 30;
       float xPos;
       float yPos;
       hgeFont *font;
       float length;
       char *content;
    };
    
    Forminput::Forminput(hgeFont* _fnt, int _id, float _xPos, float _yPos,
                    float _length, char *prevalue){
       font = _fnt;
       id = _id;
       length = _length;
       xPos = _xPos;
       yPos = _yPos;
       bStatic = false;
       bVisible = true;
       bEnabled = true;
       caretVisible = true;
       focused = false;
       caretTimer = 0.0f;
       caret = "_";
       content = new char[maxchar+1]; //maxchar is defined in the header
       strncpy(content, prevalue, maxchar);
       int prevalue_length = (int)strlen(prevalue);
       if (prevalue_length < maxchar){
          caretposition = prevalue_length;
       }
       else{
          caretposition = maxchar-1;
       }
       content[caretposition] = '\0';
       content[maxchar+1] = '\0'; //Last char will always be a string terminator
       rect.Set(xPos, yPos, xPos+length, yPos+(font->GetHeight()));
    };
    
    Forminput::~Forminput(){
       delete font;
    }
    
    void Forminput::Render(){
       font->Render(xPos, yPos, HGETEXT_LEFT,content );
       //Renders the caret
       if (focused && caretVisible){
          float width = font->GetStringWidth(content);
          font->Render(xPos+width, yPos, HGETEXT_LEFT, caret); 
       }
    }
    
    //Gets Focus with LeftMouseKlick
    bool Forminput::MouseLButton(bool bDown){
       if (bDown){
            return false;
       }
       gui->SetFocus(id);
       return false;
    };
    
    //Saving focus state in focused
    void Forminput::Focus(bool bFocused){
       if (!bFocused){
          focused = false;
       }
       else{
          focused = true;
       }
    
    };
    
    void Forminput::Update(float fDeltaTime){
        caretTimer += fDeltaTime;
       /*Makes the caret blinking effect
         You might want to change the value below for slower/faster blinking*/
       if (caretTimer >= 0.1f){
          caretVisible = !caretVisible;
          caretTimer = 0.0f;
       }
    }
    
    bool Forminput::KeyClick(int key, int chr){
       //Loses Focus with Enter
       if (key == HGEK_ENTER){
          gui->SetFocus(-1);
          return false;
       }
       char tmp[maxchar+1];
       strncpy(tmp, content, maxchar+1);
       if (key == HGEK_BACKSPACE){ //Delete one character per backspace
          if (caretposition != 0){
             caretposition -=1;
             tmp[caretposition] = '\0'; //Put string terminator one character back
          }
          strcpy(content, tmp);
          return false;
       }
       /*When chr==0 no ascii-key (e.g. shift) is pressed and chr would
         be saved as string terminator. The other thing to look after, is
         whether we have max. characters*/
       if (chr != 0 && caretposition < maxchar-1){
          tmp[caretposition] = chr;
          tmp[caretposition+1] = '\0'; //add overwritten string terminator
          //Assures that the String will not take to much place
          if (font->GetStringWidth(tmp) <= length){
             strcpy(content, tmp); //Store back
             caretposition+=1;
          }
       }
       return false;
    };
    
    //Setting the Text
    void Forminput::setText(char *newtext){
       strncpy(content ,newtext ,maxchar);
       content = newtext;
    };
    
    char *Forminput::getText(){
       return content;
    }
    

    also initialisieren kann ich das mit:

    guimain=new hgeGUI();
    guimain->AddCtrl(new Forminput(fnt,4,400,360,360,"IP-Adresse"));
    

    und render mit:

    guimain->Render();
    

    Meine Frage ist jetzt:
    Wie kriege ich jetzt den Text aus der Textbox?
    mit Forminput::getText(); geht das nicht.
    da bekomme ich nur diese Fehlermeldung:
    error C2352: 'Forminput::getText': Unzulässiger Aufruf einer nicht statischen Memberfunktion



  • Oh, mein Fehler, ist ja ein Pointer. Hab den Stern vergessen...

    Forminput* myTextBox = new Forminput(fnt,4,400,360,360,"IP-Adresse"); // pointer merken
    guimain->AddCtrl(myTextBox); // in gui einfügen
    
    ..
    
    myChar = myTextBox.getText(); // text rausholen. myChar ist hierbei ein Zeiger auf genug Speicherplatz für den Text
    


  • wenn ich

    Forminput myTextBox = new Forminput(fnt,4,400,360,360,"IP-Adresse"); // pointer merken
    guimain->AddCtrl(myTextBox); // in gui einfügen
    

    mache bekomme ich diese Fehlermeldungen:
    error C2440: 'Initialisierung': 'Forminput *' kann nicht in 'Forminput' konvertiert werden
    Ferror C2664: 'hgeGUI::AddCtrl': Konvertierung des Parameters 1 von 'Forminput' in 'hgeGUIObject *' nicht möglich



  • Siehe editierten Beitrag...


Anmelden zum Antworten