|
Вопрос # 4 091/ вопрос открыт / |
|
Здравствуйте!
помогите доработать(отдэбажить) нижепредставленный код, который предназначен для многоуровневых операций Undo and Redo в текстовом редакторе. суть бага - после первого нажатия кнопки Undo нечего не происходит, кроме смещения курсора текста в начало. Redo button вообще не работает. list view в коде предназначен для визуального отображения списка действий(UndoList).
Приложение: Переключить в обычный режим- var
- Form1: TForm1;
- UndoList: TObjectList;
- i:integer;
- L:TListItem;
- CurCount: integer;
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.RedoButtonClick(Sender: TObject);
- var
- S: TMemoryStream;
- begin
- if CurCount>=0 then begin
-
- s:=UndoList[ CurCount + 1 ] as TMemoryStream;
- assert(s <> nil);
- Richedit.OnChange := nil;
- Richedit.lines.LoadFromStream(s);
- Richedit.Modified := False;
- Richedit.OnChange := RicheditChange;
- CurCount:= CurCount+1;
- ListView.ItemIndex:=CurCount;
- end;
- end;
-
- procedure TForm1.RichEditChange(Sender: TObject);
- var
- s:TMemoryStream;
- begin
- if Richedit.Modified then begin
- s:=TMemoryStream.create;
- Richedit.Lines.SaveToStream(s);
- s.seek(0, soFromBeginning);
- UndoList.add(s);
- CurCount:= UndoList.Count;
- L:= ListView.Items.Add;
- L.Caption:=inttostr(CurCount);
- ListView.ItemIndex:=CurCount-1;
- end;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- UndoList:= TObjectList.Create( True );
- end;
-
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- UndoList.Free;
- end;
-
- procedure TForm1.UndoButtonClick(Sender: TObject);
- var
- S: TMemoryStream;
- begin
- if CurCount >= 0 then begin
- s:=UndoList[CurCount - 1 ] as TMemoryStream;
- assert(s <> nil);
- Richedit.OnChange := nil;
- Richedit.lines.LoadFromStream(s);
- Richedit.Modified := False;
- Richedit.OnChange := RicheditChange;
- CurCount:=CurCount-1;
- ListView.ItemIndex:=CurCount;
- end;
- end;
 |
Вопрос задал: DeLF (статус: Посетитель)
Вопрос отправлен: 26 апреля 2010, 15:51
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|