Розыскивается скроллбар с поддержкой колесика

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

Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 28.02.2009 (Сб) 9:35

В стандартной комплектации VB6 элементы управления Vscrollbar и Hscrollbar не реагируют на вращение колесика мышки. Видимо тогда таких мышей еще не придумали. Но сейчас уже трудно встретить грызуна без колесика и соответственно встает вопрос как сделать или где взять?

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 28.02.2009 (Сб) 10:19

Придумали. Скроллбары не должны реагировать на колёсико.На колёсико должно реагировать окно, имеющее скроллбары и скроллить само себё, наиболее вероятно, транслируя WHEEL-сообщения в ScrollBar-вызовы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 28.02.2009 (Сб) 10:41

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

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 28.02.2009 (Сб) 11:25

Скулбар, гы-гы. Черепная панель, типа :lol:

А зачем тебе скроллбары, если ты ничего не собираешься скроллить?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение jangle » 28.02.2009 (Сб) 13:23

uk8amk писал(а):В стандартной комплектации VB6 элементы управления Vscrollbar и Hscrollbar не реагируют на вращение колесика мышки. Видимо тогда таких мышей еще не придумали. Но сейчас уже трудно встретить грызуна без колесика и соответственно встает вопрос как сделать или где взять?


Напиши свой компонент, с перехватом WM_MOUSEWHEEL, просто сдвигай ползунок скролбара. Очевидно же :wink:

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение jangle » 28.02.2009 (Сб) 13:54

А можно просто в модуль добавить обработчик, пример в аттаче
Вложения
SCROLL.zip
Пример
(4.95 Кб) Скачиваний: 82

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 01.03.2009 (Вс) 14:17

Хакер писал(а):А зачем тебе скроллбары, если ты ничего не собираешься скроллить?

Очень даже собираюсь. В дирректории может быть тысячи файлов. Чтобы было понятно о чем идет речь выкладываю скриншот своего проекта.

jangle писал(а):А можно просто в модуль добавить обработчик, пример в аттаче

О, а этот пример кажется то что мне и надо. Огромное спасибо!
Вложения
lsc.PNG
lsc.PNG (43.72 Кб) Просмотров: 2551

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 01.03.2009 (Вс) 14:24

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

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 01.03.2009 (Вс) 14:38

Вы что-то свое можете предложить?

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 01.03.2009 (Вс) 14:46

В смысле "своё"? Что своё можно предложить, когда что-то неправильно? Например, когда видешь фразу "Сойус нирушим ,их— —резь публик свОБОДныъх", что "своё" можешь предложить?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение MIT » 01.03.2009 (Вс) 17:03

Хакер писал(а):"Сойус нирушим ,их— —резь публик свОБОДныъх", что "своё" можешь предложить?

Нафик и с полтило, в е-лдикое рвусь 8)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение jangle » 01.03.2009 (Вс) 17:11

uk8amk писал(а):О, а этот пример кажется то что мне и надо. Огромное спасибо!


Да не за что :alien:

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 01.03.2009 (Вс) 18:12

Хакер писал(а):В смысле "своё"? Что своё можно предложить, когда что-то неправильно? Например, когда видешь фразу "Сойус нирушим ,их— —резь публик свОБОДныъх", что "своё" можешь предложить?

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

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 01.03.2009 (Вс) 19:15

Предложения есть.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 02.03.2009 (Пн) 8:07

Очень внимательно слушаю предложения

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение jangle » 02.03.2009 (Пн) 11:50

uk8amk писал(а): Все равно прога фриварная и для себя.


Ну тогда делай как удобнее тебе, и кстати скролить колесиком на самом деле удобнее.

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 03.03.2009 (Вт) 14:31

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

Код: Выделить всё
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Call UnHook(Me.hwnd)
    ShutdownWinIo 'Задушить драйвер ввода-вывода
    End
End Sub


Если закомментирую End то все становится нормально, но во время работы программы могут загружаться доп. формы, которые и прибиваются End'ом во время выхода. Без End в памяти могут остаться объекты и программа не будет полностью завершена. У кого какие идеи по этому поводу?

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 03.03.2009 (Вт) 14:37

Что значит "могут остаться объекты"? У объектов нет воли, инстинкта самосохранения, желания выжить. Объекты создаются и уничтожаются по определённым правилам. При написании программ программист в процедуре, ответственной за завершение приложения, должен сделать необходимые действия для освобождения занятых ресурсов. И никакой End не нужен.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение jangle » 03.03.2009 (Вт) 14:48

У кого какие идеи по этому поводу?


Если надо корректно выйти - то ExitProcess (0). Это стандартное завершение любой программы в Windows

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 03.03.2009 (Вт) 14:53

