Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Окно в форме/виде элементов управления на нем Добавлено: 03.11.06 19:35  

Автор вопроса:  -АлександР- | Web-сайт: sham.clan.su
Если кто понял, то возможно ли это?
И какими АПИ?

Ответить

  Ответы Всего ответов: 32  

Номер ответа: 1
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #1 Добавлено: 03.11.06 20:51
Че-та до меня не допёрло... :)

Ответить

Номер ответа: 2
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 03.11.06 23:27
:)
Ну вобщем... На форме лежит кнопка, линия, не важно... какие нибудь ещё компоненты.
И нужно, чтобы окно(то бишь форма) приняла форму этих контролов. (по их контуру)

Ответить

Номер ответа: 3
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #3 Добавлено: 04.11.06 10:17
аа, дык это прозрачность :) ищи на сайте 5 примеров прозрачности

Ответить

Номер ответа: 4
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #4
Добавлено: 04.11.06 12:35
Нееее... не прозрачность. Прозрачность - это прозрачность. Мой же вопрос к теме Окно произвольной формы.
Так вот, оно должно стать формы расположенных на нем контролов.

Конечно это похоже на реализацию прозрачности - с виду. Но если желать окно прорачным, то оно будет все равно воспринимать события клик, mousedown и так далее...
Именно в этом отличие

Ответить

Номер ответа: 5
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #5 Добавлено: 04.11.06 15:43
Мой же вопрос к теме Окно произвольной формы.

Ну а как по-твоему делаются окна произвольной формы? :) Либо задают ключевой цвет, и по нему устанавливают прозрачность формы, либо через всякие API для работы с регионами *Rgn()

Ответить

Номер ответа: 6
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #6
Добавлено: 04.11.06 16:17
Ну а как по-твоему делаются окна произвольной формы?
Так:)
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long


либо через всякие API для работы с регионами *Rgn()
Только ими :)

Собст-но вопос в том, есть ли ф-ции для того,чтобы превратить в регион контуры контролов на форме, или то, что на ней нарисовано (ещё лучше)?

Ответить

Номер ответа: 7
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #7
Добавлено: 04.11.06 16:52
Ненене... Я, блин, где то это находил, короче, такой контрол, кидаешь его на форму и она становится прозрачной, а контролы на ней остаются.

Ответить

Номер ответа: 8
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #8
Добавлено: 04.11.06 17:15
Нашел!
http://virusgod.narod.ru/activex/transparent.zip

Ответить

Номер ответа: 9
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #9
Добавлено: 04.11.06 17:15
Кидаешь на форму и все.

Ответить

Номер ответа: 10
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #10
Добавлено: 04.11.06 17:28
А классная штучка. Спасибо, VBD!


Прошу прощения, мне бы исходники :)))))
заглянуть интересно, всё таки ж написали люди
В л/сл благодарю. Если самому такой повторить не получится, то буду использовать эту :)

Ответить

Номер ответа: 11
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #11
Добавлено: 04.11.06 17:30
Готов поспорить с Sacred Phoenix, что при написании этого примера использовали не
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 Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
:)

Ответить

Номер ответа: 12
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #12
Добавлено: 04.11.06 17:52
Ладно, заканчиваю... прошу прощения за выпендрежь и неконкретную формулировку задачи.
У меня такая проблема. Везде куда не гляну примеры произвольной формы типа этого:http://vbkoders.info/faqans-4-28.html
BeginPath hdc
CurrentX = 0
CurrentY = 0
Print TXT

' Здесь вместо текста можно рисовать фигуры
EndPath hdc


И везде написано, что
' Здесь вместо текста можно рисовать фигуры
Как это делать?

У мня не получается. Я делаю так:
    dl = BeginPath(vDC)
    Call TextOut(vDC, 107, 60, "фвы", 5)
    Call MoveToEx(vDC, 0, 0, f)
    Call LineTo(vDC, 100, 100)
    dl = EndPath(vDC)

Текст печатает. А линию чертить не хочет???

Заранее спасибо

Ответить

Номер ответа: 13
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #13
Добавлено: 04.11.06 17:58

'Функции API для изменения контура формы
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As Coordinates, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Type Coordinates
X As Long
Y As Long
End Type
Dim XY() As Coordinates

'Переменная для переноса окна
Dim cdrMoving As Coordinates
'Форма меняет свой внешний вид
Private Sub Form_Load
'  Переменная, в которую запишем область формы
Dim hRgn As Long

' Массив углов формы
ReDim XY(7) As Coordinates
'  Заполняем массив значениями
XY(0).X = 98
XY(0).Y = 335

XY(1).X = 428
XY(1).Y = 48

XY(2).X = 633
XY(2).Y = 203

XY(3).X = 436
XY(3).Y = 356

XY(4).X = 303
XY(4).Y = 263

XY(5).X = 169
XY(5).Y = 392

XY(6).X = 97
XY(6).Y = 338

XY(7).X = 98
XY(7).Y = 335

' Генерируем соответствующий полигон
hRgn = CreatePolygonRgn(XY(0), 7, 2)
'  И меняем форму окна
Call SetWindowRgn(Me.hWnd, hRgn, True)
'Окно меняет свои размеры
Me.Width = 11595
Me.Height = 10065
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
cdrMoving.X = X: cdrMoving.Y = Y
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Me.Left = X + Me.Left - cdrMoving.X
Me.Top = Y + Me.Top - cdrMoving.Y
End If
End Sub

Подобная бадяга

Ответить

Номер ответа: 14
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #14
Добавлено: 04.11.06 18:15
ну я с CreatePolygonRgn работал, только если брать считывать все все координаты лежащих на форме контролов, а потом присваивать ... - не вариант короче. Нужно именно, чтобы принимала форму изображения на форме.

Ответить

Номер ответа: 15
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #15
Добавлено: 04.11.06 19:08
IDEA!

Вощем так, -АлександР-, бери цикл For Each и скрытый пиктурабокс с белым фоном. Циклом на пиктурабоксе нарисуй черные прямоугольники, которые соответствуют видимым элементам управления на форме. Далее апишками опрозрачнивай форму с помощью получившейся картинки (непомню какими апишками :), но есть какая-то, что заданный цвет превращяет в прозрачный).

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам