Announcement

Collapse
No announcement yet.

Mehrere Undo/Redo

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrere Undo/Redo

    salve,

    wie richtet man mehrere Undo/Redo ein? Wie kann ein Schema aussehen? Suche brachte bisher keinen Erfolg. Wie löst ihr die Aufgabe?

  • #2
    Man merkt sich was gemacht wurde und stellt das dann wieder her
    Christian

    Comment


    • #3
      Ja genau. Darauf zielt die Frage.Hast du schon einen Lösungsweg erarbeitet? So ein paar Hinweise zum Vorgehens-Schema sollten schon ordentlich weiterhelfen können. Derzeit sehe ich noch richtig ratlos aus.

      Comment


      • #4
        ????

        Was erwartest du. Irgendwo ist ein Unterschied, ob du Texteingaben, Grafiken/-erstellung, Dateioperationen u.v.m rückgängig machen willst. Schließlich müssen Daten dazu irgendwo abgelegt werden.

        Üblicherweise "merkt" man sich die Daten in einer Liste. Bsp. in einer TList oder einer dequee der STL
        Christian

        Comment


        • #5
          Was erwartest du.
          Erwarten kann ich gar nichts. Bin für jeden Hinweis dankbar. Wie ist z.B. die letzte beliebige Aktion für EM_UNDO erfasst? Was dient als Trenner zwischen 2 Aktionen? Ich frage so breit und allgemein, weil ich einfach keinen Arbeitsansatz finden kann.

          Üblicherweise "merkt" man sich die Daten in einer Liste.
          Also gibt es ein "üblich". Habe dazu noch nichts gefunden. Jede Textoperation als Block erfassen. Jedes kleine Grafik-Gekritzel so erfassen, dass es per Widerholung annulliert werden kann. Also beim Aufschreiben oder malen der Aktion bin ich noch lang nicht. Ich denke doch, dass ich die Thematik von Grund auf erschließen soll. Sind dazu ggf. Anleitungen, Tutor bekannt?
          Zuletzt editiert von Hadron; 24.02.2010, 02:08.

          Comment


          • #6
            Es kann dazu keinen allgemeinverbindlichen Code geben. Wie ich schon auszudrücken versuchte muss das für jede Art von Undo entwickelt werden.

            Ich kann jetzt auch deinem Posting nicht sicher entnehmen, WAS du überhaupt mit einem Undo rückgänig machen willst??

            Und davon WAS du rückgänig machen willst, hängt es auch ab, wie man das ggf. speichert. Sicher ist die Vorgehenweise mit einem "Trenner" ungünstig. Um Text rückgängig zu machen empfiehlt es sich eine Klasse zu schaffen, die einen einzelnen Schritt speichert. Dazu gehören der Buchstabe und die Position. Da der Anwender mit der Maus den Cursor innerhalb der Eingabe setzten kann, muss man sich mehr merken als nur den Buchstaben.
            In einem OnKeyDown entscheidet man nun, ob die gedrückte Taste zu den Tasten gehört, deren Eingabe man zurücknehmen will (bsp. könnte man Cursortasten ausschließen). Dann wir eine neue Klasse mit den Daten für das Zurücknehmen gefüllt und diese in eine Liste aufgenommen.


            Wenn du einen Datensatz aus einer Liste gelöscht hat und diese Aktion zurücknehmen willst, sind sicherlich andere Daten zu speichern.


            Das grundsätzliche Vorgehen ist halt Daten speichern, in Liste verwalten.
            Zuletzt editiert von Christian Marquardt; 24.02.2010, 08:06.
            Christian

            Comment


            • #7
              Hab schon mal Dank, Christian. Offenbar habe ich völlig sinnlose Vorstellungen. Ich bleibe also jetzt erst mal beim Texteditor. Via Strg+Z löse ich nach jeder beliebigen Editor-Aktion ein EM_UNDO aus. Demnach sollta ja das API bereits alles benötigte enthalten.

              Die Absicht war nun, jeden aufgezeichneten EM_UNDO-Block mitzuschreiben. Sobald ein Blocktrenner war, wird der gerade fertige Block in die Liste gepackt. So kann ein einzelner Paste-Block durchaus mal mehrere MB Daten in die Liste eintragen...

              So geht es also nicht? Man muss jede Aktion selbst definieren? Ggf. die letzten vielleicht 10 zusammenhängend eingegebenen Zeichen im Nachhinein als Block zusammenfassen und speichern? Dann auch jede Cursor-Bewegung erfassen. Im TRichEdit lässt sich da gut mit Edit->SelStart arbeiten. Muss halt erkennen, was zur Laufzeit geschieht..

              Klar, ich will immer noch mit dem Auslesen von EM_UNDO liebäugeln. Gut gespeicherten Cetchup liest man aus der Flasche aus, benutzt ihn, erfindet ihn tunlichst nicht neu. Aber nach deiner Darstellung gehe ich nun davon aus, dass man an die Daten nicht drankommt. P.g., dann hab ich jetzt schon mal einen konkreten Arbeits-Ansatz, kann mich reinknien. Passende Bausteine aus einem Tutor oder Leitfaden nutzen zu können, wäre mir natürlich noch lieber. Aber wenn es da nix gibt... ole, bin gespannt, wie weit ich erst mal komme...

              Gruß Hadron

              Comment


              • #8
                Wenn du Controls benutzt, die ein EM_UNDO unterstützen, brauchst du das natürlich nicht selbst zu machen, sondern nur eine Message an das Control zu senden
                Christian

                Comment


                • #9
                  Prinzipiell könnte man evtl. auch Richtung Command Pattern gehen. Dort kann man definieren wie etwas ausgeführt wird und wie es auch wieder rückgängig gemacht werden muss.

                  Beispiel hier
                  Zuletzt editiert von fanderlf; 24.02.2010, 15:54. Reason: Beispiel hinzugefügt

                  Comment


                  • #10
                    Mercy, ich hab auch 2 Seitem zu Frameworks gefunden: http://www.codeguru.com/cpp/cpp/algo...cle.php/c6361/ und http://www.codeproject.com/KB/cpp/undoredo_cpp.aspx . Es wird bestimmt nicht einfach, das noch benötigte zu ergänzen. Der Rüchkalt, die Substanz fehlt hier noch völlig. Zumal, ich fahre noch den betagten BCB3 und war jetzt, seit ich wieder Zeit finde, ganz erstaunt, dass mein alter Builder sogar unter XP noch problemlos installiert werden konnte und läuft.

                    Eine Nachfolge-IDE ist nun dringlich. Allerdings scheint es keine Beschreibungen mehr zu geben. Ansich wollte ich mir den BCB4 zulegen. Denn 5 und 6 wären ja wohl nach einigen Erfahrungs-Aussagen regelrecht misslungen gewesen. Aber wegen mehrfachem Undo sollte für mich nicht mal der BCB7 interessant sein. Selbst der abeitet ja noch nicht mit dem RichEdit 2. Und zu den aktuellen IDE lese ich geradezu Schauergeschichten.

                    Hmm. Wie "teuer" ist guter Rat? Welche Version mag der wirklich sinnvolle Kompromiss sein? Infrage kommt als Basis (auf lange Sicht) nur noch WIN XP. An Grafik-Formaten wären .gif, .jpg und wenn geht .png (vielleicht auch .tga inmteressant. Nur kurz gefragt, ohne damit schießen zu wollen, was kann in etwa eine gute Empfehlung sein?... Vielleicht geht es ja auch ohne RichEdit 2, wenn Borland tatsächlich sämtliche Chancen verpennt...

                    Gruß Hadron

                    Comment


                    • #11
                      Bedauerlicherweise muss man sagen, das aufgrund der Preispolitik, der magelhaften Unterstützung und der altertümlichen IDE sich die Anschaffung einer neuen Version m.E. nicht lohnt.
                      Ich empfand die VCL als ein ausgereiftes Framework und habe sehr gerne damit gearbeitet.
                      Christian

                      Comment


                      • #12
                        Daher also. Ruhige Foren, kaum noch Komponenten zu finden, was der Anbieter mit dem mir fremden Namen zum Builder 2010 "schreibt"...

                        Welches mag wohl der letzte gute BCB gewesen sein? 3 ist jedenfalls zu betagt. Der untertsützt ja noch nicht mal Radscrolling, .gif, .jpg, merkt sich die eigenen Fensterpositionen nicht usw.


                        Und ja, es liegt an den Usern, ob die VCL tatsächlich gestorben ist. Eclipse ist halt noch nicht so weit. Und die MFC? Nur seitenweise Verwirrspielchen um die definitiv fehlende F1-Doku... Und dabei motze ich gar nicht gern. Ich werkel viel lieber. Welcher BCB mag der reifste gewesen sein? Bei ebay wird man immer noch fündig.

                        Comment


                        • #13
                          Und ja, es liegt an den Usern, ob die VCL tatsächlich gestorben ist.
                          Wie das? Da dort Rechte liegen, kann eine Community das nicht fortführen


                          Eclipse ist halt noch nicht so weit.
                          ...das entsprechende Projekt (Visual Editor) wird nicht mehr weitergeführt

                          http://www.netbeans.org/

                          mit

                          http://netbeans.org/features/java/swing.html
                          Christian

                          Comment


                          • #14
                            Wie das? Da dort Rechte liegen, kann eine Community das nicht fortführen
                            Die Nutzung kann im Rahmen der erworbenen Rechte beliebig lang fortgeführt werden. Die Frage ist doch nur, wem das bestehende genügt, wer ggf. was für ihn geeigneteres findet.


                            Hmm. Also magst du keine erfahrungsbasierte Empfehlung aussprechen? Das ist OK, wirst deine Gründe haben. Meine Frage besteht ja für die gesamte Runde. Ich mag halt versuchen, das zu erwerben, was allgemein als sinnvoll erkannt wurde.

                            Comment


                            • #15
                              Hmm. Also magst du keine erfahrungsbasierte Empfehlung aussprechen?
                              Doch, s.o.
                              Christian

                              Comment

                              Working...
                              X