Operacje undo/redo i edycja

0

Temat zamieszczam tu bo wydaje mi sie ze to w cale nie jest banalna sprawa. Jak wyglada sprawa implementacji Undo/Redo. Sa do tego w Delphi jakies specjalne klasy, mechanizmy ? W bibliotekach opartych na C++ sa niby jakies specjalne obiekty, ale problemem jest jak to zaimplementowac. No bo jesli mamy jakis obiekt typu tabelka, gdzie np. kazdy wiersz to jakis obiekt, ktory np. zawiera mase funkcji i zmiennych do przechowywania danych, to jak rozwiazac mechanizm edycji na wierszach. Operacje fizyczne na wierszach takiej tabelki moga przeciez doprowadzic do wywalenia sie aplikacji lub zgubienia tych obiektow. Jak np. stworzyc mechanizm copy/paste takich obiektow?

0

w momencie zmiany czegokolwiek, nalezy zapamietywac albo poprzedni stan obiektu/apliakcji, albo tez zapamietywac zmiany dokonane oraz wszystkie dane potrzebne do ich odwrocenia.. to jest baardzo obszerny temat, trudno mowic abstrahujac od konkretnej aplikajci ---- chyba ze masz ja dobrze zbudowana i masz dane oddzielone od UI i algorytmow, wtedy to proscizna - zapamietujesz poprzedni stan danych i przy undo go przywracasz. w przypadku obiektow najprosciej jest tuz przed zmiana skopiowac obiekt i zapametac te kopie 'na boku'

//edit: odnosnie postu ponizej i wzorca command -- on to ulatwia, poniewaz wlasnie separuje dane od reszty aplikacji i latwo jest wychwycic co i kiedy zostalo zrobione

0

Takie operacje bardzo ulatwia wzorzec Command, ale skoro pytasz o Delphi to moze byc problem z Twoimi umiejetnosciami (bez obrazy). Poczytaj sobie o tym wzorcu i zobacz czy takie rozwiazanie Ci odpowiada.

0
johny_bravo napisał(a)

Takie operacje bardzo ulatwia wzorzec Command(...)

Ewentualnie memento. Zależy co chce zapamiętać i jaki rodzaj aplikacji.

0
Dryobates napisał(a)
johny_bravo napisał(a)

Takie operacje bardzo ulatwia wzorzec Command(...)

Ewentualnie memento. Zależy co chce zapamiętać i jaki rodzaj aplikacji.

To tez. Z tekstu wywnioskowalem raczej cofanie szeregu operacji (klasycznie ctrl+z), Memento to raczej 'zrzut pamieci'. No ale zalezy do czego :) Oba sa ok :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1