Страница: 1 |
Страница: 1 |
Вопрос: Undo and Redo Commands
Добавлено: 09.02.05 18:13
Автор вопроса: Valera
Народ подскажите как правельно организовать в текстовом редакторе команды "Undo and Redo Commands". Может кто пример даст или ссылку.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #1
Добавлено: 09.02.05 18:24
Да в точке всё уже давно придумано - МСДН тебе поможет. Ну ежели хочешь свою реализацию, то сюда: http://www.informit.com/articles/article.asp?p=25047&seqNum=4
Номер ответа: 2
Автор ответа:
Valera
Вопросов: 15
Ответов: 43
Профиль | | #2
Добавлено: 09.02.05 18:50
Что-то вроде этого Я искал спасибо.
Если у кого-нибудь будут еще варианты буду очень благодарен.
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 09.02.05 19:23
Тупо в памяти строить стек действий и хранить для него вершину и размер.
Номер ответа: 4
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #4
Добавлено: 09.02.05 20:17
Если кроме самого текста, изменяешь свойства шрифта, тогда после каждого изменения вызывай процедуру SaveChenge. В этом варианте сохраняется 20 “шагов”.
Option Explicit
 im aChanges() As String
 im Ind As Integer
Private Sub cmdRedo_Click()
 im SStart As Long
 im TLen As Long
SStart = rtb.SelStart
TLen = Len(rtb.Text)
If Ind < UBound(aChanges) - 1 Then
Ind = Ind + 1
cmdUndo.Enabled = True
End If
If Ind = UBound(aChanges) - 1 Then cmdRedo.Enabled = False
rtb.TextRTF = aChanges(Ind)
If Len(rtb.Text) <> TLen Then
rtb.SelStart = Len(rtb.Text)
Else
rtb.SelStart = SStart
End If
End Sub
Private Sub cmdUndo_Click()
 im SStart As Long
 im TLen As Long
SStart = rtb.SelStart
TLen = Len(rtb.Text)
If Ind > 0 Then
Ind = Ind - 1
cmdRedo.Enabled = True
End If
If Ind = 0 Then cmdUndo.Enabled = False
rtb.TextRTF = aChanges(Ind)
If Len(rtb.Text) <> TLen Then
rtb.SelStart = Len(rtb)
Else
rtb.SelStart = SStart
End If
End Sub
Private Sub Form_Load()
ReDim aChanges(0)
aChanges(UBound(aChanges)) = rtb.TextRTF
ReDim Preserve aChanges(0 To UBound(aChanges) + 1)
End Sub
Private Sub rtb_KeyPress(KeyAscii As Integer)
If KeyAscii < 33 Then SaveChenge
End Sub
Private Sub SaveChenge()
 im i As Long
If UBound(aChanges) = 21 Then
 im aTemp() As String
ReDim aTemp(0 To UBound(aChanges) - 1)
For i = 1 To UBound(aChanges) - 1
aTemp(i - 1) = aChanges(i)
Next i
aChanges() = aTemp()
Erase aTemp()
End If
cmdUndo.Enabled = True
If aChanges(UBound(aChanges) - 1) <> rtb.TextRTF Or Len(aChanges(UBound(aChanges) - 1)) <> Len(rtb.Text) Then
aChanges(UBound(aChanges)) = rtb.TextRTF
ReDim Preserve aChanges(0 To UBound(aChanges) + 1)
End If
If UBound(aChanges) = 1 Then cmdUndo.Enabled = False
Ind = UBound(aChanges) - 1
End Sub
Номер ответа: 5
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #5
Добавлено: 10.02.05 07:34
Михалыч, это топик про .NET ...
Valera, так там же есть свойства и комманды в самом TextBox'e и RichEdit'e.
Номер ответа: 6
Автор ответа:
Vah V
Вопросов: 3
Ответов: 9
Профиль | | #6
Добавлено: 10.02.05 10:53
Александр, есть то они есть, да только работает все как-то криво. Мне кажется со стеком самый классный вариант.
Чейто Я пытаюсь накарябать, да не очень получается.
Номер ответа: 7
Автор ответа:
⊗WaX⊗
Вопросов: 26
Ответов: 325
Web-сайт:
Профиль | | #7
Добавлено: 19.02.05 19:34
Реализую подобный механизм(в смысле Анду)
но для клиента базы данных ИМХО изобретаю велосипед никто не втречался с наработками по этой теме ?