Да там вообще странно написан код события Class_Initialize: с одной стороны, там есть цикл по переборке ВСЕХ форм проекта ("For Each frm In Forms", а с другой стороны - он написан так, что всегда выполнится только один раз (прямо перед "Next frm" стоит "Exit For"! Чудеса, да и только.
А вообще-то понятно: весь код писался исключительно под одну-единственную форму. По уму, у класса RgnMake надо завести свойство AttachedForm или что-нить типа этого (ну или метод AttachForm [hWnd формы]).
Я так понимаю, ты вторую форму (включённую в этот проект самостоятельно) тоже хочешь "отрисовать"? Если да, то придётся повозиться с кодом, чтобы обеспечить поддержку нескольких форм. Ну а если нет - то просто переделай код вот так:
Private Sub Class_Initialize()
isOk = False
mOnTop = False
mTransparent = 255
Set frm = frmMain
For Each ctl In frm.Controls
If TypeName(ctl) = "PictureBox" Then
Exit For
End If
Next ctl
ctl.AutoRedraw = True
ctl.BorderStyle = 0
ctl.AutoSize = True
End Sub
1 - Удалил событие "Class_Initialize"
2 - добавил новое событие:
Public Function setFRM(frm1 As Form)
Set frm = frm1
isOk = False
mOnTop = False
mTransparent = 255
'Set frm = Form2
For Each ctl In frm.Controls
If TypeName(ctl) = "PictureBox" Then
Exit For
End If
Next ctl
ctl.AutoRedraw = True
ctl.BorderStyle = 0
ctl.AutoSize = True
End Function
И всё! Теперь я могу создавать хоть 20, а то и больше форм и все с разными скинами.
Естественно я и добавил события при "Form_Load"
rmk.setFrm frmMain
глюки глюками а у меня эта прога ваще дает
какието полуразбитые скиноподобные куски формы
ели не опоздал то вот мною собственоручно сделанный модуль.есть возможность задавать цвет маски в RGB. вроди я чтото с ним делал и не доделал но проект пашет нормально хотя притормажевает с начала
вот код
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 CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y 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 Const RGN_OR = 2
Private Function RegionFromBitmap(picSource As PictureBox, Optional lngTransColor As Long) As Long
lngHeight& = picSource.Height / Screen.TwipsPerPixelY
lngWidth& = picSource.Width / Screen.TwipsPerPixelX
lngRgnFinal& = CreateRectRgn(0, 0, 0, 0)
For lngRow& = 0 To lngHeight& - 1
lngCol& = 0
 o While lngCol& < lngWidth&
 o While lngCol& < lngWidth& And GetPixel(picSource.hDC, lngCol&, lngRow& = lngTransColor&
lngCol& = lngCol& + 1
Loop
If lngCol& < lngWidth& Then
lngStart& = lngCol&
 o While lngCol& < lngWidth& And GetPixel(picSource.hDC, lngCol&, lngRow& <> lngTransColor&
lngCol& = lngCol& + 1
Loop
If lngCol& > lngWidth& Then lngCol& = lngWidth&
lngRgnTmp& = CreateRectRgn(lngStart&, lngRow&, lngCol&, lngRow& + 1)
lngRetr& = CombineRgn(lngRgnFinal&, lngRgnFinal&, lngRgnTmp&, RGN_OR)
 eleteObject (lngRgnTmp&
End If
Loop
Next
RegionFromBitmap& = lngRgnFinal&
End Function
Public Sub SetSkin(Form As Form, Picture As PictureBox, ColorRed As RGB, ColorGreen As RGB, ColorBlue As RGB)
On Error Resume Next
 im lngRetr As Long
lngRegion& = RegionFromBitmap(Picture, RGB(ColorRed, ColorGreen, ColorBlue))
lngRetr& = SetWindowRgn(Form.hWnd, lngRegion&, True)
End Sub
Приколько... это я когда-то писал, мне на самом деле не приходило в голову, что кому-то понадобится несколько форм перерисовать. В этом смысле лучше использовать _контрол_ (был и такой) RgnMake - он здесь на сайте с исходниками. Там такой проблемы быть не должно, хотя и его может понадобится кому-то под себя переделывать. Например, если пишет под Win98 там нет анализа используемой операционки - ошибка 1. Кто-то захочет грузить картинки из ресурсов - надо переделать - ошибка 2. Кстати, вырезать регион произвольной формы очень легко, я бы обошелся без контрола/класса. Насчет быстродействия: алгоритм очень тормозной, быстрее не сделать на VB, хотите разогнать - учите Assembler (кстати, там есть не один готоавый исходник на эту тему www.wasm.ru). Особенно заметно на огромных формах, которые часто перерисовываются.
2 magish, Comanche, Alexsandr:
Спасибо! Все пожелания учтутся... Вот только приспособить бы алгоритм Asm под VB!..
И еще меня как то переклинило
тут недавно скачал по ссылкам с какого то
сайта прогу для вырезания форм каой хотите формы
три клика по форме (может больше) и четвертый в меню и форма аля исходник на экране очень удобно для примерной подгонки регионов, а далее
можно и ручками в код.если надо то могу намылить.