powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / undo
25 сообщений из 51, страница 2 из 3
undo
    #37185850
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sizesubНет, пока не понимаю как...

Как работает мой код, ты понимаешь или нет?

Ты определись: если хочешь разобраться и научиться - это одно.
Если хочешь, чтобы за тебя все сделали - так и скажи, мол разбираться не хочу, сделайте мне. Как правило, кто-то делает, когда такой простой пример.
...
Рейтинг: 0 / 0
undo
    #37185927
sizesub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProsizesubНет, пока не понимаю как...

Как работает мой код, ты понимаешь или нет?

Ты определись: если хочешь разобраться и научиться - это одно.
Если хочешь, чтобы за тебя все сделали - так и скажи, мол разбираться не хочу, сделайте мне. Как правило, кто-то делает, когда такой простой пример.Конечно, хочу разобраться.
В Вашем примере используется функция UBound для работы с массивами.
Синтаксис:
UBound(arrayname[, dimension])

Если функция возвращает 0, то ничего не происходит, иначе запоминаются все шаги изменения.

Как мне запомнить изменение положения курсора, чтобы он двигался в нужную сторону, я пока не понимаю.
...
Рейтинг: 0 / 0
undo
    #37185963
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно запоминать позицию курсора, в которой он был ДО того момента, как произошли изменения. Для этого надо отслеживать события клавиатуры и мыши KeyUp, MouseUp и запоминать позицию курсора в какой-то временной переменной. Как только возникает событие Change, в массив вместе с новым значением текста заносить и позицию курсора. А при откате - восстанавливать.
...
Рейтинг: 0 / 0
undo
    #37186082
sizesub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProНужно запоминать позицию курсора, в которой он был ДО того момента, как произошли изменения. Для этого надо отслеживать события клавиатуры и мыши KeyUp, MouseUp и запоминать позицию курсора в какой-то временной переменной. Как только возникает событие Change, в массив вместе с новым значением текста заносить и позицию курсора. А при откате - восстанавливать.Так, хорошо...
Такой вопрос, как мне записать в массив вместе с текстом позицию курсора?
Синтаксис...
...
Рейтинг: 0 / 0
undo
    #37186121
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: sizesub
> Такой вопрос, как мне записать в массив вместе с текстом позицию курсора?


Как обычно:
Код: plaintext
1.
arrPositionCursor(IndexFirstFreeElement) = txt.SelStart
arrTextCursor(IndexFirstFreeElement) = txt.Text


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
undo
    #37186165
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sizesubТак, хорошо...
Такой вопрос, как мне записать в массив вместе с текстом позицию курсора?
Синтаксис...

С помощью оператора присваивания: "="

Я ж спросил - понятно, как работает мой код? Ответ был "понятно".
VSVLAD предложил использовать структуры (Type в синтаксисе VB), ответ был "Так... понимаю."
Можно использовать и два массива, как предлолжил Игорь.

Что сейчас-то вопросы вызывает? Давай все-таки определись, может все-таки учебник почитать про то, что такое массивы и вообще по основам синтаксиса? "Хочу разобраться"...
...
Рейтинг: 0 / 0
undo
    #37186350
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Можно использовать и два массива, как предлолжил Игорь.

Я не предлагал
я дал кусочек кода иллюстрирующий как присваивать данные

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
undo
    #37186378
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Игорь Горбонос


Сбили меня тут. Я хотел сказать, что для себя я "завернул" это все в класс и использовал бы его. Навернул бы его
подпиской на интересующие события нужного контрола и регистрировал все в них, наружу выставил бы только методы Undo и
Redo, добавил бы ещё необязательный параметр количества отменяемых шагов(если нужно)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
undo
    #37186911
sizesub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЧто сейчас-то вопросы вызывает?
Пытаюсь попробовать вариант с двумя массивами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
Option Compare Database
Option Explicit

Dim Undoing As Boolean
Dim arrText() As String
Dim arrCurs() As String

Private Sub Form_Load()

ReDim arrText( 0 )
arrText( 0 ) = Me.Text0

ReDim arrCurs( 0 )
arrCurs( 0 ) = Me.Text0.SelStart

End Sub


Private Sub Label2_Click()

If UBound(arrText) =  0  Then
  Beep

Else
  ReDim Preserve arrText(UBound(arrText) -  1 )
  
  ReDim Preserve arrCurs(UBound(arrCurs) -  1 )
  
  Undoing = True
  
  Me.Text0 = arrText(UBound(arrText))
  
  Me.Text0.SelStart = arrCurs(UBound(arrCurs))

  Undoing = False
  
End If


End Sub

Private Sub Text0_Change()

If Undoing Then Exit Sub

ReDim Preserve arrText(UBound(arrText) +  1 )
arrText(UBound(arrText)) = Me.Text0.Text

