Autor Téma: Undo&Redo  (Přečteno 1297 krát)

warezman

  • Host
Undo&Redo
« kdy: 20-01-2007, 14:21:00 »
Zdravim chtel sem se zeptat jesli jste uz nekdo neresil jak udelat funkce zpet(Undo) nebo vpred(Redo) na projektu, kde se pracuje s obejky a to tak ze se vytvareji tusi a meni se jejich vlastnosti...

Jakub255

  • Host
Undo&Redo
« Odpověď #1 kdy: 20-01-2007, 15:10:00 »
Uz jsem to kdysi resil ,kdyz jsem zkousel udelal takove jednoduche kresleni.
Ten program uz nemam, ale delal jsem to ukládáním do pole. funkce undo proste nacetla
predchozi souradnice obektu vymazala te stavajci a vykreslila predchozi.

JanFiala

  • Host
Undo&Redo
« Odpověď #2 kdy: 20-01-2007, 15:15:00 »
Undo/Redo neni nic jineho nez zasobnik, ktery uchovava stav.
Pokud pouzijes TList nebo TbjectList, muzes pak vracet zmeny podle poradi, v jakem jsi je spachal.

Priklad:
Neco provadim na objektu:
1. Vytvorim objekt, zkopiruji do nej vlastnosti objektu a vlozim jej jako dalsi zaznam do UNDO seznamu
2. provedu zmeny na objektu

Tohle se da velmi dobre resit pres properties a metody objektu

Dalsi moznosti je specifikovat seznam zmen nejakym popisem a do zasobniku nevkladat cely objekt, ale jen popsat zmenu. Zalezi na konkretnim pripade, co je vyhodnejsi.


Jackal [ND]

  • Host
Undo&Redo
« Odpověď #3 kdy: 24-01-2007, 09:29:59 »
Kdyby ten zásobník měl mít maximální počet položek, tak už by to tak jednoduché asi nebylo.

Warezman_mobile

  • Host
Undo&Redo
« Odpověď #4 kdy: 24-01-2007, 10:36:00 »
No a jakpak se daj kopirovat objekty do toho zasobniku?

JanFiala

  • Host
Undo&Redo
« Odpověď #5 kdy: 24-01-2007, 11:08:00 »
Jackal [ND] Napsal:
-------------------------------------------------------
> Kdyby ten zásobník měl mít maximální počet
> položek, tak už by to tak jednoduché asi nebylo.

Myslis?
Vlozim polozku a pokud pocet presahne, tak prebyvajici smazu nebo zkontrolujes, jestli neni zasobnik plny a dalsi nezapises. Zalezi jen na implementaci jestli chces vkladat na zacatek/konec, odebirat ze zacatku/konce...

Jackal [ND]

  • Host
Undo&Redo
« Odpověď #6 kdy: 24-01-2007, 16:43:59 »
JanFiala Napsal:
-------------------------------------------------------
> Jackal  Napsal:
> --------------------------------------------------
> -----
> > Kdyby ten zásobník měl mít maximální počet
> > položek, tak už by to tak jednoduché asi
> nebylo.
>
> Myslis?
> Vlozim polozku a pokud pocet presahne, tak
> prebyvajici smazu nebo zkontrolujes, jestli neni
> zasobnik plny a dalsi nezapises. Zalezi jen na
> implementaci jestli chces vkladat na
> zacatek/konec, odebirat ze zacatku/konce...
Myslím lineární jednosměrný spojový seznam s přidáváním a odebíráním na začátku = zásobník. Asi bych to řešil přes proměnnou s počtem uzlů a pointerem na druhý "nejstarší" uložený uzel. Kdybych si pamatoval adresu prvního "nejstaršího" uloženého uzlu, tak bych nemohl seznam ukončit na novém posledním uzlu (next:=nil). Jde o to, že to už není "nic jiného než zásobník".

JanFiala

  • Host
Undo&Redo
« Odpověď #7 kdy: 24-01-2007, 18:23:59 »
Jackal [ND] Napsal:
-------------------------------------------------------
> Myslím lineární jednosměrný spojový seznam s
> přidáváním a odebíráním na začátku = zásobník. Asi
> bych to řešil přes proměnnou s počtem uzlů a
> pointerem na druhý "nejstarší" uložený uzel.
> Kdybych si pamatoval adresu prvního "nejstaršího"
> uloženého uzlu, tak bych nemohl seznam ukončit na
> novém posledním uzlu (next:=nil). Jde o to, že to
> už není "nic jiného než zásobník".

Nic nebrani u StringListu pridavat na konec a odebirat ze zacatku - stringlist je jen vylepseny seznam ukazatelu na retezce  tim, ze mas informaci o COUNT, mas metody ADD, INSERT, DELETE...

Jackal [ND]

  • Host
Undo&Redo
« Odpověď #8 kdy: 24-01-2007, 23:28:00 »
Máš pravdu, ale při opravdu velké mase se pozná síla pointerů a tyhlety univerzální třídy to brzdí. Zajímalo by mě, kde jsi přišel na TStringList, to teda TList bych bral, ale TStringList ne. Proč by každou změnu měl popisovat textový řetězec?

JanFiala

  • Host
Undo&Redo
« Odpověď #9 kdy: 24-01-2007, 23:50:00 »
Jackal [ND] Napsal:
-------------------------------------------------------
> Máš pravdu, ale při opravdu velké mase se pozná
> síla pointerů a tyhlety univerzální třídy to
> brzdí. Zajímalo by mě, kde jsi přišel na
> TStringList, to teda TList bych bral, ale
> TStringList ne. Proč by každou změnu měl popisovat
> textový řetězec?

Ani nevim, zrejme se mi to domotalo s jinym threadem  >:(
Takze se omlouvam.