Рисуем на дисплее?

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

Рисуем на дисплее?

Сообщение Mihail_ » 31.03.2008 (Пн) 20:59

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

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

Сообщение Хакер » 31.03.2008 (Пн) 21:37

Mihail_
Форма - это класс, это такая абстрактная сущность, которая существует в программе.

А экземпляр формы, окно - это уже другое дело.


В Windows можно рисовать только на DC. У каждого окна есть свой DC. Даже два - весь и клиентский.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

M.A.R.K
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 68
Зарегистрирован: 11.11.2007 (Вс) 11:50
Откуда: Иркутск

Сообщение M.A.R.K » 01.04.2008 (Вт) 5:14

1. Рисуем линию на всем экране. (API: LineTo, MoveTo, GetDC)
Код: Выделить всё
Call MoveTo(GetDC(0), 10, 10)
Call LineTo(GetDC(0), 100, 100)

2. Я сам разбирался в похожей теме. (Рисование под формой)
Дали совет, покопаться в Оверлеях.
-Решил Хакер блины печь...
-Первый блин у него вышел, как обычно - Комом...
-А второй - Экзешником...

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

Сообщение Хакер » 01.04.2008 (Вт) 5:23

M.A.R.K
А Let ты тоже используешь?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

M.A.R.K
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 68
Зарегистрирован: 11.11.2007 (Вс) 11:50
Откуда: Иркутск

Сообщение M.A.R.K » 01.04.2008 (Вт) 7:54

Хакер писал(а):M.A.R.K
А Let ты тоже используешь?

Я тебя не понял... :wink:
Всмысле?
-Решил Хакер блины печь...
-Первый блин у него вышел, как обычно - Комом...
-А второй - Экзешником...

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

Сообщение Хакер » 01.04.2008 (Вт) 7:57

В том смысле, что
Call SomeFunction()

такой же устаревший синтаксис, как и

Let a = 132
Let b = "cawef"
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Сообщение Mihail_ » 01.04.2008 (Вт) 16:25

спасибо большое!
а если нужно сделать что-нибудь вроде этого, схема та же?
Изображение
[/img]
нарисованные элементы получают свой hwnd чтобы их можно было например делать прозрачными?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 01.04.2008 (Вт) 16:41

Нет. Но никто тебе не мешает создать такое окно.

Пример тут:
http://bbs.vbstreets.ru/viewtopic.php?t=36262
label:
cli
jmp label

Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Сообщение Mihail_ » 01.04.2008 (Вт) 17:13

да, спасибо - допустим мы можем сделать окно полупрозрачным через SetLayeredWindowAttributes, а как сделать его неправильной формы и без заголовка?

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 01.04.2008 (Вт) 18:11

Код: Выделить всё
Me.BorderStyle = 0
Me.BackColor = 0
Call SetLayeredWindowAttributes(Me.hwnd, Me.BackColor, 120, LWA_ALPHA Or LWA_COLORKEY)


Всё что на форме чёрным цветом будет прозрачным.

Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Сообщение Mihail_ » 01.04.2008 (Вт) 22:29

отлично, спасибо большое!

для будущих поколений
Код: Выделить всё
Option Explicit
Const LWA_COLORKEY = &H1
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Private Sub Command1_Click()
  Dim aStyle As Long
  Dim TransparentColor As Long
  TransparentColor = vbBlack
  aStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
  aStyle = aStyle Or WS_EX_LAYERED
  Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, aStyle)
  Call SetLayeredWindowAttributes(Me.hWnd, TransparentColor, 0, LWA_COLORKEY)
End Sub

Private Sub Form_Load()
'Me.BorderStyle = 0
Me.BackColor = 0
End Sub

делаем все элементы на форме, имеющие черный цвет 100% прозрачными.
Последний раз редактировалось Mihail_ 01.04.2008 (Вт) 22:42, всего редактировалось 1 раз.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 01.04.2008 (Вт) 22:36

Нет. Можно воспользоваться регионами. Собственно поищи по форуму по слову "Регион" или "Region".

А вот насчет непрозрачности.. Тут уже труднее.
label:
cli
jmp label

Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Сообщение Mihail_ » 01.04.2008 (Вт) 22:47

отредактировал пост после поиска по форуму :oops:
пока не разобрался в регулировке уровня прозрачности, но в целом метод очень хорош - красивые всплывающие оповещения можно уже делать - даже удивительно что все оказалось так просто.
Еще раз всем спасибо!

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

Сообщение Хакер » 02.04.2008 (Ср) 3:59

Mihail_
Ещё более удивительно то, что всё будет работать только на WinNT5.0+
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

M.A.R.K
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 68
Зарегистрирован: 11.11.2007 (Вс) 11:50
Откуда: Иркутск

Сообщение M.A.R.K » 02.04.2008 (Ср) 9:46

Mihail_, если ты хочешь сделать окно, например, как в Photo Shop или Coral Draw при запуске, то есть с плавными краями (с Анти-Наложением) то вот ссылка:
http://forum.vingrad.ru/faq/topic-158155.html
-Решил Хакер блины печь...
-Первый блин у него вышел, как обычно - Комом...
-А второй - Экзешником...

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

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

M.A.R.K
В фотошопе и кореле (во всяком случае в версиях CS2 и 12 соответственно) обычное квадратное окно, на него сначала копируется фон с ним, а затем поверх него (фона) рисуется картинка с альфа-каналом. Если при этом фон под сплэш-скрином поменяется, вся "квадратность" этого окна сразу будет хорошо видна.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

M.A.R.K
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 68
Зарегистрирован: 11.11.2007 (Вс) 11:50
Откуда: Иркутск

Сообщение M.A.R.K » 03.04.2008 (Чт) 3:57

Хакер писал(а):M.A.R.K
В фотошопе и кореле (во всяком случае в версиях CS2 и 12 соответственно) обычное квадратное окно, на него сначала копируется фон с ним, а затем поверх него (фона) рисуется картинка с альфа-каналом. Если при этом фон под сплэш-скрином поменяется, вся "квадратность" этого окна сразу будет хорошо видна.

Ну тогда понятно. :D
Я раньше думал, что они GDI+ исполльзовали т.к. очень качественно окна сделали...
-Решил Хакер блины печь...
-Первый блин у него вышел, как обычно - Комом...
-А второй - Экзешником...


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 75

    TopList