Kjeksen Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 Hvorfor funker ikke dette? #include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Box.H> #include <FL/Fl_Input.H> #include <FL/Fl_Button.H> char stringIn[100]; void cb_string(Fl_Widget *o, void*) { Fl_Input *input = (Fl_Input *) o; input->value(stringIn); Fl_Window *window = new Fl_Window(300, 200); window->label(stringIn); window->end(); window->show(); } int main (int argc, char *argv[]) { Fl_Window *mainWindow = new Fl_Window(400, 300, "Program"); Fl_Input *input = new Fl_Input(100, 30, 100, 25, "Input"); Fl_Button *button = new Fl_Button(100, 80, 50, 25, "Button"); button->callback(cb_string); mainWindow->end(); mainWindow->show(argc, argv); return Fl::run(); } Det skjer ingenting med det nye vinduet jeg lager. Labelen forandrer seg ikke. Hvorfor!? Lenke til kommentar
☀ ❄ Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 Først av alt: - Du skriver C++. Bruk std::string. Det er lettere, sikrere og i enkelte tilfeller raskere. - Lær deg til å bruke C++-kasting. - Unngå globale variabler. Vindustittelen blir satt, men den blir ikke satt til det du ønsker at den skal bli satt til. Hvorfor ikke? Fordi du aldri henter verdien til Fl_Input-en din inn i stringIn. stringIn er dermed tom når du kaller window->label(stringIn);. Lenke til kommentar
Kjeksen Skrevet 23. mai 2005 Forfatter Del Skrevet 23. mai 2005 Kan jeg bruke en peker til å peke i minnet til der stringen ligger, eller er det feil ved passeringen til callback funksjonen? Lenke til kommentar
Kjeksen Skrevet 25. mai 2005 Forfatter Del Skrevet 25. mai 2005 (endret) Har klart og lagre teksten i en streng på denne måten #include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Input.H> #include <FL/Fl_Button.H> #include <string> using std::string; void cb_button(Fl_Widget* , void *inp) { string szIn; szIn = static_cast <Fl_Input*> (inp)->value(); } int main (int argc, char *argv[]) { Fl_Window *window = new Fl_Window(300, 200); Fl_Input *input = new Fl_Input(50, 10, 100, 25, "In: "); Fl_Button *button = new Fl_Button(100, 50, 60, 25, "Button"); button->callback(cb_button, input); window->end(); window->show(argc, argv); return Fl::run(); } Noen andre / bedre måter og gjøre det samme på? Endret 25. mai 2005 av Kjeksen Lenke til kommentar
Kjeksen Skrevet 30. mai 2005 Forfatter Del Skrevet 30. mai 2005 (endret) Noen som kan gi meg et eksempel på og sende flere ( 3 ) inputer til en callback funksjon? får error når jeg gjør slik AddButton->callback(cb_AddContact, firstname, lastname, number); firstname, lastname og number er input`ene Endret 30. mai 2005 av Kjeksen Lenke til kommentar
Kjeksen Skrevet 1. juni 2005 Forfatter Del Skrevet 1. juni 2005 Ingen som har en anelse? trenger VIRKELIG hjelp på denne Prøvde og løse det med å bruke 3 callbacker til samme knappen. Det funket, bare at når jeg skrev til text fila så skrev den over det forrige. Selv om jeg har gjort sånn at den skal skrive på enden og ikke over. Så den metoden funket ikke. SITTER BOM FAST! Lenke til kommentar
Dead_Rabbit Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 Du kan sikkert lage en klasse(?).. struct Contact { std::string firstname, lastname; unsigned int number; }; eller noe, og så sende den som et argument istedenfor firstname, lastname og number. Lenke til kommentar
drall Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 (endret) Jeg vet ikke helt hva du vil her, men hvorfor sender du ikke bare med en peker til en container/array? Evt. bruke en struct. edit: for sen Endret 2. juni 2005 av drall Lenke til kommentar
Kjeksen Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 (endret) Saken her er at jeg har 3 inputer. Jeg tenkte jeg skulle sende inputene til en funksjon, deretter få verdiene til forskjellige stringer. Eksempel Fl_Input *FirstnameInput = new Fl_Input(10, 100, 200, 25, "Firstname"); Fl_Input *LastnameInput = new Fl_Input (10, 200, 200, 25, "Lastname"); Fl_Input *NumberInput = new Fl_Input(10, 300, 200, 25, "Number"); Fl_Button *AddButton = new Fl_Button(100, 350, 100, 40, "Add Contact"); //Deretter sende inputene til 1 funksjon AddButton->callback(cb_addcontact, FirsnameInput, LastnameInput, NumberInput); Dette funker ikke. Det jeg mener jeg kan gjøre er og lage en klasse med Fl_Inputer. Og deretter passere objektet av denne(?) Endret 2. juni 2005 av Kjeksen Lenke til kommentar
Dead_Rabbit Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 (endret) Tror jeg skjønner hva du mener. Husker ikke helt hvordan man henter fram inputen, men hvis du bare gjør det, så burde det være en smal sak å legge til dette i en container eller noe, som drall nevnte: vector<string> contact; contact.push_back(FirstnameInput->value()); //husker som sagt ikke om dette er den riktige funksjonen contact.push_back(LastnameInput->value()); //Som ovenfor.. contact.push_back(NumberInput->value()); //------"--------- Skal se om jeg ikke finner ut hva man må gjøre for å hente inputen.. Edit: Det var Fl_Input::value() funksjonen het ja. *endre på* Endret 2. juni 2005 av zirener Lenke til kommentar
Kjeksen Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 Joda. Er med på hva du mener her. Skal se litt mer på det når jeg kommer hjem. Er på skolen nå. Lenke til kommentar
☀ ❄ Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 Saken her er at jeg har 3 inputer. Jeg tenkte jeg skulle sende inputene til en funksjon, deretter få verdiene til forskjellige stringer. Eksempel Fl_Input *FirstnameInput = new Fl_Input(10, 100, 200, 25, "Firstname"); Fl_Input *LastnameInput = (10, 200, 200, 25, "Lastname"); Fl_Input *NumberInput = (10, 300, 200, 25, "Number"); Fl_Button *AddButton = new Fl_Button(100, 350, 100, 40, "Add Contact"); //Deretter sende inputene til 1 funksjon AddButton->callback(cb_addcontact, FirsnameInput, LastnameInput, NumberInput); Dette funker ikke. Det jeg mener jeg kan gjøre er og lage en klasse med Fl_Inputer. Og deretter passere objektet av denne(?) struct Contact { std::string first_name, family_name; int number; }; void f() { Fl_Input* first_name = new Fl_Input(10, 100, 200, 25, "First name"); // Du hadde glemt 'new Fl_Input' på disse to: Fl_Input* family_name = new Fl_Input(10, 200, 200, 25, "Family name"); Fl_Input* number = new Fl_Input(10, 300, 200, 25, "Number"); Fl_Button* add = new Fl_Button(100, 350, 100, 40, "Add contact"); Contact c = { first_name.value(), family_name.value(), number.value() }; add->callback(cb_addcontact, c); } Alternativt vector<Fl_Input*> contacts; contacts.push_back(first_name); contacts.push_back(family_name); contacts.push_back(number); Alternativt Slik som zirener viser, men med Fl_Input::value(), som funksjonen heter. Lenke til kommentar
Kjeksen Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 Takker! Som sagt så skal jeg se på det når jeg kommer hjem Lenke til kommentar
Kjeksen Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 struct Contact { std::string first_name, family_name; int number; }; void f() { Fl_Input* first_name = new Fl_Input(10, 100, 200, 25, "First name"); // Du hadde glemt 'new Fl_Input' på disse to: Fl_Input* family_name = new Fl_Input(10, 200, 200, 25, "Family name"); Fl_Input* number = new Fl_Input(10, 300, 200, 25, "Number"); Fl_Button* add = new Fl_Button(100, 350, 100, 40, "Add contact"); Contact c = { first_name.value(), family_name.value(), number.value() }; add->callback(cb_addcontact, c); } Dette virket ikke helt som det skulle. Får beskjed om: 'value' has not been declared Lenke til kommentar
Dead_Rabbit Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 Merkelig. Er det akuratt den koden du har brukt, altså den som Myubi foreslo? Isåfall kan du paste feilmeldingen(e)? Lenke til kommentar
Kjeksen Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 (endret) Akkurat den koden.. Kan paste den koden jeg har brukt så dere få se. struct Contacts{ std::string Firstname, Lastname; int Number; }; void cb_AddContact() { //Window Fl_Window *AddContactWindow = new Fl_Window(400, 300, "Add contact"); //Inputs Fl_Input *FirstnameInput = new Fl_Input(80, 40, 200, 25, "Firstname: "); Fl_Input *LastnameInput = new Fl_Input(80, 80, 200, 25, "Lastname: "); Fl_Input *Number = new Fl_Input(80, 120, 200, 25, "Number: "); //Buttons Fl_Button *AddButton = new Fl_Button(100, 200, 100, 30, "Add contact"); Fl_Button *OkButton = new Fl_Button(220, 200, 50, 30, "Ok"); Contacts contact = { FirstnameInput.value(), LastnameInput.value(), Number.value() }; //Callbacks AddButton->callback(cb_AddContact, contact); } void cb_AddContact(Fl_Widget *x, void *inp) { //osv } Feilmeldingene: 67 C:\Dev-Cpp\FLTKphonebook.cpp `value' has not been declared 67 C:\Dev-Cpp\FLTKphonebook.cpp request for member of non-aggregate type before '(' token 67 C:\Dev-Cpp\FLTKphonebook.cpp `Firstname' undeclared (first use this function) Mye feil på linje 67 Endret 2. juni 2005 av Kjeksen Lenke til kommentar
☀ ❄ Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 Signaturen er const char *Fl_Input::value() const, så det er ikke der feilen ligger. Det høres mer ut som at du blander Firstname og FirstnameInput, men jeg ser ikke noe galt i det du har postet. Se over koden din en gang til, du. For øvrig tror jeg ikke du vil overlaste cb_AddContact() på den måten -- funksjonene virker mer relaterte enn de egentlig er. Lenke til kommentar
Kjeksen Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 Har gjort det flere ganger, men ser ingen spesielle feil jeg heller. Tror ikke jeg blander Firstname og FirstnameInput osv. Får fremdeles beskjed om samme feilene.. Lenke til kommentar
Kjeksen Skrevet 3. juni 2005 Forfatter Del Skrevet 3. juni 2005 Her er det meste av koden. #include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Box.H> #include <FL/Fl_Input.H> #include <FL/Fl_Button.H> #include <string> struct Contact{ std::string Firstname, Lastname; int number; }; //Function declarations void cb_AddWindow(Fl_Widget *x, void*); void cb_AddContact(Fl_Widget *x, void *inp); int main (int argc, char *argv[]) { //MainWindow Fl_Window *MainWindow = new Fl_Window(300, 200, "PhoneBook"); //Buttons Fl_Button *AddButton = new Fl_Button(20, 70, 100, 30, "Add Contact"); Fl_Button *GetButton = new Fl_Button(170, 70, 100, 30, "Get Contact"); Fl_Button *QuitButton = new Fl_Button(110, 150, 70, 30, "Quit"); //Callback AddButton->callback(cb_AddWindow); MainWindow->end(); MainWindow->show(argc, argv); return Fl::run(); } //Add Contact Window void cb_AddWindow(Fl_Widget *x, void*) { //AddContact Window Fl_Window *AddContactWindow = new Fl_Window(400, 300, "Add Contact"); //Inputs Fl_Input *FirstnameInput = new Fl_Input(100, 50, 250, 25, "Firstname: "); Fl_Input *LastnameInput = new Fl_Input(100, 100, 250, 25, "Lastname: "); Fl_Input *NumberInput = new Fl_Input(100, 150, 250, 25, "Number: "); //Buttons Fl_Button *AddButton = new Fl_Button(100, 250, 100, 30, "Add Contact"); Fl_Button *OkButton = new Fl_Button(250, 250, 70, 30, "Ok"); Contact c = { FirstnameInput.value(), LastnameInput.value(), NumberInput.value() }; //Callbacks AddButton->callback(cb_AddContact, c); AddContactWindow->end(); AddContactWindow->show(); } void cb_AddContact(Fl_Widget *x, void *inp) { //kode kode } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå