1. Есть проблема: нужно постоянно следить за открытыми окнами в системе. Пробовал создавать отдельный поток для этого, но система работает нестабильно, да и команды типа DoEvents не выполняются - слетает, API-Timer работает, но когда форма теряет фокус, слежение прекращается, то же самое с таймером в VB. Таймер создаю так: SetTimer 0, 0, 50, AddressOf ScanWindows. Может, я что-то не так пишу, или есть другой способ? Подскажите, пожалуйста! 2. Для придания форме нужной формы использую AutoFormShape (может быть вам известна по WindowsXPControls). Привожу ее код: --------------- Public Function AutoFormShape(bg As Form, transColor) Dim X, Y As Integer CurRgn = CreateRectRgn(0, 0, bg.ScaleWidth, bg.ScaleHeight) ' Create base region which is the current whole window While Y <= 5 ' Go through each column of pixels on form While X <= bg.ScaleWidth ' Go through each line of pixels on form If GetPixel(bg.hdc, X, Y) = transColor Then ' If the pixels color is the transparency color (bright purple is a good one to use) TempRgn = CreateRectRgn(X, Y, X + 1, Y + 1) ' Create a temporary pixel region for this pixel success = CombineRgn(CurRgn, CurRgn, TempRgn, 4) ' Combine temp pixel region with base region using RGN_DIFF to extract the pixel and make it transparent DeleteObject (TempRgn) ' Delete the temporary pixel region and clear up very important resources End If X = X + 1 Wend Y = Y + 1 X = 0 Wend success = SetWindowRgn(bg.hWnd, CurRgn, True) ' Finally set the windows region to the final product DeleteObject (CurRgn) ' Delete the now un-needed base region and free resources ' This code is by Chris Yates (1999) End Function ------------ Когда у меня стоял Windows 98, все было ОК, сейчас у меня Windows 2000, и участки, которые должны быть прозрачными, остаются видимыми. В чем же дело??
Ответить
|