Прокрутка формы с помощью ScrollBar.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Kekir
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 23.11.2011 (Ср) 19:16

Прокрутка формы с помощью ScrollBar.

Сообщение Kekir » 08.07.2012 (Вс) 12:47

В общем, суть вопроса в теме. Каким образом можно сделать так, чтобы scrollbar прокручивал форму? Вопрос появился в связи с тем, что форма не помещается в маленькие экраны(нетбуки), а уменьшить ее нет возможности.
Разобрался как менять размеры формы, но конкретно как ее прокручивать так и не понял. Пользовался поиском, но все вопросы конкретно были только по text box'ам.

Спасибо за внимание, надеюсь на вашу помощь.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Прокрутка формы с помощью ScrollBar.

Сообщение iGrok » 08.07.2012 (Вс) 13:29

Есть такая штука, как ScrollWindow. Поищи примеры работы с ней.
label:
cli
jmp label

Kekir
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 23.11.2011 (Ср) 19:16

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Kekir » 08.07.2012 (Вс) 20:07

Спасибо, займусь этим.

Kekir
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 23.11.2011 (Ср) 19:16

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Kekir » 08.07.2012 (Вс) 21:16

Разобрался, набрал модуль и устройл Scroll, но возник еще вопрос.

Как сделать так, чтобы при уменьшении размера окна не убегал бегунок очень далеко? Т.е. при стандартно открытом окне все нормально крутится, но стоит поменять размер окна, как scroll можно задвинуть на очень большое значение вниз\влево.

И еще остается след, как от него избавиться? Перерисовка с помощью refresh не помогла. Она просто форму перерисовывает, но не обновляет.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 09.07.2012 (Пн) 13:27

Kekir писал(а):Как сделать так, чтобы при уменьшении размера окна не убегал бегунок очень далеко? Т.е. при стандартно открытом окне все нормально крутится, но стоит поменять размер окна, как scroll можно задвинуть на очень большое значение вниз\влево.

Надо делать просто всё правильно, отдавая себе отчёт в том, какой смысл в каждом элементарном действии, которое ты делаешь.
Вы делаете, радуясь пониманию 40 процентов всего того, что вы делаете, а остальное делаете из соображений соответствий каким-то ритуалам, традициями, или просто по инерции.

Ничего кроме ужасный глючных программ такой подход не порождает.

А использование функции ScrollWindow для этой цели — очень вредный совет. Нельзя использовать функцию ScrollWindow для скроллинга контроллов на VB-формах!
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Прокрутка формы с помощью ScrollBar.

Сообщение iGrok » 09.07.2012 (Пн) 15:25

Хакер писал(а):А использование функции ScrollWindow для этой цели — очень вредный совет. Нельзя использовать функцию ScrollWindow для скроллинга контроллов на VB-формах!

Опа. Намекни плиз, почему, и меняется ли что-нибудь, если это будет ScrollWindowEx с флагом SW_SCROLLCHILDREN?

А как тогда? Цикл по Me.Controls с пересчётом положения?
label:
cli
jmp label

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Прокрутка формы с помощью ScrollBar.

Сообщение alibek » 09.07.2012 (Пн) 16:05

Зачем цикл то?
Нужно контейнер скроллить, а не сдвигать в цикле все компоненты.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 09.07.2012 (Пн) 16:54

iGrok писал(а):Опа. Намекни плиз, почему, и меняется ли что-нибудь, если это будет ScrollWindowEx с флагом SW_SCROLLCHILDREN?
\
Потому что двигается окно (созданное CreateWindow), а не контрол. Контрол думает, что он остаётся на старом месте. Проверь свойства Top и Left контролов после применения ScrollWindow.
Со встроенными контролами это по крайней мере не вызывает очевидных багов. С какими-нибудь нестандартными может привести к непредсказуемым багам. Например контрол будет отображаться в новом месте, а тултипы будут отображаться в старом месте.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kekir
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 23.11.2011 (Ср) 19:16

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Kekir » 10.07.2012 (Вт) 22:34

Для "Хакера"
Если честно, мне казалось, что форум создан для помощи людям, которые стараются хоть что-то сделать, а не для констатации фактов о том, что они, простите, ничерта не знают. Я сам в курсе насчет того, что я знаю только( не на 40%) на 10% в лучшем случае, в связи с чем и интересуюсь.