Это не корректно. Это всего-лишь "без лишних воплей".
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение jangle » 03.03.2009 (Вт) 15:11

Если ему надо просто закрыть приложения и все используемые им ресурсы, ExitProcess - единственно верный путь.
Об этом кстати написано в Microsoft® Win32® Programmer's Reference

ExitProcess is the preferred method of ending a process. This function provides a clean process shutdown. This includes calling the entry-point function of all attached dynamic-link libraries (DLLs) with a value indicating that the process is detaching from the DLL. If a process terminates by calling TerminateProcess, the DLLs that the process is attached to are not notified of the process termination.


Windows сама уничтожит всю цепочку объектов, выгрузит DLL, и вернет память операционной системе.

P.S. Еще конечно, при вызове из IDE функции ExitProcess, будет закрываться сама среда.

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 03.03.2009 (Вт) 15:21

Хакер писал(а):Что значит "могут остаться объекты"? У объектов нет воли, инстинкта самосохранения, желания выжить. Объекты создаются и уничтожаются по определённым правилам. При написании программ программист в процедуре, ответственной за завершение приложения, должен сделать необходимые действия для освобождения занятых ресурсов. И никакой End не нужен.

Ну например загрузили форму frmMain. Затем вызвали frmSlave и зашли в какой-то цикл. Пользователь желая завершить работу программы нажимает на frmMain кнопочку Закрыть(та что с крестиком). Получается: прибиваем frmMain, а другая форма остается в памяти и фактически программа продолжает свое выполнение.

С ExitProcess надо попробовать. Для нее никаких деклараций не требуется?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Viper » 03.03.2009 (Вт) 15:38

uk8amk писал(а):Ну например загрузили форму frmMain. Затем вызвали frmSlave и зашли в какой-то цикл. Пользователь желая завершить работу программы нажимает на frmMain кнопочку Закрыть(та что с крестиком). Получается: прибиваем frmMain, а другая форма остается в памяти и фактически программа продолжает свое выполнение.
При правильном подходе, программа не будет продолжать свое выполнение.
Весь мир матрица, а мы в нем потоки байтов!

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 03.03.2009 (Вт) 15:43

Если ему надо просто закрыть приложения и все используемые им ресурсы, ExitProcess - единственно верный путь.

Нет.

Об этом кстати написано в Microsoft® Win32® Programmer's Reference

Там написано о другом. Там написано "ExitProcess is the preferred method of ending a process." Это значит "ExitProcess — (наиболее) предпочтительный способ завершения процесса. "Завершение процесса" не то же самое, что "завершение приложения". Это вещи разных порядков. Завершение процесса — это последняя стадия более сложной процедуры завершения приложения.

Windows сама уничтожит всю цепочку объектов

Размечтался. Прямо таки применит весь свой искусственный интеллект, пройдётся по всей памяти, отыщит в ней указатели на интерфейсы COM-объектов, для каждого вызовет метод Release. Ага-ага, щас.

выгрузит DLL, и вернет память операционной системе.

Это да. Но этим не исчерпывается список мероприятий, которые надо совершить во время завершения приложения.

Ну например загрузили форму frmMain. Затем вызвали frmSlave и зашли в какой-то цикл. Пользователь желая завершить работу программы нажимает на frmMain кнопочку Закрыть(та что с крестиком). Получается: прибиваем frmMain, а другая форма остается в памяти и фактически программа продолжает свое выполнение

Значит ты не только интерфейс не умеешь споектировать, но и архитектуру приложения.
Экземпляр продолжит, если есть ссылки, ссылающиеся на него. Так сделай же так, чтобы их не осталось.

С ExitProcess надо попробовать. Для нее никаких деклараций не требуется?

Ясно :| . Декларации потребуются.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 03.03.2009 (Вт) 15:59

Viper писал(а):При правильном подходе, программа не будет продолжать свое выполнение.
К сожалению у меня уровень не такой высокий, поэтому пишу код можно сказать через одно место. Но иногда он несмотря ни на что работает :D
Хакер писал(а):Ясно :| . Декларации потребуются.
Если не затруднит, то пожалуйста выложите декларацию.

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

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение MIT » 03.03.2009 (Вт) 16:03

API-Guide 3.7 писал(а):Declare Sub ExitProcess Lib "kernel32" Alias "ExitProcess" (ByVal uExitCode As Long)

· uExitCode
Specifies the exit code for the process, and for all threads that are terminated as a result of this call. Use the GetExitCodeProcess function to retrieve the process’s exit value. Use the GetExitCodeThread function to retrieve a thread’s exit value.


Код: Выделить всё
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'end this process
    ExitProcess GetExitCodeProcess(GetCurrentProcess, 0)
