Может кому надо!
Пример формирования прозрачной формы.
Работает в Windows 2000 и выше. В Windows 98 обычная форма.
Сделано на основе статьи
http://ufps.chukotka.ru/~jm/gamedev.chat.ru/articles/a0036.html #include "minigui.ch"
Function Main()
nTra:=100
DEFINE WINDOW WinTr AT 0,0 WIDTH 300 HEIGHT 300 TITLE 'Прозрачное окно' ;
MAIN NOSIZE NOMAXIMIZE
@ 200,100 BUTTON But1 CAPTION "Нажми" HEIGHT 35 WIDTH 100;
ACTION (IIF(nTra=100,nTra:=255,ntra:=100) , SetTransparent(hWnd,nTra) )
END WINDOW
WinTR.Center
hWnd=GetFormHandle('WinTR')
SetTransparent(hWnd,nTra)
ACTIVATE WINDOW WinTR
RETURN
#pragma BEGINDUMP
#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400
#define WS_EX_LAYERED 0x80000
#define LWA_ALPHA 0x02
#define GWL_EXSTYLE (-20)
#include <windows.h>
#include "hbapi.h"
#include<stdio.h>
#include<string.h>
#include<shellapi.h>
HB_FUNC( SETTRANSPARENT)
{
typedef BOOL (__stdcall *PFN_SETLAYEREDWINDOWATTRIBUTES)(HWND,COLORREF,BYTE,DWORD);
PFN_SETLAYEREDWINDOWATTRIBUTES pfnSetLayeredWindowAttributes = NULL;
HINSTANCE hLib = LoadLibrary("user32.dll");
if (hLib != NULL)
{
pfnSetLayeredWindowAttributes = (PFN_SETLAYEREDWINDOWATTRIBUTES)GetProcAddress(hLib,"SetLayeredWindowAttributes");
}
if (pfnSetLayeredWindowAttributes)
{
SetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE,GetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE) | WS_EX_LAYERED);
pfnSetLayeredWindowAttributes((HWND) hb_parnl (1), 0, hb_parni (2), LWA_ALPHA);
}
if (!hLib)
{
FreeLibrary(hLib);
}
}
#pragma ENDDUMP