Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

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

Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Глендальфин » 14.02.2011 (Пн) 9:14

В Ограниченный размерами pictureBox, (без автосайза) помещаются всякие-большие-маленькие картинки. И в этот момент хочется увидеть скролл.

В чем трагедия:
Не нашел я скролла у ПикчьюреБокса.. Не нашел..

Засовывание pictureBox в pictureBox и приклеивание по бокам H/VScrollBar'ов - как то коряво..

Искал по форуму, но либо у меня проблема с богатством синонимарного лексикона, либо здесь НЕТ такой темы..
Существует ли простое и гениальное решение?

Спасибо

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Хакер » 14.02.2011 (Пн) 9:17

Глендальфин писал(а):Засовывание pictureBox в pictureBox и приклеивание по бокам H/VScrollBar'ов - как то коряво..

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

Глендальфин
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 8
Зарегистрирован: 14.02.2011 (Пн) 9:01

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Глендальфин » 14.02.2011 (Пн) 9:22

Хакер писал(а):добавлению скроллбару специального Windows-стиля и обработка специальных оконных сообщений прокрутки.


А можно попоподробнее??

Хотя бы дайте ссылочку..



Ну дайте хотя бы название этого СПЕЦИАЛЬНОГО Windows-стиля !!!

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Хакер » 14.02.2011 (Пн) 9:51

WS_HSCROLL — для горизонтального и WS_VSCROLL для вертикального прокручивания. Комбинация стилей для комбинированного прокручивания.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Глендальфин
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 8
Зарегистрирован: 14.02.2011 (Пн) 9:01

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Глендальфин » 14.02.2011 (Пн) 11:01

Хакер, я искренне прошу прощения, предвижу Ваши вздохи, но будьте, я вас умоляю.. Только не бейте по ребрам..
Что я этим хочу сказать - а то что, я относительно недавно занимаюсь скриптоложеством, и уровень компетенции находится на уровне: знаю как употребить for, if, case.. могу напечатать лист на принтере.. могу подключить библ, и юзать функции; могу из vb создать документ word, изменить там все слова "паранойя" на "йогурт" и сохранить в директории app.path & "\tempdocs", но что такое windows-стили и зачем их "добавлять скроллбару", а не picturebox'у - я не совсем понимаю..
Может просто есть готовые контролы (компоненты) просмотрщики картинок имеющие скролл и hdc попутно?
Ну или скажите по какому принципу мне воспользоваться пресловутыми вин-стилями..

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Хакер » 14.02.2011 (Пн) 11:18

Глендальфин писал(а):или скажите по какому принципу мне воспользоваться пресловутыми вин-стилями..

Прочитать полностью: http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Прочитать второй раз кусок о стилях. Понять.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Vova_2581 » 15.02.2011 (Вт) 18:56

Хакер писал(а):Красивым и правильным решением в данном случае является добавлению скроллбару специального Windows-стиля и обработка специальных оконных сообщений прокрутки.

Ага! Думаю, особенно весело будет, когда он столкнется с проблемой расчета параметра nPage в структуре SCROLLINFO, которую использует SetScrollInfo. Если будет получатся неправильно, то визуальная длина ползунка будет не соответствовать реальному размеру картинки. Из-за этого ползунок будет либо «недопоказывать» картинку, либо появиться люфт на беговой полоске ползунка. Это место будет самым вазелиновым!

Уж лучше корявая картинка в картинке.

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Mikle » 15.02.2011 (Вт) 19:30

Глендальфин писал(а):Засовывание pictureBox в pictureBox и приклеивание по бокам H/VScrollBar'ов - как то коряво..

Нормальное решение...

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Хакер » 15.02.2011 (Вт) 20:36

Mikle писал(а):Нормальное решение...

Нет.
Vova_2581 писал(а):Ага!

Vova_2581 писал(а):когда он столкнется с проблемой расчета параметра

Если лично у тебя это вызывает проблему, это не значит, что проблема имеется в самом методе.

Mikle писал(а):Нормальное решение...

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

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Vova_2581 » 15.02.2011 (Вт) 23:26

Хакер писал(а):Если лично у тебя это вызывает проблему, это не значит, что проблема имеется в самом методе.

Я ни слова не сказал про метод. Только лишь о проблеме расчета. Дай точную формулу на nPage.

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Хакер » 16.02.2011 (Ср) 0:26

Vova_2581 писал(а):Дай точную формулу на nPage.

