С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11

Рисование вне формы в любом месте экрана

20.01.2014, 12:55. Показов 2734. Ответов 12

Студворк — интернет-сервис помощи студентам
Всем привет!
Подскажите, пожалуйста, как оперативно в любой части экрана отрисовать определенную несложную фигуру.
Конкретно хочу сделать программу которая каждые X миллисекунд будет отрисовывать посередине экрана прицел. Такого рода софт требуется игроманам, когда стандартные прицелы в игре разъезжаются или попросту плохо видны на объектах того же цвета что и сам прицел.

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

P.S.: Ввел в поисковике форума слово "графика" и "рисование".. вылезало всё что угодно кроме нужного =(
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2014, 12:55
Ответы с готовыми решениями:

Проверка касания экрана в любом месте
Здравствуйте! Вопрос такой, как можно реализовать проверку условия касания экрана? Т.е., например, если есть касание экрана (в любом...

PopupMenu в TrayIcon не пропадает по щелчу в любом месте экрана
Есть программа которая свернутая в трей. Когда по значку нажимаю правой клавишей мыши выскакивает окно (Popurmenu), у других программ можно...

Открытие рекламы после щелчка мышки в любом месте экрана
Добрый день! Недавно столкнулся с проблемой: Хром начал показывать рекламу везде, где только можно(соц сети, поисковики и прочие...

12
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.01.2014, 13:42
Цитата Сообщение от Bati4eli Посмотреть сообщение
Ввел в поисковике форума слово "графика" и "рисование".. вылезало всё что угодно кроме нужного =(
попробуй воспользоваться полезным советом

Добавлено через 13 минут
Оссобенно продвинутые операции рассмотри
1
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
20.01.2014, 14:48
Создание Крестика в центре экрана
2
20.01.2014, 14:57

Не по теме:

The trick воспользовался (шутка)

0
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.01.2014, 15:50  [ТС]
The trick, так же можете подсказать Апишные функции для рисования типа Круг, Линия, Квадрат?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.01.2014, 15:52
Прицел нужен для игры. Игра наверно 3D. Не думаю, что форма с крестиком тут поможет. Тут надо как минимум DX задействовать.
С форума игроманов:
Кликните здесь для просмотра всего текста
Я делал так:
брал жвачку и две нитки, по диагонали из угла в угл монитора натягивал нитку и прилеплял её жвачкой. ?? так по обоим диагоналям. В итоге:
1) не один античит никогда не спалит.
2) крестик получается точно по центру.
3) без геммороя с разработкой программ.



Добавлено через 1 минуту
Цитата Сообщение от Bati4eli Посмотреть сообщение
Апишные функции для рисования типа Круг, Линия, Квадрат?
Они тоже поверх 3D и 2D игр работать не будут
0
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.01.2014, 16:05  [ТС]
Pro_grammer,
не знаю.. вот навоял тут. Сегодня попробую в одной игрушке, в которую давно играю и там используется коллиматорный прицел с красной точкой и противники выделяются тоже красным (соответственно фиг поймешь прицелился ты или нет).
Я так подумал частота обновления экрана 60 герц, соответственно экран монитора обновляется каждые 16.67 миллисекунд. Исходя из этого я накидал на форму несколько таймеров (работа которых друг на друга не влияет, т.е. создается несколько потоков, если так можно сказать) и каждому присвоил разное время обновления.

По крайней мере я тут пробовал прогу (называлась AIM-прицел), она прорисовывала прицел, но он не часто прорисовывался, из-за чего в игре его почти не видно было.. так раз в секунду мерцнет и всё.
Вложения
Тип файла: zip Прицел.zip (59.2 Кб, 28 просмотров)
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.01.2014, 16:20
А в почем можно испытать.
Простой код, рисует элипс на экране вслед за мышкой. На форму положить 1 таймер.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Type POINTAPI
    x As Long
    y As Long
End Type
 
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Sub Form_Load()
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub
Sub Timer1_Timer()
    Dim Position As POINTAPI
    'Позиция курсора
    GetCursorPos Position
    'Рисуем элипс на экране
    Ellipse GetWindowDC(0), Position.x - 5, Position.y - 5, Position.x + 5, Position.y + 5
End Sub
Добавлено через 11 минут
Цитата Сообщение от Bati4eli Посмотреть сообщение
Исходя из этого я накидал на форму несколько таймеров (работа которых друг на друга не влияет, т.е. создается несколько потоков, если так можно сказать) и каждому присвоил разное время обновления.
Запустил Far Cry3. В принципе видно, хоть и противно мигает Использовать можно если прмспичило.
P.S.
А что спрашивал то, если уже сам написал что надо?
1
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.01.2014, 16:57  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А что спрашивал то, если уже сам написал что надо?
Честно даже не знаю что ответить.. просто я на абум слепил из всяких апишек данную рисовалку крестика.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Declare Function Ellipse Lib "gdi32"
А цвет у него невозможно проставить? =(
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.01.2014, 18:10
Цитата Сообщение от Bati4eli Посмотреть сообщение
А цвет у него невозможно проставить?
Можно. Надо создать ExtCreatePen
Visual Basic
1
Private Declare Function ExtCreatePen Lib "gdi32" (ByVal dwPenStyle As Long, ByVal dwWidth As Long, lplb As LOGBRUSH, ByVal dwStyleCount As Long, lpStyle As Long) As Long
Добавлено через 2 минуты
Маленький пример, для понимания
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Type LOGBRUSH
        lbStyle As Long
        lbColor As Long
        lbHatch As Long
    End Type
    Private Declare Function ExtCreatePen Lib "gdi32" (ByVal dwPenStyle As Long, ByVal dwWidth As Long, lplb As LOGBRUSH, ByVal dwStyleCount As Long, lpStyle As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Const BS_SOLID = 0&
    Private Const PS_COSMETIC = 0&
    Private Const PS_USERSTYLE = 7&
    Private OldPen As Long
 
    Private Sub Form_Load()
    Dim lb As LOGBRUSH, Lengths(4) As Long
    lb.lbColor = 255
    lb.lbStyle = BS_SOLID
    Lengths(1) = 10
    Lengths(2) = 3
    Lengths(3) = 5
    Lengths(4) = 3
    OldPen = SelectObject(hdc, ExtCreatePen(PS_COSMETIC Or PS_USERSTYLE, 1, lb, 4, Lengths(1)))
    End Sub
 
    Private Sub Form_Unload(Cancel As Integer)
    DeleteObject SelectObject(hdc, OldPen)
    End Sub
 
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Line (0, 0)-(X, Y)
    End Sub
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
20.01.2014, 20:37
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Прицел нужен для игры. Игра наверно 3D. Не думаю, что форма с крестиком тут поможет. Они тоже поверх 3D и 2D игр работать не будут
Для неполноэкранных игр, мой способ подходит по всем параметрам. Вопрос не стоял в том чтобы отрисовывать в полноэкранных приложениях. Такие вещи можно сделать если внедриться в процесс и перехватить вызов окончания отрисовки (такая техника используется во Fraps, при отрисовке кадров).
Bati4eli, Pro_grammer, каждому вызову GetDC, GetWindowDC должен быть соответствующий вызов ReleaseDC.
Bati4eli, нет смысла ставить таймер на 4 мс, интервал не может быть меньше разрешения системного таймера (GetSystemTimeAdjustment), к тому же очередной отсчет начинаеться после выхода из процедуры таймера. И вообще твой подход неверный. Если хочешь сделать нормально, то внедряйся в процесс, и перехватывай вызов, тогда и мерцать ничего не будет и будет все отрисовываться точно поверх. Читай Рихтера, там все описано.
Если же делать через отрисовку прямо на экране, то хотя бы сохранять изображение под курсором, дабы не плодить кучу грязи на экране (хотя какой в этом смысл, если есть слоеные окна???)
Цитата Сообщение от Bati4eli Посмотреть сообщение
The trick, так же можете подсказать Апишные функции для рисования типа Круг, Линия, Квадрат?
В моем примере можно стандартными Circle и Line рисовать, и выбирать цвет. Также цвет можно задать через SetDCPenColor, предварительно выбрав одно из стандартных перьев (GetStockObject), тогда и создавать ничего не надо.
1
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
21.01.2014, 19:11  [ТС]
The trick, можете подкинуть ссылку или простой пример привести внедрения процесс?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
21.01.2014, 19:15
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Дж. Рихтер "Windows для профессионалов" Глава 22 Внедрение DLL и перехват API-вызовов
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2014, 19:15
Помогаю со студенческими работами здесь

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

Как разместить главное меню (MainMenu) в любом месте формы
Не могу разобраться с проблемой: на форме присутствует панель со свойством Align = alTop (она заменяет стандартный заголовок окна) ...

Рисование вне формы
Здравствуйте. Подскажите пожалуйста, возможно ли рисовать вне формы, если да, то как? (делаю что-то типа выпадающего списка)

Рисование вне формы
Как нарисовать, допустим, эллипс вне формы?Или чтобы формы не было видно. Да и так чтобы он был поверх всех окон.

Рисование вне клиентской области формы
Всем здравствуйте. Рисую светодиодный индикатор: int l,t,d; l = 100; t = 0; d = 15; ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru