Консультация № 59084
16.10.2006, 11:24
0.00 руб.
0 1 1
Уважаемые эксперты. У меня возникла такая проблема. Короче есть программа, где в ПикчерБоксе нужно чтобы по клику мышки в любом месте этого бокса появлялся чёрный кружок. Только дело в том, что этих кружков должно быть определённое количество и не больше. Я это решил таким способом:

Private Sub Pict_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

pp = pp + 1 ‘ рр - это глобально объявленная переменная
‘IshDan.ChisloOtv - ‘это забитое в структуру заданное число кружков
If pp = IshDan.ChisloOtv Then Command2.Visible = True
If pp > IshDan.ChisloOtv Then Exit Sub

mm = mm + 1 ‘ тоже глобальная переменная
ReDim Preserve mx(IshDan.ChisloOtv)‘ переобъявление глобальн.массива
ReDim Preserve vy(IshDan.ChisloOtv)
mx(mm) = X ‘полученные координаты на каждый клик забиваются в массив и в дальнейшем используются
vy(mm) = Y
Pict.DrawWidth = 8 ‘толщина линии
Pict.DrawStyle = 0 ‘сплошная
Pict.Circle (X, Y), 3, RGB(0, 0, 0)
End Sub
Проблема в том что по первому разу это всё нормально работает, но если не закрывая программу это запустить ещё раз, то не работает. Пробовал:
If pp > IshDan.ChisloOtv Then pp = 0:mm = 0: Exit Sub
Тогда эта строчка на выход из события срабатывает только на один клик мышки, а со второго снова ставятся кружки. Пробовал вместо глобальных pp и mm ставить структурные: IshDan.pp и IshDan.mm
тогда не записывается
mx(mm) = X
vy(mm) = Y
Наверное не знаю какой-то мелочи, но вся прога срабатывает только на один раз, потом приходится её перезапускать, а это не очень удобно...

Обсуждение

Неизвестный
16.10.2006, 12:27
общий
это ответ
Здравствуйте, Lesnoi!
Обнулять следует в той процедуре, из которой вызывается повторный цикл кликов.
Т.е. когда вы "не закрывая программу это запускаете ещё раз", то перед запуском вам следует обнулить перменные.
Форма ответа