Скоро я допишу статью «Правильные скроллбары» в Мануал. Нет никакой форумы. Размер контейнера в единицах контейнера делить на шаг скроллинга в единицах контейнера. Для TextBox-а это будет число строк, отображаемых TextBox-ом при его текущем размере.
—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: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Mikle » 16.02.2011 (Ср) 10:26

Хакер писал(а):4 окна вместо одного. Невозможность захвата картинки программами, которые умеют скроллить контейнеры. Невозможность гарантированной адаптации под визуальный стиль целевой системы.

По крайней мере нужно спросить автора, нужно ли всё это? Какова задача? А то так можно в приступе перфекционизма бесконечно стремиться к совершенству, но так и не выполнить поставленную задачу.

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

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

Mikle писал(а):нужно ли всё это? Какова задача? А то так можно в приступе перфекционизма бесконечно стремиться к совершенству, но так и не выполнить поставленную задачу.

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

Глендальфин
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 8
Зарегистрирован: 14.02.2011 (Пн) 9:01

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Глендальфин » 17.02.2011 (Чт) 16:41

Я как автор, друзья мои, к вам и обратился, чтобы не делать очередной кал собранный из старых умывальников, сбитый досками и гвоздями на 10. Потому что я нарыл всяких исходников, с валяющимися подле длл-ками.. Чтобы не собирать воединно всю эту ахинею, я подумал что правильней сделать все на основе одной технологии, максимально просто и уютно.

Программа моя выглядит как файловый просмотрщик jpg-файлов, пользователь выбирает нужный файл, он у него отображается в preview'e в натуральный размер, далее пользователь наносит некий штамп (несколько шаблонных jpg), результатное изображение так же сохраняется в jpg формате..
Однако, натуральный размер вынуждает нас делать скроллбары либо..

Хотел привьюшку нормальную достать, так как изображения - это сканы разного разрешения и особогромные экземпляры растягивают пикчбокс до безобразия. Я подумал правильнее было бы взять некий призрачный объект/участок памяти, где можно было проводить все операци "слияния и наложения", а в превьюшку выводить только лишь результат, причем подогнанный под размеры привьюшки (для удобства просмотра) и вроде как скролы не нужны..

У меня по одной dll-ке на каждую операцию: Наложение на фон штампа с 50% blend (FoxCBmp.dll), сохранение в файл содержимого pictureBox по hDC (savetojpg.dll).. но я почитал статейки и подозреваю что все реализуемо с gdi32, но не могу найти полный справочник функций, меня отфутболили на мсдн, я там час посидел и готов был уже плакать над словарем - очень тяжко дается понимание.. Где то вычитал про функцию StretchBlt, добавил себе в проект, продекларировал функция - ну не хочет работать и все..
Код: Выделить всё
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
....
StretchBlt Pic1.hdc, 0, 0, 63, 63, Pic2.hdc, 0, 0, 126, 126, vbSrcCopy


Вот если бы кто то очень умный и с богатым опытом сказал бы мне, "BlendovstoBlt, StretchBllt и вот такие параметры, применяются так то, список констант такой-то" Я бы ему! я бы ему! Денег бы на сотовый кинул )

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Хакер » 17.02.2011 (Чт) 16:56

Глендальфин, мне всё больше кажется, что ты не настоящий.

Вопрос-то в чём?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Глендальфин
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 8
Зарегистрирован: 14.02.2011 (Пн) 9:01

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Глендальфин » 17.02.2011 (Чт) 17:48

вопрос 1: какой функцией я могу вытянуть/уменшить изображение.. (желательно если вы скжите что за библиотека и кратко о параметрах)

PaintPicture не предлагать, он какой-то не настоящий. Он хоть и извращает картинку, но с ней потом ничего не сделать


вопрос 2: MyPictureBox.picture.handle - что это? ПОчему если я загрузил туда изображение он равен какому то числу, а если в пустой MyPictureBox сделать paintpicture из другого пикчбокса, то Handle = 0 ??? Это ьыл второй вопрос.. Но первый приоритетней

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Debugger » 17.02.2011 (Чт) 20:14

Растягивание/изменение пропорций
Код: Выделить всё
Public Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

Код: Выделить всё
StretchBlt ( hDC приемника, x, y, ширина, высота картинки в приемнике, _
hDC источника, x, y, ширина, высота картинки в источнике, _
Операция (для копирования - vbSrcCopy))

Наложение полупрозрачной картинки
Код: Выделить всё
Private Declare Function AlphaBlend Lib "msimg32" (ByVal hDestDC As Long, _
    ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _
    ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal widthSrc As Long, _
    ByVal heightSrc As Long, ByVal blendFunct As Long) As Boolean

