Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как в memo осуществить повтор.


Автор: Alex103 18.3.2005, 08:09
У меня такая проблемма мне нужно повторить действие в memo ато отмену можно просто сделать а повтор не знаю как посоветуйте.

с ув. Александр

Автор: RA 18.3.2005, 08:35
Undo/Redo чтоли ?

Undo это ондаступетнчатая отмена действия, следовательно

один раз Undo - это отмена.
второй раз Undo - это отмена отмены.

Автор: Alex103 20.3.2005, 02:55
Цитата(RAdmin @ 18.3.2005, 08:35)
Undo/Redo чтоли ?

Undo это ондаступетнчатая отмена действия, следовательно

один раз Undo - это отмена.
второй раз Undo - это отмена отмены.

Именно Undo то лего осуществить но вот Redo как не знаю. Ну вот смотри у меня есть две кнопки одна отмена другая повтор как сделать так что-бы повтор работала. Но это все не то что надо. Реально ли сделать так что-бы можео отменять было много действий!!!!

Автор: Vit 20.3.2005, 04:25
em_redo ему послать, если не ошибаюсь...

Автор: Alex103 20.3.2005, 04:30
Цитата(Vit @ 20.3.2005, 04:25)
em_redo ему послать, если не ошибаюсь...

в смысле так sendmessage(em_redo); Я просто не знаю как эти сообщения посылать обьясни плиз.

Автор: Girder 20.3.2005, 04:58
Redo:
Код
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
 s:='21423'; //то... что ты хочеш вернуть
 //Memo1.SelStart:=0; - куда... хочеш вернуть
 sendmessage(memo1.Handle,EM_REPLACESEL,1,integer(pchar(s)));
end;

Автор: Alex103 20.3.2005, 05:10
Цитата(Girder @ 20.3.2005, 04:58)
Redo:
Код
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
 s:='21423'; //то... что ты хочеш вернуть
 //Memo1.SelStart:=0; - куда... хочеш вернуть
 sendmessage(memo1.Handle,EM_REPLACESEL,1,integer(pchar(s)));
end;

К примеру мне нужно сделать 10 возвратов но как это все осуществить на одну кнопку но так что-ббы при нажатии на кнопку повтор эти повторы повторялись!!!

Автор: fess 20.3.2005, 12:41
Если тебе не обязательно использовать стандартные компоненты, то посмотри вот этот компонент:
TAdvMemo с сайта http://tmssoftware.com/. Там реализованны эти и многие другие функции.

Автор: Alex103 22.3.2005, 02:18
Цитата(fess @ 20.3.2005, 12:41)
Если тебе не обязательно использовать стандартные компоненты, то посмотри вот этот компонент:
TAdvMemo с сайта http://tmssoftware.com/. Там реализованны эти и многие другие функции.

Он то у меня есть но только он по-моему триальный если я не ошибаюсь!

Автор: mvdr 22.3.2005, 06:25
как вариант: в Мемо сохранять все-все-все про форму на этот момент, а потом при нажатии на кнопку "отмена" построчно считывать из Мемо. В этом случае надо сохранять Мемо при перезаписи его в файлы на диске.

Автор: fess 22.3.2005, 12:28
Цитата
Он то у меня есть но только он по-моему триальный если я не ошибаюсь!

Он не триальный, он shareware, т.е если ты хочешь использовать приложение в коммерческих целях или получить исходник, то ты обязан купить этот компонент.

Вот лицензионное соглашение:
Цитата
This component is free for use in non-commercial applications, that is
any software that is not being sold in one or another way or that does
not generate income in any way by the use of the application.
The component cannot be distributed in any other way except through free
accessible Internet Web pages or ftp servers. The component can only
be distributed on CD-ROM or other media with written autorization of the
author.
Online registration for TAdvMemo is available.
See http://www.tmssoftware.com/orders.htm

Source code & license is sent immediately upon receipt of check or
registration by email. Payment grants users the right for a full version
cycle source code updates.

Автор: <Spawn> 22.3.2005, 17:15
Можно попробовать организовать стек(см TStack в Contnrs). В которого класть информацию об изменениях в TMemo. Навскидку она будет примерно такая:

Код

PRedoInfo = ^TRedoInfo;

TRedoInfo = record
  Position: TPoint; // Позиция текста
  Text: PAnsiChar; // Удаленный/добавленный текст
  Inserted: Boolean; // Удален или добавлен?
end;

Только в данном случае прийдется держать копию текста Memo для сравнения с ним и создания инфы для каждого экземпляра структуры TRedoInfo, что не есть хорошо, особенно если текст большой. Возможно, что есть какое то сообщение, которое можно было бы поймать и которое само сообщало бы об этих изменениях - это был бы оптимальный вариант smile

Автор: Alex103 23.3.2005, 02:16
Цитата(fess @ 22.3.2005, 12:28)
Цитата
Он то у меня есть но только он по-моему триальный если я не ошибаюсь!

Он не триальный, он shareware, т.е если ты хочешь использовать приложение в коммерческих целях или получить исходник, то ты обязан купить этот компонент.

Вот лицензионное соглашение:
Цитата
This component is free for use in non-commercial applications, that is
any software that is not being sold in one or another way or that does
not generate income in any way by the use of the application.
The component cannot be distributed in any other way except through free
accessible Internet Web pages or ftp servers. The component can only
be distributed on CD-ROM or other media with written autorization of the
author.
Online registration for TAdvMemo is available.
See http://www.tmssoftware.com/orders.htm

Source code & license is sent immediately upon receipt of check or
registration by email. Payment grants users the right for a full version
cycle source code updates.

Тоесть в своем приложении не льзя использовать его только в том случае если приложение будет продаваться. А если нет то используй сколько хочушь. Вроде я так понял!!!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)