ReDim Preserve arrCurs(UBound(arrCurs) +  1 )
arrCurs(UBound(arrCurs)) = Me.Text0.SelStart

End Sub

Частично работает. Что тут неправильно?
...
Рейтинг: 0 / 0
undo
    #37187084
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sizesub, этой строкой
Option Compare Database
что делается?
...
Рейтинг: 0 / 0
undo
    #37187085
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sizesubЧастично работает. Что тут неправильно?

Почему ты определил второй массив как строковой?
Это неправильно, но на функционал в данном случае не влияет.

10434216
10431856
...
Рейтинг: 0 / 0
undo
    #37187110
хе-хе-хе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Автору уже дали интересное решение с коллекциями. И совершенно непонятно, почему он им пренебрег
undo
...
Рейтинг: 0 / 0
undo
    #37187220
sizesub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProsizesubЧастично работает. Что тут неправильно?

Почему ты определил второй массив как строковой?
Это неправильно, но на функционал в данном случае не влияет.Да, в этом было все дело. Сейчас все хорошо работает.
Единственное, после того, как последнее изменение было возвращено, курсор убегает в начало текста, а не остается рядом с последним возвращенным знаком.
...
Рейтинг: 0 / 0
undo
    #37187226
sizesub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хе-хе-хеАвтору уже дали интересное решение с коллекциями. И совершенно непонятно, почему он им пренебрег
undo Не пренебрегает, а хочет попробовать и другие способы решения.
...
Рейтинг: 0 / 0
undo
    #37195864
sizesub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

В продолжении темы.

Подскажите, как решить обратную задачу - REDO?

Спасибо.
...
Рейтинг: 0 / 0
undo
    #37195887
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sizesub, так а Вы решили undo? Выложите код пожалуйста, а в чём трудность наоборот?
...
Рейтинг: 0 / 0
undo
    #37195894
sizesub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрюsizesub, так а Вы решили undo? Выложите код пожалуйста, а в чём трудность наоборот?Так рабочий код выложен - смотрите выше.

Как после undo сделать redo, пока не могу сообразить.
Вы знаете как?
...
Рейтинг: 0 / 0
undo
    #37195938
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sizesub, рабочий код выложен - смотрите выше - там много чего выложено, где именно дата, время сообщения в котором выложен???
...
Рейтинг: 0 / 0
undo
    #37195979
sizesub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрюsizesub, рабочий код выложен - смотрите выше - там много чего выложено, где именно дата, время сообщения в котором выложен???
код
...
Рейтинг: 0 / 0
undo
    #37195990
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sizesub, форма на ней лейбл2, так?, а что такое Text0 TextBox????
...
Рейтинг: 0 / 0
undo
    #37195996
sizesub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрюsizesub, форма на ней лейбл2, так?, а что такое Text0 TextBox????Да, TextBox
...
Рейтинг: 0 / 0
undo
    #37196023
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sizesub, у меня на этой строке:
ReDim Preserve arrText(UBound(arrText) + 1) ошибка 9 и я Васспрашивал не знаю, что делает строка
Option Compare Database её выделяет красным её я заремарчил
...
Рейтинг: 0 / 0
undo
    #37196029
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sizesub,

Рекомендую не поддерживать разговор с местным клоуном, дабы не плодить бессмысленные посты.
Модератору же предлагаю быть последовательным.


По сути вопроса - надо просто не уменьшать размер массива в момент Undo, а вместо Ubound завести переменную - указатель на массив, который будет определять текущее положение состояния отмены. Тогда передвигать этот указатель можно будет как назад (Undo), так и вперед (Redo).
...
Рейтинг: 0 / 0
undo
    #37196053
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем - вот так.
Я модифицировал свой собственный первоначальный пример (без позиционирования курсора)
...
Рейтинг: 0 / 0
undo
    #37196067
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, спасибо, лично мне всё понятно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Option Explicit

Dim Undo1() As String
Dim Undoing As Boolean
Dim Pointer As Integer


Private Sub Form_Load()

ReDim Undo1( 0 )
Undo1( 0 ) = Me.Text1
Pointer =  0 

End Sub
Private Sub Text1_Change()

If Undoing Then Exit Sub
Pointer = Pointer +  1 
If Pointer > UBound(Undo1) Then
  ReDim Preserve Undo1(Pointer)
End If
Undo1(Pointer) = Me.Text1.Text

End Sub
Private Sub Command1_Click()

If Pointer =  0  Then
  Beep
Else
  Pointer = Pointer -  1 
  Undoing = True
  Me.Text1 = Undo1(Pointer)
  Undoing = False
End If

End Sub
Private Sub Command2_Click()

If Pointer = UBound(Undo1) Then
  Beep
Else
  Pointer = Pointer +  1 
  Undoing = True
  Me.Text1 = Undo1(Pointer)
  Undoing = False
End If

End Sub
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 2 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / undo
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]