Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с функцией API 
:(
    Опции темы
SOY
  Дата 21.11.2004, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 30.10.2004

Репутация: 1
Всего: 1



Пожалуйста.подскажите как пользоваться CombineRgn.
Что -то у меня ни чего ни выходит. После того как вставляю все в SetWindowRgn. форма имеет вид второго региона.
PM MAIL   Вверх
cardinal
Дата 21.11.2004, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99





--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
SOY
Дата 21.11.2004, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 30.10.2004

Репутация: 1
Всего: 1



Спасибо, cardinal !!!
PM MAIL   Вверх
Mephisto
  Дата 22.11.2004, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Тебе сачала необходимо создать регион и на основе уже существующего применить фунцию комбин.
Так на примерsmileсейчас нет ВБ, пишу вслепую)
Код
Dim R,R1
R=CreateRectRgn(0,0,200,200)
R1=CreateEllipticRgn(10,10,50,50)
CombineRgn(r,r,r1,...)'Tuta ne pomnu chto nado napisat'
SetWindowRgn Me.hWnd,R,FALSE

PM   Вверх
Mephisto
Дата 23.11.2004, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Переписываю код:
Код
Private Sub Form_Load()
   Dim R,R1
   R=CreateRectRgn(0,0,200,200)
   R1=CreateEllipticRgn(10,10,50,50)
   R=CombineRgn(r,r1,RGN_XOR)
   SetWindowRgn Me.hWnd,R,TRUE
End Sub

PM   Вверх
cardinal
Дата 24.11.2004, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



У меня Mephisto твой вариант немного поругался и пришлост переделать строку:
Код

CombineRgn R, R, R1, RGN_XOR

Получилось:
Код

Option Explicit
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Const RGN_XOR = 3

Private Sub Form_Load()
  Dim R, R1
  R = CreateRectRgn(0, 0, 200, 200)
  R1 = CreateEllipticRgn(10, 10, 50, 50)
  CombineRgn R, R, R1, RGN_XOR
  SetWindowRgn Me.hWnd, R, True
End Sub

А так классно! smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Exception
Дата 27.12.2004, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



Тогда лучше не
Код
Dim R,R1
а
Код
Dim R As Long,R1 As Long
, а то этот Variant достал меня по уши smile
PM   Вверх
Gannibal
Дата 9.1.2005, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: 18
Всего: 17



нашёл вот такую АПИ функцию

Код

Const PS_DOT = 2
Const PS_SOLID = 0
Const RGN_AND = 1
Const RGN_COPY = 5
Const RGN_OR = 2
Const RGN_XOR = 3
Const RGN_DIFF = 4
Const HS_DIAGCROSS = 5
Private Type POINTAPI
   x As Long
   y As Long
End Type
Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type
Private Type LOGPEN
   lopnStyle As Long
   lopnWidth As POINTAPI
   lopnColor As Long
End Type

Private Declare Function CreateHatchBrush Lib "gdi32" (ByVal nIndex As Long, ByVal crColor As Long) As Long

Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long

Private Declare Function CreatePenIndirect Lib "gdi32" (lpLogPen As LOGPEN) As Long

Private Declare Function CreateRectRgnIndirect Lib "gdi32" (lpRect As RECT) As Long

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As
Long, ByVal X3 As Long, ByVal Y3 As Long) As Long

Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long,
phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long

Private Declare Function FloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As
Long

Private Declare Function FrameRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long

Private Declare Function FrameRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long, ByVal nWidth As
Long, ByVal nHeight As Long) As Long

Private Declare Function InvertRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long) As Long

Private Declare Function OffsetRgn Lib "gdi32" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long

Private Declare Function Pie Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As
Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long

Private Declare Function Rectangle 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 RoundRect Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal
Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long

Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2
As Long) As Long

Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long,
ByVal nCombineMode As Long) As Long

Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long

Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long

Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As
Long

Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long

Private Sub Form_Load()
   Me.ScaleMode = vbPixels
