undo
-
Hi,
ich möchte gerne in meiner CAD-Anwendung eine UNDO Funktion, wie man sie von MSWord etc. kennt, einbauen.
In der TForm-Header hab ich eine universelle Struktur gebildet, die alle möglichen Figuren (Kreis, Strich, Viereck...Bitmap) aufnehmen kann.
Auf Grundlage dieser Struktur bilde ich ein DynamicArray.Header:
typedef struct {AnsiString id; int x1,y1,x2,y2; bool on; TColor bkgrd, sbkgrd; AnsiString text; Graphics::TBitmap *bild; } ELEMENT; DynamicArray<ELEMENT> element;Alles funktioniert soweit. (löschen neue Element einfügen usw)
Sogar das Öffnen sowie Abspeichern, des DynamicArray, mittels StringStream funktioniert.Da ich das DynamicArray in einem StringStream abspeichern kann, müsste es vielleicht eine Möglichkeit geben
eine Undo Funktion zu realisieren.
Ich weis aber nicht wie ich das am Besten anstellen soll????
Oder ist mein Ansatz komplett falsch mit dem StringStream???
Irgendwie hab ich auch schieß mein Programm so zu "verprogrammieren", dass überhaupt nichts mehr funktioniert.
Am meisten Kopfzerbrechen macht mir das Bitmap, da es für jedes element vorhanden ist, und ich bei der Undo Funktion zuviel Arbeitsspeicher verbrate würde.
Vielleicht kann mir jemand einen Tipp geben.Danke
-
Hallo
Ich glaube das die undo-Funktion nichts mit dem Speichern selber zu tun haben sollte, sondern nur rein zur Arbeitszeit zur Verfügung steht.
Um die Undo-Funktion sauber einzubauen, must du als Voraussetzung den gesamten Datenbestand in Einzelschritte aufteilen können, aus denen du belibig oft das Gesamtresultat wieder aufbauen kannst. Dann ist die Undo-Sache einfach, du must ja nur das letzte Element wegnehmen und den Datenbestand anhand der restlichen Einzelschritte neu aufbauen.
Mehr kann ich dazu nicht sagen, da fehlt mir der Überblick bei deinem Projekt.bis bald
akari