callbacks mit FLTK



  • in meinem praktikum soll ich gerade ein altes programm verbessern. für das UI nutze ich FLTK, mit dem ich vorher noch nie gearbeitet habe. auch sonst bin ich, was programmierung mit graphischer benutzeroberfläche angeht, noch eine ziemliche amöbe. c++ kann ich aber einigermaßen, sonst wär's ja auch zu schlimm 😉

    gerade bin ich bei callbacks angekommen. leider ist die dokumentation sehr.. rudimentär. ich hab also keine ahnung, wie irgendwelche objekte bei aktionen, zum beispiel click oder change, irgendwelche anderen objekte verändern.

    dafür bräuchte ich hilfe! als beispiel wäre ein button, der auf klick die farbe eines labels verändert, sehr gut.

    was im skript steht:

    callback-funktion:

    void xyz_callback(Fl_widget *w, void *data)
    { ... }
    

    callback eines objekts setzen:

    int xyz_data;
    button->callback(xyz_callback, &xyz_data);
    

    vielen dank!
    mareike



  • Und wo ist deine Frage?

    Und wer Programmcode Script nennt, sollte nochmal sein Knowhow überdenken.



  • ich dachte eigentlich, dass jemand, der sich die mühe macht, zu antworten, auch vor der aufgabe nicht zurückscheut, meinen fragetext zu lesen.
    mit "skript" meinte ich den handzettel, den ich ausgedruckt gekriegt habe. und kein programmiertes script.

    in meinem post hab ich geschrieben, dass ich hilfe bräuchte, eine callback-funktion zu schreiben. wie die aussieht, was übergeben wird und so weiter. mittlerweile hab ich schon eine hingekriegt, die einen button bei klick dazu bringt, seine eigene farbe zu wechseln, das sieht so aus:

    callback-funktion:

    void BeiKlick(Fl_Widget* w)
    {
    	if (w->color() != FL_GREEN)
    		w->color(FL_GREEN);
    
    	else
    		w->color(FL_BLUE);
    }
    

    setzen der callback-funktion für den button:

    button->callback(BeiKlick);
    

    wenn allerdings der klick auf den button die farbe z.b. eines labels ändern soll, weiß ich nicht, wie das funktioniert. und falls hier noch mal jemand den text nur nach fragezeichen durchsucht, formuliere ich sogar noch ein bisschen:

    wie formuliert man eine callback-funktion, wenn das aufrufende objekt nicht (nur) sich selbst verändern soll? (z.b.: buttonklick verändert label-farbe)

    ich hoffe, das war jetzt niemandem zu doof! mal ganz daneben, dass ich hier nicht script und skript verwechselt habe, habe ich nämlich wirklich kein knowhow.. sonst wär ich angesteller und kein praktikant!



  • wie formuliert man eine callback-funktion, wenn das aufrufende objekt nicht (nur) sich selbst verändern soll? (z.b.: buttonklick verändert label-farbe)

    In dem Du dir irgendwo die Instanz des Labels holst bzw. merkst.
    Bsp.:

    void BeiKlick(Fl_Widget* w)
    {
        if (w->color() != FL_GREEN)
            getLabel()->color(FL_GREEN);
    
        else
            getLabel()->color(FL_BLUE);
    }
    

    Wenn man aber C++ programmiert, hat man meistens Memberfunctions, so das schon in der Klasse sich irgendwo das Label gemerkt werden kann.
    Dazu kann ich dir diesen FAQ-Beitrag empfehlen:
    http://www.fltk.org/articles.php?L379+I0+TFAQ+M10+P1+Q
    In MyClass kann man das zu ändernde Label merken.

    Und wegen dem \1: du hast es immer noch nicht verstanden. Mir ging es nicht um Skript oder Script!!! (deutsch oder englisch ist mir doch egal!) Sondern das C++ keine Script-Sprache ist und man deshalb in C++ nicht scripptet! Man hat Programmcode! Gescriptet wird in Scriptsprachen wie Python. C++ ist aber keine Scriptsprache.



  • vielen dank für die antwort! ich probier es gleich mal aus.

    und das mit dem skript scheint mehr verwirrung hervorzurufen, als ich angenommen hatte.. ich weiß, dass c++ keine scriptsprache ist - ich meinte damit lediglich meinen handzettel - mein material, eine anleitung, ausgedruckt auf papier, ein skript eben, ein handout, wie auch immer du es nennen magst ^^


Anmelden zum Antworten