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...