Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прозрачное неактивное окно [D7, XP]


RMan ©   (2011-02-24 20:50:00) 

Здравствуйте. Подскажите как сделать форму такой, чтобы она была поверх всех окон всех запущенных приложений, прозрачной, неактивной и не реагировала на мышь, фокус получало бы окно, которое находится за этой формой. Что-то типа "трафарета" на мониторе.

Нужен эффект как в этой утилите:
http://majorgeeks.com/Ghost-It_d1128.html
http://majorgeeks.com/screenshot.php?screenshot=1128


RMan   (2011-02-25 01:44:00) [1]

Спасибо, буду пробовать.


v2   (2011-02-24 23:24:00) [2]

/// On Run or WM_CREATE
ExStyle := WS_EX_LAYERED or WS_EX_TOPMOST or WS_EX_TRANSPARENT or WS_EX_TOOLWINDOW;
Style := WS_POPUPWINDOW;
CreateWindowEx(ExStyle,'','',Style, ...
// or GetWindowLong/SetWindowLong

/// On WM_CREATE
SetLayeredWindowAttributes(hWnd,RGB(255,255,255),128,LWA_ALPHA);
RegisterHotKey(hWnd,101,MOD_WIN,0x5A);

/// On WM_HOTKEY  On/Off Input Focus
ExStyle := GetWindowLong(hWnd,GWL_EXSTYLE);
ExStyle := ExStyle xor WS_EX_TRANSPARENT;
SetWindowLong(hWnd,GWL_EXSTYLE,ExStyle);
InvalidateRect(hWnd,NULL,TRUE);
SendMessage(hWnd,WM_PAINT,0,0);


LWoman   (2011-02-24 23:06:00) [3]

procedure TForm1.Button2Click(Sender: TObject);
var
bf : BLENDFUNCTION;
begin
bf.BlendOp := AC_SRC_OVER;
bf.BlendFlags := 0;
bf.AlphaFormat := 0;
bf.SourceConstantAlpha := $7f;
Windows.AlphaBlend(Canvas.Handle, 0, 0, 16, 16,
MyBitmap.Canvas.Handle,
0, 0, 16, 16, bf);
end;


RMan   (2011-02-24 22:56:00) [4]


> поиск окна за формой
> отправка найденному окну всех маус-сообщений
> но лучше всего обойтись без окна, рисуя прямо поверх всех.
>
> только придется отслеживать изменения все окон.


А можно поподробней, как это сделать? Кусок кода для примера...


KilkennyCat   (2011-02-24 21:14:00) [5]

но лучше всего обойтись без окна, рисуя прямо поверх всех.
только придется отслеживать изменения все окон.


KilkennyCat   (2011-02-24 21:02:00) [6]

stayontop,
alphablend
поиск окна за формой
отправка найденному окну всех маус-сообщений


Наверх

Титульная страница Поиск, карта сайта Написать письмо