Мой вопрос все же открытым остается. ScrollW, по всей видимости, я не осилю. Как ScrollBar'ом пользоваться внятного решения найдено не было мною.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 10.07.2012 (Вт) 22:44

Как же достало это нытьё в стиле «форум создан для ..., а не для...». Собственно, для того, для чего создан форум, для того он и используются. Ответы, которые даются — самые правильные, полезные, добрые и прогрессивные.

Ваши знания вообще никого не волнуют. Наши знания — тоже. Меня считают много-знающим, но я бы хотел забыть 99 % вещей, которых знаю. Единственная вещь, которую я бы не хотел забыть: это здравая логика и знание о том, как добыть необходимые в данный момент знания. Эти две вещи позволят восполнить утраченные 99 процентов в любое время.

Так что ваши знания никого не волнуют. Мне вообще плевать, знает ли человек больше меня или он вообще ничего не знает. Он либо имеет правильную организацию мышления и правильный подход к делу, или не имеет его, и тут хоть волком вой и все знания во вселенной имей — толку мало.

Так вот одним из компонентов правильного подхода к делу является стремление думать над ситуацией, вникать в ситуацию, логический анализировать свою проблему, находить противоречия между желаемым и действительным, пытаться задавать себе вопросы — как их решить. Для всех этих действий вообще не нужно никаких специальных знаний.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Mikle » 11.07.2012 (Ср) 8:22

Kekir:
alibek писал(а):Нужно контейнер скроллить, а не сдвигать в цикле все компоненты.

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Прокрутка формы с помощью ScrollBar.

Сообщение VBTerminator » 14.07.2012 (Сб) 19:38

Kekir писал(а): Каким образом можно сделать так, чтобы scrollbar прокручивал форму? Вопрос появился в связи с тем, что форма не помещается в маленькие экраны(нетбуки), а уменьшить ее нет возможности.

Хакер писал(а):Так вот одним из компонентов правильного подхода к делу является стремление думать над ситуацией, вникать в ситуацию, логический анализировать свою проблему, находить противоречия между желаемым и действительным, пытаться задавать себе вопросы — как их решить.

Хакер, Вы имеете в виду то, что если форма не помещается на экране, то её дизайн необходимо переделывать с нуля?

Хакер писал(а):... но я бы хотел забыть 99 % вещей, которых знаю.

Не понимаю, зачем? На данный момент знания стоят денег, тем более эти знания не являются тяжким бременем проклятия или чего-то в этом духе.

Хакер писал(а):Эти две вещи позволят восполнить утраченные 99 процентов в любое время.

... и снова убить на это кучу времени?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 14.07.2012 (Сб) 20:45

VBTerminator писал(а):Хакер, Вы имеете в виду то, что если форма не помещается на экране, то её дизайн необходимо переделывать с нуля?

Вовсе нет, я имел в виду не это. Я имел в виду то, что есть люди, у которых подход к коду — как к заклинанию. Очень трепетное, в первую очередь. Букву боятся тронут. Вдруг заклинание перестанет работать. В общем, они оперируют кусками кода, молятся на работоспособность этих кусков, но боятся или не хотят или не могут разобрать код на атомы, никогда не меняеют его под себя, и вообще плохо понимаю, что к чему. Это худший подход, естественно, какой только бывает.

Но кстати да, я думаю, что проблема с дизайном. Что значит окно не помещается на экран? Это допустимо для окон, которые отображают какой-то документ. Текст, картинку, чертёж, карту. Если там просто контролы, то скорее всего ошибка дизайна. Или окошечко с тысячью текстбоксами. Ненавижу! Люди перешли от проклятых бумажных форм к компьютерным программам, но программы делаются по прежнему так, как будто это бумажная форма, которую надо заполнить.

VBTerminator писал(а):Не понимаю, зачем? На данный момент знания стоят денег, тем более эти знания не являются тяжким бременем проклятия или чего-то в этом духе.

Ну, те знания, которые есть у меня, это же пещинка в общемировом океане знаний. Какая разница, была пещинка одних знаний, стала пещинка других знаний. Я окончательно убедился, что сила не в знаниях, а в умении экстремально эффективно добывать нужные знания.