Код: Выделить всё
AlphaBlend (hDC приемника, X, Y картинки в приемнике, _
ширина, высота картинки, _
hDC источника, X, Y, ширина, высота картинки в источнике, _
МагическоеЧисло)

МагическоеЧисло - это число, в котором хитрым способом закодирована прозрачность, способ наложения и ещё куча других вкусных вещей, которые использует функция.
Кодируется так:
Код: Выделить всё
Const AC_SRC_OVER = &H00
Private Type BLENDFUNCTION
BlendOp As Byte
BlendFlags As Byte
SourceConstantAlpha As Byte
AlphaFormat As Byte
End Type

Это - описание структуры, т.е. мы расталковали VB6 этот "хитрый способ кодировки". Теперь нам надо эту структуру заполнить и "скопировать" в Long-переменную, чтобы передать AlphaBlend:
Код: Выделить всё
Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long)
Dim BF As BLENDFUNCTION, lBF As Long
'Заполняем
    With BF
    .BlendOp = AC_SRC_OVER
    .BlendFlags = 0
    .SourceConstantAlpha = 128 'Прозрачность
    .AlphaFormat = 0
    End With
'Копируем
RtlMoveMemory lBF, BF, 4
AlphaBlend ..., lBF

При этом в структурке можно установить AlphaFormat. Тогда функция AlphaBlend поймёт, что мы хотим заставить её использовать альфа-канал картинки.

Всё понятно?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Andrey Fedorov » 21.02.2011 (Пн) 13:36

Прикладываю свою довольно старую программку - будучи запущенной делает скриншот выбранного участка экрана. Соответственно есть там и ScrollBar для PictureBox - используется класс cScrollBars - применение его достаточно просто. Сам класс был взят с http://vbaccelerator.com - это есть в его заголовке, так что пример использования можно найти и там.
Вложения
Capture.rar
(424.75 Кб) Скачиваний: 86
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Хакер » 21.02.2011 (Пн) 14:14

Debugger писал(а):RtlMoveMemory lBF, BF, 4

viewtopic.php?f=68&t=36758
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Глендальфин
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 8
Зарегистрирован: 14.02.2011 (Пн) 9:01

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Глендальфин » 22.02.2011 (Вт) 12:28

1. Debugger, спасибо большое! растянуть-таки получилось, однако с толкнулся со своей программичной некомпетентностью:
Я хотел открывать файл jpg и если он слишком велик (проверка размеров) - > пропорционально уменьшать его. ОДНАКО.. bitblt "дерёт" изображение только с видимой части picturebox, а заодно и формы :D

Изображение

НЕ пойму как мне работать именно с изображением с его сутью, этой байтовой матрицей, к какому свойству обращаться?? Надо грузить изображение в память, как это сделать?


2Andrey Fedorov :

Поросячий визг одолевает меня при разборе программки Capture!!!! Это просто золото! Возможно я даже найду все ответы в нем.. Спасибо гигантское

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Хакер » 22.02.2011 (Вт) 12:30

Глендальфин писал(а):bitblt "дерёт" изображение только с видимой части picturebox, а заодно и формы :D

Налицо не понимание того, что такое hDC, DC и D.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение FaKk2 » 24.02.2011 (Чт) 3:36

А вот вопрос на засыпку. Зачем в две тысячи одинадцатом году от рождества христова, писать что-либо в давном умершем и протухшем visual basic 6? Это что, желание поностальгировать, показать свою преданность, и т.д.

P.S. я к тому, что вот сейчас за 10 минут, я сделал себе контрол в WPF, который и прокручивает содержимое, и накладывает изображения.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Andrey Fedorov » 24.02.2011 (Чт) 8:47

Глендальфин писал(а):Я хотел открывать файл jpg и если он слишком велик (проверка размеров) - > пропорционально уменьшать его.



Посмотри здесь. Пример не дюже идеален, но мне хватило почти для всего что мне требовалось для работы с графикой...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Mikle » 24.02.2011 (Чт) 9:51

FaKk2 писал(а):А вот вопрос на засыпку.

И ответ на засыпку:
viewtopic.php?f=1&t=11876

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

Re: Скроллбар у PictureBox. ЛЕГЕНДА или РЕАЛЬНОСТЬ???

Сообщение Хакер » 24.02.2011 (Чт) 12:00

FaKk2 писал(а):протухшем visual basic 6?

Сам ты протухший.

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


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 99

    TopList