Нарисовать прямоугольник, вне форм, поверх всех окон

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

Нарисовать прямоугольник, вне форм, поверх всех окон

Сообщение TrueTrue » 14.03.2017 (Вт) 14:22

Ребят, кто знает, подскажите, мне чисто для отладки, нужно нарисовать прямо на экране поверх всех окон прямоугольник красным цветом, как это сделать?

Пробую таким вот методом, ни точка ни прямоугольник не рисуется.
и hDC кстати, каждый раз разный.
Код: Выделить всё
    hDC = GetDC(GetDesktopWindow())
    Call SetPixel(hDC, 960, 540, vbRed)
    Call Rectangle(hDC, X, Y, 250, 250)

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

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

Сообщение Mikle » 14.03.2017 (Вт) 15:24

Чем отличается "поверх всех окон прямоугольник красным цветом" от формы красного цвета без бордюра?

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

Сообщение TrueTrue » 14.03.2017 (Вт) 15:32

Mikle писал(а):Чем отличается "поверх всех окон прямоугольник красным цветом" от формы красного цвета без бордюра?

Я хотел сделать прямоугольник без заливки. тоесть по ободу граница, внутри нет заливки.

С формой такое не знаю как сделать. Попробую с формой. Может обойдусь.
Последний раз редактировалось TrueTrue 14.03.2017 (Вт) 15:37, всего редактировалось 2 раз(а).

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

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

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

TrueTrue писал(а):С формой такое не знаю как сделать. Попробую с формой. Может обойдусь.

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

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

Сообщение TrueTrue » 14.03.2017 (Вт) 15:38

Mikle писал(а):Чем отличается "поверх всех окон прямоугольник красным цветом" от формы красного цвета без бордюра?

При использовании формы, если не ставь ей TOPMOST она ложится под окно FireFox. Если поставить Topmost то она ложится поверх FireFox и мою вторую форму так же поднимает поверх. Вобщем, она начинает криво перетасовывать окна, так как мне не подходит.

Ладно, если так сложно просто нарисовать на экране, тогда буду "выкручивать руки".

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

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

Сообщение Mikle » 14.03.2017 (Вт) 16:06

TrueTrue писал(а):ни точка ни прямоугольник не рисуется

У меня вот это работает:
Код: Выделить всё
Private Sub Form_Click()
  Dim DC As Long
  Dim i As Long

  DC = GetDC(0)
  For i = 100 To 400
    SetPixel DC, i, 100, vbRed
  Next i
  For i = 100 To 400
    SetPixel DC, 100, i, vbRed
  Next i
  For i = 100 To 400
    SetPixel DC, i, 400, vbRed
  Next i
  For i = 100 To 400
    SetPixel DC, 400, i, vbRed
  Next i
End Sub

Но лучше рисовать не пиксели, а линии, быстрее.

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

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

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

Mikle писал(а):
TrueTrue писал(а):ни точка ни прямоугольник не рисуется

У меня вот это работает:
Код: Выделить всё
Private Sub Form_Click()
  Dim DC As Long
  Dim i As Long

  DC = GetDC(0)
  For i = 100 To 400
    SetPixel DC, i, 100, vbRed
  Next i
  For i = 100 To 400
    SetPixel DC, 100, i, vbRed
  Next i
  For i = 100 To 400
    SetPixel DC, i, 400, vbRed
  Next i
  For i = 100 To 400
    SetPixel DC, 400, i, vbRed
  Next i
End Sub

Но лучше рисовать не пиксели, а линии, быстрее.


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

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

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

Сообщение Mikle » 14.03.2017 (Вт) 16:15

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

Конечно. Просто автору темы сказали как лучше, а он пишет:
TrueTrue писал(а):Ладно, если так сложно просто нарисовать на экране, тогда буду "выкручивать руки".

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

Сообщение TrueTrue » 14.03.2017 (Вт) 18:47

Mikle писал(а):
TrueTrue писал(а):ни точка ни прямоугольник не рисуется

У меня вот это работает:
Код: Выделить всё
Private Sub Form_Click()
  Dim DC As Long
  Dim i As Long

  DC = GetDC(0)
  For i = 100 To 400
    SetPixel DC, i, 100, vbRed
  Next i
  For i = 100 To 400
    SetPixel DC, 100, i, vbRed
  Next i
  For i = 100 To 400
    SetPixel DC, i, 400, vbRed
  Next i
  For i = 100 To 400
    SetPixel DC, 400, i, vbRed
  Next i
End Sub

Но лучше рисовать не пиксели, а линии, быстрее.

Спасибо Майкл, у меня тоже всё прорисовалось.

Я смотрю, ты поставил GetDC(0), а у меня
в строке:
Код: Выделить всё
hDC = GetDC(GetDesktopWindow())


GetDesktopWindow() возвращает: 65552, а значит и DC не тот.
Соответственно и девайс не тот.

Спасибо за помощь. Важно, что я разобрался и теперь имею выбор, буду выбирать, что лучше подойдёт.))

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

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

Сообщение Хакер » 14.03.2017 (Вт) 19:11

TrueTrue писал(а):Соответственно и девайс не тот.

Девайс тот. Клип-регион не тот.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

Сообщение Andrey Fedorov » 15.03.2017 (Ср) 11:13

TrueTrue писал(а):Ребят, кто знает, подскажите, мне чисто для отладки, нужно нарисовать прямо на экране поверх всех окон прямоугольник красным цветом, как это сделать?


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

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

Re: Нарисовать прямоугольник, вне форм, поверх всех окон

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

Andrey Fedorov писал(а):Когда делал программу для снятия скриншотов (лет так 15 назад), то выводил на весь экран форму без бордюров со скриншотом и уже по ней таскал мышью прямоугольник для выбора нужного участка. Все получилось до смешного примитивно. Вроде для этой части даже API не понадобилось..


Рад тебя видеть здесь!

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

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


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

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

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

    TopList