Ну по правде я не против знаний, если это не мешает вашей голове. Пусть голова и память и хранимые в ней знания будут эдаким кешем. Встала проблема — знаем как решить — замечательно. Не знаем как решить — не вопрос, через 10 минут будем знать.

VBTerminator писал(а):... и снова убить на это кучу времени?

Почему же кучу? Надо работать над собой так, чтобы получение новых знаний занимало минимальное число времени
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Прокрутка формы с помощью ScrollBar.

Сообщение ger_kar » 16.07.2012 (Пн) 10:06

Хакер писал(а):Люди перешли от проклятых бумажных форм к компьютерным программам, но программы делаются по прежнему так, как будто это бумажная форма, которую надо заполнить.
А чем это плохо? Если делать поправку на то, что компьютеризация не достигла 100%, если по прежнему наряду с компьютерными формами, используются формы и в бумажном варианте, и если прикинуть затраты на переучивание человека, который привык заполнять бумажные формы, то решение сделать электронные формы, которые максимально будут похожи на бумажные вполне очевидно. Другое дело, когда формы используются только в элеронном виде и изначально под это разрабатываются.
Хакер писал(а):Встала проблема — знаем как решить — замечательно. Не знаем как решить — не вопрос, через 10 минут будем знать.
Ну это напрямую зависит от конкретного индивида, кому то потребуется 10 минут, а кому-то и суток не хватит. И опять же способность добывать знания зависит в т.ч. и от объема тех знаний, которые индивид уже имеет и забудь он 99% своего багажа знаний, вряд-ли он также быстро и легко получит новое знание. ИМХО я бы сказал так, что чем больше человек знает, тем он может быстрее добыть новое знание. Конечно прямолинейной зависимости тут нет, но сама зависимость несомненно имеется.
Бороться и искать, найти и перепрятать

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Прокрутка формы с помощью ScrollBar.

Сообщение ark » 03.08.2012 (Пт) 10:49

Хакер писал(а):Потому что двигается окно (созданное CreateWindow), а не контрол. Контрол думает, что он остаётся на старом месте. Проверь свойства Top и Left контролов после применения ScrollWindow..
Так это, ИМХО, и есть стандартный подход к прокрутке - "двигать контейнер, а не контролы", как alibek написал. И, насколько я понял, у ТС именно такая задача и стоит. А если сторонний контрол тултипы рисует в экранных координатах, а не в клиентских - это его (контрола) проблема - фтопку такие контролы.
Kekir писал(а):Как сделать так, чтобы при уменьшении размера окна не убегал бегунок очень далеко? Т.е. при стандартно открытом окне все нормально крутится, но стоит поменять размер окна, как scroll можно задвинуть на очень большое значение вниз\влево.
И еще остается след, как от него избавиться? Перерисовка с помощью refresh не помогла. Она просто форму перерисовывает, но не обновляет.

Не понял про след и проч. Нарыл тут свой древний пример :D
Scroll.zip
Scroll
(2.99 Кб) Скачиваний: 120

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 03.08.2012 (Пт) 10:57

ark, ты гонишь по страшному.
Причём тут контейнеры и содержимые элементы.
Есть оконная подсистема, за которую отвечает User32, объектами действия которой являются окна (windows), имеющие хендлы, и имеющие свои законы жизни.
Есть подсистема контролов, надстроенная над подсистемой окон. Объектами этой подсистемы являются COM-контролы, имеющие свои законы жизни.

VB, ясное дело, использует концепцию контролов, построенную над окнами.

Контроллы устроены так, что при обращении например, к свойству Top контрола, реализация контрола сама двигает соответствующее контролу окно.
ScrollWindow действует в обход контролов и двигает сами окна. В то время как контролы не догадываются, что их окна были сдвинуты.

Иными словами Command1.Top и Command1.Left до вызова ScrollWindow и после вызова ScrollWindow вернут одинаковые результаты, хотя сама кнопка визуально сдвинется. Потому что реализация контрол-класса CommandButton не предполагает, что кнопку-как-окно двигались в обход кнопки-как-контрола.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Прокрутка формы с помощью ScrollBar.

Сообщение ark » 03.08.2012 (Пт) 11:01

