Ver Mensaje Individual
  #1  
Antiguo 23-08-2010
jogagua jogagua is offline
Miembro
 
Registrado: dic 2008
Posts: 14
Reputación: 0
jogagua Va por buen camino
Smile Trabajar Listas con Datos Modificados y Eliminados ( Deshacer y Rehacer)

Buenos días amigos foreros... espero me puedan ayudar con este problema mas bien de ideas que enfrento en este momento...

verán, estoy realizando un programa al estilo del Paint, donde se puedan dibujar lineas, puntos, etiquetas, círculos, etc..., para ello dibujo en el canvas de una TImage. Trabajo para ello con un arreglo definido asi:

Objetos : array[1..Nmax] of Obj // donde Obj está definido así:
Obj= record
Tipo:byte; // donde 1=Punto 2=Etiqueta 3=Recta etc
Color, Grueso de Linea, etc....

Bueno, hasta allí todo bien, simplemente al agregar por ejemplo un punto, después de hacer clic este se añade a Objetos[NObjetos] con todos los datos. Hasta allí fino...

Luego se me ocurrió añadirle los típicos botones: Deshacer y Rehacer, para lo cual cree otro arreglo igual a Objetos[] pero llamado Cambios[], entonces:

Tengo un PosCambios que es la posición donde me encuentro actualmente, un NCambios, que son los cambios hechos hasta el momento (Ncambios>=PosCambios) y NObjetos que son los Objetos que ya dejo fijos y que los botones de Deshacer y Rehacer no tocan: funciona de la siguiente manera:

Al agregar un objeto( por ejemplo un punto) éste se agrega a Cambios[NCambios], si NCambios es mayor a un máximo que fijé (por ejemplo 10) en maxCambios, entonces guardo Cambios[1] (1er valor) en Objetos[NObjetos] (previamente aumento NObjetos) y en Cambios[NCambios] pongo el nuevo punto. Por asi decirlo tengo unos objetos que quedaron fijos (Objetos[]) y otros que son los ultimos cambios hechos (Cambios[])...

Entonces al Dibujar en pantalla, dibujo todos los valores de Objetos[] y dibujo desde el 1ero hasta PosCambios de Cambios[]. Con los botones de Deshacer y Rehacer o que hago es que varío PosCambios y por lo tanto no me dibuja los cambios hechos despues de la posicion donde me encuentre por asi decirlo...

Hasta allí todo bien, funcionando de mil maravillas, pero quiero poder eliminar y modificar los objetos, cosa que de por sí no es dificil, pues con hacer un clic en pantalla puedo saber sobre cual objeto hago click mas cerca (distancias) para seleccionarlo y modificarlo o eliminarlo, pero quiero que estas modificaciones o eliminaciones queden guardadas en la lista de Cambios de alguna manera para que las pueda Rehacer o Deshacer, y esto es precisamente lo que no logro pensar como hacer...

En realidad si pensé una forma para trabajar con los eliminados, el problema es con los modificados... No se si me complique demasiado, que es lo que me parece, espero sus consejos sobre otro método a utilizar o como modificar el que tengo para que funcione....

Uyy¡¡ como me extendí, lo lamento, solo que quería tratar de no dejar cabos sueltos.... espero que tengan paciencia para leerlo y contentarme

Desde ya muchas Gracias...
Responder Con Cita