Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27

TransparentBlt не работает в Win64

31.08.2021, 19:45. Показов 4649. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция TransparentBlt в Win64 заканчивается с результатом "0" (False).
Есть способ забороть?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.08.2021, 19:45
Ответы с готовыми решениями:

Регистрация DLL не работает в win64
Задача следующая. Написал библиотеку, реализующую простой OLE интерфейс. Сделал через ATL. Среда Visual Studio 2015 pro. Операционка...

GlfwSwapBuffers работает неадекватно медленно. (win64, glew, glfw3)
glfwSwapBuffers работает 15ms, что явно какой-то бред. Весть рендер занимает 5ms, а смена буферов 15? Что не так? На скрине видно время...

У кого-нибудь еще работает Canon i320 под Win64?
У кого-нибудь работает Canon i320 под Win64? Нигде не могу найти драйвера. Может, кто поделится, или подскажет что делать?

43
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
02.09.2021, 21:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Интересно, как это объясняет разное поведение кода в w10 и w7?
Различные значения твипов не пиксель
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
02.09.2021, 22:07  [ТС]
The trick, спасибо за разъяснения.
Если указать формат так:
Visual Basic
1
Picture1.ScaleMode = vbPixels
и попросить вывести формат так:
Visual Basic
1
Debug.Print Picture1.ScaleMode
получим ответ"3".
Есть ли возможность получить ответ в формате "vbPixels"? Это для проверки, чтобы не сомневаться.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
02.09.2021, 22:43
Цитата Сообщение от The trick Посмотреть сообщение
Различные значения твипов не пиксель
Разве это не константа?
1 Пиксель равно 15.002846 Твипов
1 Твип равно 0.066654 Пикселя
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
02.09.2021, 23:11  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Разве это не константа?
У меня на 7-ке 12 твипов\пиксель, а на 10-ке 15.
Попробуйте на разных системах и мониторах:
Visual Basic
1
2
3
4
Private Sub Form_Load()
Debug.Print Screen.TwipsPerPixelX
Debug.Print Screen.TwipsPerPixelY
End Sub
Добавлено через 9 минут
Не понятно, что именно подразумевает тип vbUser? Понятно, что пользовательский тип, но в каких единицах?
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.09.2021, 06:27
Цитата Сообщение от Argus19 Посмотреть сообщение
Понятно, что пользовательский тип, но в каких единицах?
В пользовательских. Например в попугаях. Или в слонёнках.
Также Вы можете определить свой масштаб. Произвольный масштаб задается свойствами ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight или методом Scale. При изменении этих свойств свойство ScaleMode автоматически примет значение vbUser. Произвольный масштаб может быть удобен например для рисования графиков. Например, чтобы нарисовать синусоиду, можно ввести масштаб от -6.28 до 6.28 по оси x, от -1 до 1 по оси y:
Scale (-6.28, 1)-(6.28, -1)
Всё равно непонятно, почему считается что один пиксел соответствуем 15 твипам.
vbPoints -0,75 пикселя;
vbCharacters - содержит 120 твипов по горизонтали и 240 по вертикали;
vbInchs - 96 пикселей;
vbMillimeters и vbCentimeters соответственно 3,8 и 38 пикселей. Эти масштабы соответствуют реальному миллиметру и сантиметру при выводе изображения на принтер.
Но главное непонятно почему это зависит от ОС, win7 или win 10?
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
03.09.2021, 11:26  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
В пользовательских. Например в попугаях. Или в слонёнках.
На басурманском форуме разъяснили, что свойства ScaleWidth, ScaleHeight всегда в формате Single.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
при выводе изображения на принтер.
Принтер, он и в Африке принтер.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Но главное непонятно почему это зависит от ОС, win7 или win 10?
Зависит от драйвера видеокарты.
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
03.09.2021, 13:43
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Разве это не константа?
Нет конечно. Поменяй DPI - поменяется и количество твипов на пиксель.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.09.2021, 17:32
Цитата Сообщение от The trick Посмотреть сообщение
Поменяй DPI - поменяется и количество твипов на пиксель.
Но я не меняю DPI при переходе с win 7 на Win10, те же монитор, изображение и исходный код.
Цитата Сообщение от Argus19 Посмотреть сообщение
Зависит от драйвера видеокарты.
На сколько известно, в большинстве случаев драйверы от 7-ки подходят для win10.
Хотя наверняка сказать сложно, W10 может поставить драйвер самостоятельно.
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
03.09.2021, 18:40  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Хотя наверняка сказать сложно, W10 может поставить драйвер самостоятельно.
К сожалению, я не сохранил ссылку на форум, где обсуждался вопрос о твип\пиксел. Там один человек пишет, что у него было 14 твип\пиксел, он переустановил драйвер и стало 15.
Я уже писал, что у меня на Win7 - 12, на другом компе Win10 и там 15.
Если визуально форма на 7-ке выглядит большой, то на 10-ке она меньше при одинаковых размерах мониторов. При этом
Visual Basic
1
Form1.ScaleMode = 3
размеры формы в пикселях.