Хакер писал(а):Иными словами Command1.Top и Command1.Left до вызова ScrollWindow и после вызова ScrollWindow вернут одинаковые результаты
Ну да. Клиентские координаты и должны оставаться одинаковыми. Ты пример посмотри - я двигаю окно scrollbar'ом - в этом случае вся концепция screen/client сохраняется.

Добавлено: пардон, зная Вашу требовательность к точности, не ОКНО, а его клиентскую часть :D

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 03.08.2012 (Пт) 11:03

ark писал(а):Ну да. Клиентские координаты и должны оставаться одинаковыми.

Клиентские координаты чего?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Прокрутка формы с помощью ScrollBar.

Сообщение ark » 03.08.2012 (Пт) 11:06

Хакер писал(а):Клиентские координаты чего
Контрола, естественно - относительно контейнера - формы

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Прокрутка формы с помощью ScrollBar.

Сообщение ark » 03.08.2012 (Пт) 11:13

Хакер писал(а):ScrollWindow действует в обход контролов и двигает сами окна

Ааа дошло! Мы о разных вещах. Хакер, я ж говорил уже, ScrollWindow я использую на контейнере (форме и pictureboxe в примере) а не напрямую для двигания контролов.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 03.08.2012 (Пт) 11:20

Это было бы логично, если бы вместе со всем хлалом двигалась бы и сама система клиентских координат. Но она не двигается. Ты отдаёшь себе отчёт о том, какие последствия из этого проистекают?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Прокрутка формы с помощью ScrollBar.

Сообщение ark » 03.08.2012 (Пт) 11:40

Хакер писал(а):отдаёшь себе отчёт о том, какие последствия из этого проистекают?
А что такого страшного? Двигать контролы через топ/лефт нельзя? Так всегда есть ScreenToClient/ClentToScreen. Да и позиция scrollbara у контейнера. Что ещё?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 03.08.2012 (Пт) 11:42

В соответствии с базовым уровнем здравого смысла, выполнение вот такой строчки кода:
ctl.Left = ctl.Left
Должно ли как-то менять положение контрола?
Нет. В соответствии со здравым смыслам, такой код не должен иметь вообще никаких подочных эффектов.
Тем не менее, если ты применял ScrollWindow(Ex), контрол после выполнения такого кода прыгент, причём как по горизонтальной оси, так и по вертикальной.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Прокрутка формы с помощью ScrollBar.

Сообщение ark » 03.08.2012 (Пт) 11:55

Хакер писал(а):контрол после выполнения такого кода прыгент
Конечно, прыгнет. Но лекарство-то элементарное - взять позиции scrollbaroв и двинуть соответсвенно. Или MoveWindow/SetWindowPos.
Неуж то эстетичнее PictureBox.Top в минус задирать?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 03.08.2012 (Пт) 11:57

Лекарство не нужно. Нужно взять топор и отрубить нафиг руки всем, кто использует кривые методы, и у кого криетрием применимости служит не прямота решения, а фраза «дык ыть работает жеж!».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Прокрутка формы с помощью ScrollBar.

Сообщение ark » 03.08.2012 (Пт) 11:59

Ну так предложи прямое :D

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Хакер » 03.08.2012 (Пт) 12:08

Прямое предложение уже было — положить весь хлам в контрол-контейнер и двигать контрол-контейнер.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Mikle » 03.08.2012 (Пт) 13:02

ark писал(а):Неуж то эстетичнее PictureBox.Top в минус задирать?

А что тут неэстетичного?

uni
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 105
Зарегистрирован: 05.05.2006 (Пт) 15:24
Откуда: Екатеринбург

Re: Прокрутка формы с помощью ScrollBar.

Сообщение uni » 03.08.2012 (Пт) 18:47

А я не заморачивался и двигал сами элементы управления. Всё довольно шустро работает.
Вложения
Scroll controls.PNG
Прокуртка во фрейме
Россия навсегда!
Сетрификаты

Samovar
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 111
Зарегистрирован: 23.05.2004 (Вс) 8:13

Re: Прокрутка формы с помощью ScrollBar.

Сообщение Samovar » 03.08.2012 (Пт) 21:32

/Off
Простите за вопрос uni,
А что за программу стирки Вы делали? Неужели наконец-то белую технику начали делать с программным интерфейсом и с портом под управление домашним компютером!?
/EndOff
Ученье - свет, неученых - тьма.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 6

    TopList