End Sub
Private Sub Form_Paint()
   Dim hHBr As Long, R As RECT, hFRgn As Long, hRRgn As Long, hRPen As Long, LP As LOGPEN
   Dim hFFBrush As Long, mIcon As Long, Cnt As Long
   'Clear the form
   Me.Cls
   'Set the rectangle's values
   SetRect R, 0, 0, Me.ScaleWidth, Me.ScaleHeight
   'Create a new brush
   hHBr = CreateHatchBrush(HS_DIAGCROSS, vbRed)
   'Draw a frame
   FrameRect Me.hdc, R, hHBr
   'Draw a rounded rectangle
   hFRgn = CreateRoundRectRgn(0, 0, Me.ScaleWidth, Me.ScaleHeight, (Me.ScaleWidth / 3) * 2, (Me.ScaleHeight / 3) * 5)
   'Draw a frame
   FrameRgn Me.hdc, hFRgn, hHBr, Me.ScaleWidth, Me.ScaleHeight
   'Invert a region
   InvertRgn Me.hdc, hFRgn
   'Move our region
   OffsetRgn hFRgn, 10, 10
   'Create a new region
   hRRgn = CreateRectRgnIndirect(R)
   'Combine our two regions
   CombineRgn hRRgn, hFRgn, hRRgn, RGN_XOR
   'Draw a frame
   FrameRgn Me.hdc, hRRgn, hHBr, Me.ScaleWidth, Me.ScaleHeight
   'Crete a new pen
   hRPen = CreatePen(PS_SOLID, 5, vbBlue)
   'Select our pen into the form's device context and delete the old pen
   DeleteObject SelectObject(Me.hdc, hRPen)
   'Draw a rectangle
   Rectangle Me.hdc, Me.ScaleWidth / 2 - 25, Me.ScaleHeight / 2 - 25, Me.ScaleWidth / 2 + 25, Me.ScaleHeight / 2 + 25
   'Delete our pen
   DeleteObject hRPen
   LP.lopnStyle = PS_DOT
   LP.lopnColor = vbGreen
   'Create a new pen
   hRPen = CreatePenIndirect(LP)
   'Select our pen into the form's device context
   SelectObject Me.hdc, hRPen
   'Draw a rounded rectangle
   RoundRect Me.hdc, Me.ScaleWidth / 2 - 25, Me.ScaleHeight / 2 - 25, Me.ScaleWidth / 2 + 25, Me.ScaleHeight / 2 + 25, 50, 50
   'Create a new solid brush
   hFFBrush = CreateSolidBrush(vbYellow)
   'Select this brush into our form's device context
   SelectObject Me.hdc, hFFBrush
   'Floodfill our form
   FloodFill Me.hdc, Me.ScaleWidth / 2, Me.ScaleHeight / 2, vbBlue
   'Delete our brush
   DeleteObject hFFBrush
   'Create a new solid brush
   hFFBrush = CreateSolidBrush(vbMagenta)
   'Select our solid brush into our form's device context
   SelectObject Me.hdc, hFFBrush
   'Draw a Pie
   Pie Me.hdc, Me.ScaleWidth / 2 - 15, Me.ScaleHeight / 2 - 15, Me.ScaleWidth / 2 + 15, Me.ScaleHeight / 2 + 15, 20, 20, 20, 20
   'Extract icons from 'shell32.dll' and draw them on the form
   For Cnt = 0 To Me.ScaleWidth / 32
       ExtractIconEx "shell32.dll", Cnt, mIcon, ByVal 0&, 1
       DrawIcon Me.hdc, 32 * Cnt, 0, mIcon
       DestroyIcon mIcon
   Next Cnt
   'Clean up
   DeleteObject hFFBrush
   DeleteObject hRPen
   DeleteObject hRRgn
   DeleteObject hFRgn
   DeleteObject hHBr
End Sub
Private Sub Form_Resize()
   Form_Paint
End Sub


Это сообщение отредактировал(а) M.E.G.U.S - 9.1.2005, 13:00


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.