Fórum Undo e Redo nos gráficos #255869
25/10/2004
0
Meus caros amigos,
Sei que já estou enchendo o saco, como nunca trabalhei com imagens, estou nessa crise de produção.
Vejam, tenho a imagem de uma planta baixa em bmp ou jpg, e desenho áreas nelas para medir os níveis de iluminação, obter tamanho de área e perímetros, número de tomadas (TUG´s e TUE´s), tensão e etc.
Vamos supor que eu marque uma área e depois queira desfazer o processo, como eu poderia fazer o processo de [b:7d91f8de6f]UNDO[/b:7d91f8de6f] ou [b:7d91f8de6f] REDO[/b:7d91f8de6f]?
Agradeço desde já pelas respostas.
Sei que já estou enchendo o saco, como nunca trabalhei com imagens, estou nessa crise de produção.
Vejam, tenho a imagem de uma planta baixa em bmp ou jpg, e desenho áreas nelas para medir os níveis de iluminação, obter tamanho de área e perímetros, número de tomadas (TUG´s e TUE´s), tensão e etc.
Vamos supor que eu marque uma área e depois queira desfazer o processo, como eu poderia fazer o processo de [b:7d91f8de6f]UNDO[/b:7d91f8de6f] ou [b:7d91f8de6f] REDO[/b:7d91f8de6f]?
Agradeço desde já pelas respostas.
Eixox
Curtir tópico
+ 0
Responder
Posts
25/10/2004
Marcio.theis
você pode tentar o seguinte,
if Edit.HandleAllocated then
SendMessage(Edit.Handle, EM_UNDO, 0, 0);
no caso adicionei um edit e um botão, e no onclick coloquei este código, no caso deu certo...
espero ter ajudado...
if Edit.HandleAllocated then
SendMessage(Edit.Handle, EM_UNDO, 0, 0);
no caso adicionei um edit e um botão, e no onclick coloquei este código, no caso deu certo...
espero ter ajudado...
Responder
Gostei + 0
25/10/2004
Marcelo Saviski
Eu fiz assim, pelo menos:
Toda vez que muda alguma coisa, vc tem que registrar isso, para isso teria as alterações que pudesse fazer assim:
e depois um registro do que mudou:
ai teria uma lista dessas alterações:
para registrar uma alteração:
depois para desfazer:
e p/ Limpar a Lista de comando p/ refazer ou quando finalizar:
Isso é um pouco genérico, mas eu usei assim e funcionou. D
ê mais detalhes sobre como cv está fazendo.
Toda vez que muda alguma coisa, vc tem que registrar isso, para isso teria as alterações que pudesse fazer assim:
TComando = (cmMoveu, cmAdicionou, cmRemoveu);
e depois um registro do que mudou:
PUndo = ^TUndo;
TUndo = record;
case Comando: TComando of
cmMoveu: (PosicaoAntiga: TPoint);
cmAdicionou, cmRemoveu: (Referencia: {Uma refrência a oque removeu ou adicionou aqui);
end;ai teria uma lista dessas alterações:
UndoList: TStack;
para registrar uma alteração:
var
Undo: PUndo;
begin
New(Undo)
//se moveu:
Undo.Comando := cmMoveu;
Undo.PosicaoAntiga := Point(AntigoX, AntigoY);
//se adicionou
Undo.Comando := cmAdicionou;
Undo.Referencia := ;
//se removeu
Undo.Comando := cmRemoveu
Undo.Referencia := {O Que Foi Removido};
UndoList.Push(Undo);
end;depois para desfazer:
var Undo: PUndo; begin Undo := UndoList.Pop; //ai verifica qual foi a alteração feita e faz a operação reversa case Undo.Comando of cmMoveu: Posicao := PosicaoAntiga; cmAdicionou: //Remove o que adiciou cmRemoveu: //Readiciona end; Dispose(Undo); end;
e p/ Limpar a Lista de comando p/ refazer ou quando finalizar:
var Undo: PUndo; while UndoList.Count > 0 then begin Undo := UndoList.Pop; case Undo.Comando of cmMoveu: //verifica se há alguma coisa que foi criada quado chmou Push e libera aqui, faz isso p/ todas as opções que requerem algo alocado end; Dispose(Undo); end;
Isso é um pouco genérico, mas eu usei assim e funcionou. D
ê mais detalhes sobre como cv está fazendo.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)