Страница: 1 |
Страница: 1 |
Вопрос: Листание назад
Добавлено: 08.05.07 22:39
Автор вопроса: Skywalker | Web-сайт:
Требуется выполнить в программе листание назад, но что-то не получсется, старею чтоли))
Имееются куча процедур типа Sub1, Sub2 и т.д.
кнопка при нажатии на которую должна вызываца предыдущаю процедура (в процедурах рисуется картинка на форме)
Что сделал я и что не работает:
Public gCount As Integer
Public gBoo As Boolean
Public Sub Start()
gCount = 0
gBoo = False
Timer1.Enabled = True
trrrr
End Sub
Private Sub trrrr()
If gCount = 0 Then sub1
If gCount = 1 Then sub2
.......................
End Sub
Private Sub Command2_Click()
gBoo = True
End Sub
Private Sub sub1()
gCount = 1
..................
trrrr
End Sub
Private Sub sub2()
gCount = 2
..................
trrrr
End Sub
..................
Private Sub Timer1_Timer()
If gBoo = True Then
gBoo = False
Select Case gCount
Case 2:
CLEARDEVICE
sub1
Case 3:
CLEARDEVICE
sub2
..........................
End Select
End If
End Sub
Листает лишь один раз назад (самый первый), дальше сколько не тыкай ничего не происходит. Подскажите как нужно?
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #1
Добавлено: 09.05.07 17:18
yxaxa
не пойму, какой смысл в trrrr?
у тебя саб1 и саб2 и так выполняются и из них вызывается trrrr, в которой они вызываются еще раз (?)
Номер ответа: 2
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #2
Добавлено: 09.05.07 17:21
..у тебя там появляетСо безконечный цикл. Когда ты вызываешь из трррр например саб1, то саб1 вызывает трррр, и так всё время
реши это как-то
Номер ответа: 3
Автор ответа:
Black Berill
Вопросов: 17
Ответов: 151
Профиль | | #3
Добавлено: 09.05.07 19:07
А что за Sub Start? Может, Form_Load()?
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 09.05.07 20:50
2 yxaxa
Ужосс то какой, почему бы не объединить все процедуры Sub1, Sub2... в одну и передавать ей просто аргумент? Или создать прослойку - создать процедуру, которая принимает аргумент нужного действия, потом select caseом вызывает нужную процедуру.
Номер ответа: 5
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #5
Добавлено: 09.05.07 20:54
trrr не знаю зачем, просто сначала были другие варианты которые тожа не работали, мучал-мучал, отбалды писал, стараясь заставить работать. ну а процедура старт вызываеца после нажатия кнопки, типа начать
ну а бесконечный цикл... там ведь переменная гкоунт все время меняется и вызывается следующая процедура каждый раз, а не таже самая.
вобщем если не сложно напишите как должен выглядеть код. имеются процедуры и каждый раз при нажатии кнопки должна выполнятся предыдущая. например
выполняется саб1
выполняется саб2
жмем кнопку назад
выполняется саб1
выполняется саб2
выполняется саб3
жмем назад
выполняется саб2
жмем назад
выполняется саб1
выполняется саб2
....
Номер ответа: 6
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #6
Добавлено: 09.05.07 20:57
жёсткая прога, надо будет подумать
Номер ответа: 7
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #7
Добавлено: 09.05.07 21:51
HACKER, Все равно не могу сообразить напирмер
Public Sub Start(ByVal j As Integer)
Select Case j
Case 1
код
gCount = 2
Case 2
код
gCount = 3
Case 3
код
gCount=4
и т.д.
End Select
End Sub
Private Sub Command2_Click()
gCount = gCount - 1
CLEARDEVICE
Start (gCount)
End Sub
ето все ясно, но не пойму откуда мне теперь вызывать, чтобы по окончанию одного куска начинался другой.
если сделать так
Case 1
код
gCount = 2
Start(gCount)
и везде так
то получица офигенная рекурсия и ктому же некоторые куски кода будут выполнятся нескольк о раз. Вот немогу себе представить как сдеать(((
Номер ответа: 8
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #8
Добавлено: 09.05.07 22:02
код
gCount = 2
Start(gCount)
и везде так
то получица офигенная рекурсия и ктому же некоторые куски кода будут выполнятся нескольк о раз. Вот немогу себе представить как сдеать(((
gCount = gCount - 1
CLEARDEVICE
Start (gCount)
End Sub
If gCount = 1 Then sub2
Номер ответа: 9
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #9
Добавлено: 09.05.07 22:03
If gCount = 1 Then sub2
Номер ответа: 10
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #10
Добавлено: 09.05.07 22:09
нет,и зачем ты цитируешь
If gCount = 0 Then sub1
If gCount = 1 Then sub2
если мы уже решили что то неправильно, и я написал др кусок в котором пытаюсь реализовать совет HACKERa
Номер ответа: 11
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #11
Добавлено: 09.05.07 22:29
Объясни мне, где HACKER тебе такого посоветовал?
Номер ответа: 12
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #12
Добавлено: 09.05.07 22:34
HACKER просто посоветовал тебе объединить все эти действия в одну процедуоу и Select Case присваивать значения
Номер ответа: 13
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #13
Добавлено: 09.05.07 22:38
вот где
-------------
вобщем вот что получилось
Private Sub Form_Load()
gCount = 1
End Sub
Private Sub Command1_Click()' Кнопка старт
Command1.Visible = False
1:
CLEARDEVICE
Do While Start(gCount) = gCount + 1
gCount = gCount + 1
Loop
GoTo 1
End Sub
Private Sub Command2_Click()' Кнопка назад
gCount = gCount - 1
End Sub
Public Function Start(ByVal j As Integer) As Integer
Select Case j
Case 1
Код
Start = 2
Case 2
Код
Start = 3
и т.д.
End Select
End Function
все работает просто замечательно, но вот переходит назад тока када выполнит всю процедуру (кусок кода кейз номер) естесно. можно ли сделать чтоб все также прекрасно работало, но переходило назад сразу же, даже если выполнилось только пол процедуры?
Номер ответа: 14
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #14
Добавлено: 10.05.07 00:08
может быть можно реализовать как то многопоточностью, типа 1 поток делает куски кода, а второй его контролирует?
Номер ответа: 15
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #15
Добавлено: 10.05.07 01:55
нестоит с потоками врядли ты представляешь как приходиться извращаться чтобы они работали в вб Хотя если умеешь писать на чём то кроме вб, хотябы PowerBasic то можно подумать в сторону длл, которой передаются параметры, а она уже создает поток, синхронизируясь с основной программой...