End Sub
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение uk8amk » 03.03.2009 (Вт) 16:07

Спасибо. Попробую поиздеваться.

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 03.03.2009 (Вт) 16:16

Если не затруднит, то пожалуйста выложите декларацию.

Очень полезно иногда думать.

Т.е. как думать — не просто думать, а уметь так думать, что не имея какой-то информации восстанавливать её. Это относится и к 13GHOST, который в соседнем топике мучается с UTF-8.

Думать надо так:
  1. Имеем шаблон: Declare Function ???? Lib "???" (????) As ????. Имя функции знаем, вписываем:
    Declare Function ExitProcess Lib "???" (????) As ????
  2. jangle привёл пример вызова: ExitProcess (0). Значит у функции один параметр и передавать надо 0.
    Переделываем: Declare Function ExitProcess Lib "???" (ByVal abcd As Long) As ????
  3. Если эта функция заканчивает выполнение, значит возврата из неё не будет. Смело переделываем в Sub: Declare Sub ExitProcess Lib "???" (ByVal abcd As Long)
  4. Осталось вписать библиотеку. API-функции в основном располагаются в kernel32, user32, gdi32, advapi32.
    user — пользователь и взаимодействие с ним, остановка процесса не сюда.
    advapi — продвинутые API. А в завершении процесса никакой продвинутости.
    gdi — графика. В завершении процесса нет ничего графического.
    Остаётся kernel.
    Вписываем:
    Declare Sub ExitProcess Lib "kernel32" (ByVal abcd As Long)

Это пример того, как заиметь декларацию API функций, не имея справочника, но умея думать.
А можно было не думать а воспользоваться Яндексом или Гуглом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение jangle » 03.03.2009 (Вт) 16:35

Хакер писал(а):"Завершение процесса" не то же самое, что "завершение приложения". Это вещи разных порядков. Завершение процесса — это последняя стадия более сложной процедуры завершения приложения.


Масло маслянное. Приложение - это объект ядра называемый "процессом"

Размечтался. Прямо таки применит весь свой искусственный интеллект, пройдётся по всей памяти, отыщит в ней указатели на интерфейсы COM-объектов, для каждого вызовет метод Release. Ага-ага, щас.


Это у Рихтера так написано, мол не вызывайте ExitProcess, это не позволит корректно вызваться сишным диструкторам.
А это дескать плохо. На самом деле это полный бред. После вызова ExitProcess, ядро гарантирует полное освобождение всех ресурсов, и сбрасывание счетчиков объектов в ноль. Для примера, попробуй написать приложение, которое оставит после вызова ExitProcess какой-либо объект не разрушенным, это проосто невозможно.

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

Re: Розыскивается скроллбар с поддержкой колесика

Сообщение Хакер » 03.03.2009 (Вт) 17:52

Приложение - это объект ядра называемый "процессом"

Это очень смешно, то, что jangle считает, что понятие "приложение" и "процесс" — равнозначны. Но это в то же время и глупо.
Вообще-то (не знаю почему тебя так заклинило), одно приложение может состоять из несколько одновременно работающих процессов. Вообще-то есть есть термин "веб-приложение". У меня в телефоне есть меню "Приложения", где располагаются MP3-плеер, дикторофн, FM-радио и прочее.
Не стало чуть более очевидным, что понятие "приложение" не синоним "процесса"?

Это у Рихтера так написано, мол не вызывайте ExitProcess

Не читал. Но написано правильно. Особенно учитывая, что после отгонки MessageLoop, произойдёт возврат из EntryPoint процесса в kernel32, а там следом за вызовом EntryPoint стоит вызов ExitThread.

это не позволит корректно вызваться сишным диструкторам.

Действительно, не позволит.

После вызова ExitProcess, ядро гарантирует полное освобождение всех ресурсов, и сбрасывание счетчиков объектов в ноль.

Но оно не гарантирует вызов деструкторов :!: . Вообще, единственное, что ядро гарантирует: что процесс не сможет своими действиями навредить другим. Отобрать память и не отдать её, открыть файл для экскл. доступа и не забыть отдать. Всё это правильная система не даёт сделать. При этом система позволит любому процессу терзать самого себя как угодно и наносить себе любой вред.
Свои объекты система конечно же уничтожет надлежащим способом. Твои же (о которых понятия не имеет) — уничтожив АП процесса. Или ты веришь, что система всё-таки сделает Release всем ссылкам, потом заботливо вызовет CoUninitialize, и только потом убьёт процесс?

Для примера, попробуй написать приложение, которое оставит после вызова ExitProcess какой-либо объект не разрушенным, это проосто невозможно

Ещё раз: проблема не в том, что после ExitProcess что-то останется.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

След.

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

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

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

    TopList