Добавлено через 22 минуты
Добавил в событие Form_Load() код:
Visual Basic
1
2
MsgBox Screen.TwipsPerPixelX & " " & Screen.TwipsPerPixelY, vbInformation + vbOKOnly
MsgBox Form1.Width & " " & Form1.Height, vbInformation + vbOKOnly
При запуске на 7-ке : 12 12 18000 10308
При запуске на 10-ке: 15 15 18030 10350
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
03.09.2021, 21:39
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Но я не меняю DPI при переходе с win 7 на Win10, те же монитор, изображение и исходный код.
Не понял тебя. Ты написал что это константа, я написал что при изменении DPI изменяется количество твипов на пиксель. Что не так? Размер пикселя вообще может быть любым, а твип - это вполне константная величина.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.09.2021, 22:02
Цитата Сообщение от The trick Посмотреть сообщение
Размер пикселя вообще может быть любым
Как он может быть любым на конкретно взятом мониторе? Это всегда константа для конкретного монитора.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
08.09.2021, 19:23
Pro_grammer, ты наверное говоришь о физической точке на матрице экрана.
Приложения не оперируют ими.
DPI - это dots per inch (кол-во точек на дюйм). Не-константное значение, изменяемое в настройках винды.
Соответственно, и размер самой точки будет варьироваться.
Отсюда можно почерпнуть больше инфы: https://www.vbforums.com/showt... ost4980533
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
08.09.2021, 21:27
Цитата Сообщение от Dragokas Посмотреть сообщение
Не-константное значение
По отношению к мониторам ЖК термин PPI более корректен, а не DPI.
Если у меня монитор имеет 2560x1440 пикселей и его размер 27', то как его не крути, плотность пикселей, а именно пикселей на дюйм не увеличится и не уменьшится. На разных мониторах может быть разное значение, это да. Но у меня один и тот же монитор на Win7 и Win10, один и то же комп, одинаковые настройки увеличения экрана 125%.
Визуально картинка выглядит одинаково, она одна и та же, а значит имеет одинаковую плотность пикселей. Запускается одинаковый код на одинаковом VB6. Но в зависимости от системы получаем разный результат. Меня просто заинтересовал этот факт и ни чего более.
1
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
08.09.2021, 22:40
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Как он может быть любым на конкретно взятом мониторе?
Ты говоришь о физических пикселах монитора. Приложения на Windows никогда не работают с ними, они работают с логическими пикселями. Логический пиксель зависит от многих факторов, от банального разрешения, до наличия специального манифеста у приложения. Количество пикселей на твип или дюйм (и наоборот) - это НЕ константа.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
09.09.2021, 08:37
Цитата Сообщение от The trick Посмотреть сообщение
Ты говоришь о физических пикселах монитора. Приложения на Windows никогда не работают с ними
Как это никогда?
А GetSystemMetrics покажет размер экрана в пикселях, GetPixel цвет конкретного пикселя, GetCursorPos координаты мыши, и всё четко соответствует физическим пикселям на экране как в win10 так и в win7!

P.S. Если конечно умышленно не уменьшить разрешение экрана от рекомендованного.
Но это не мой случай, у меня на обеих Виндах стоит родное разрешение.
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
09.09.2021, 21:35
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А GetSystemMetrics покажет размер экрана в пикселях, GetPixel цвет конкретного пикселя, GetCursorPos координаты мыши, и всё четко соответствует физическим пикселям на экране как в win10 так и в win7!
Ни одна из этих функций не работает с физическими пикселами. GetSystemMetrics вообще DPI-unaware. GetCursorPos возвращает в логических, также как и GetPixel работает с логическими пикселями.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
09.09.2021, 22:13
Цитата Сообщение от The trick Посмотреть сообщение
GetCursorPos возвращает в логических, также как и GetPixel работает с логическими пикселями.
На моём мониторе, на котором я запускаю код, это совершенно одинаковые понятия.
Когда я ставлю курсор в начало экрана, то GetCursorPos возвращает 0,0, а в нижнем правом углу 2560, 1440.
И это не зависит от ОС.
Если конкретно не знаешь почему разный результат на win10 и win7 в программе Argus19, то чего зря голову морочить всякой ерундой.
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
10.09.2021, 17:10
Pro_grammer, ну ерунду пока только ты говоришь. Я уже сказал причину из-за чего такое поведение может быть.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.09.2021, 20:36
Цитата Сообщение от The trick Посмотреть сообщение
Я уже сказал причину
Это?
Цитата Сообщение от The trick Посмотреть сообщение
Различные значения твипов не пиксель
Это понятно, когда разные параметры мониторов и их настроек.
У меня ситуация другая, всё одинаково.

Но вот я что подумал. На win 10 стоит VB6 не по настоящему, а портативная сборка. Причем сборка на основе виртуальной машины VMware.
В связи с этим вопрос стоит в другом. Скажем при эмуляции работы окружения того компа, как котором эта VB6 стояло может быть такое, что там настройки экрана не как у меня 125% а скажем стандартное 100%.
Тогда бы это всё объяснило.
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
10.09.2021, 20:38
Pro_grammer, и там и там у тебя одинаковые значения screen.twiosperpixel?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.09.2021, 20:38

TransparentBlt
Товарищи программисты! обьясните нубу как спомощью TransparentBlt на Image1 чтоб был прозрачный цвет вместо чёрного?

TransparentBlt и поворот изображения
Приветствую Вас. Мне вот не совсем понятно поведение функции TransparentBlt, и если можно, помогите понять почему так происходит. Излагаю...

Помогите решить проблему с TransparentBlt в Win98
Добрый День!!! Столкнулся с траблой - после длительной работы над проектом наткнулся на то что под 98 прога не запускается - пишет не...

TransparentBlt: ссылка на неразрешенный внешний символ __imp__TransparentBlt@44
При использовании TransparentBlt в виде: TransparentBlt(hDC, 2, 3, 22, 22, hMemDC,0,0,22,22, RGB(0,0,0)); Выдает ошибку: ...

TransparentBlt, ошибка "Параметр задан неверно"
доброго всем!! TransparentBlt(Canvas.handle, 0, 0, 500, 500, bitmap.canvas.handle, 0, 0, 500, 500, ColorToRGB(clblack)) Функция...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru