Все про Интернет
       (N 384) 2011 - 2012
        << Архив передач >>
 Логин:  Пароль:
[регистрация]     запомнить 
 Поиск по сайту:
[Сайты зрителей] [Рейтинг] [Статьи] [Форум] [Блог] [Киберспорт] [Конкурсы] [О передаче]
 

API. Анимация в трее

raxp@mail.zp.ua

Попался мне как- то драйвер от одной мыши. И в трее скоро зажил зверек, следящий за любыми перемещениями. Как бы нам такое?

Краткий экскурс...

Конечно, можно взять готовый компонент, создать в любом редакторе набор картинок, напихать иконок и показывать в определенной последовательности…

 

Этот метод хорош для быстрой разработки, но динамическую индикацию можно осуществить и по другому… Как? На API

Решение

Создание формы на WinAPI опускаем - это не наша цель, при желании все же взглянуть пожалуйте сюда

http://ra-xp.narod.ru/zip/fap.zip

Можно нарисовать bitmap-ы (AndMask, XOrMask), а потом воспользоваться свойствами маски иконки и поместить на нее наши картинки… следует учесть, что размер bitmap не должен превышать 32x32 pix.

Icon:= TIcon.Create;

IconInfo.fIcon := true;

IconInfo.hbmMask := AndMask.Handle;

IconInfo.hbmColor:= XOrMask.Handle;

Icon.Handle:= CreateIconIndirect(IconInfo);

AndMask.Free;

Как же отследить перемещения мыши и получить угловые координаты? Координаты получить легко, функция getcursorpos(t). А угол наклона?

Вспомним школьную программу - теорему синусов и Пифагора:

Если w, h – ширина, высота экрана в пикселах, то стороны нашего треугольника

a:= h - t.Y;

b:= w - t.X;

c:= sqrt((a*a)+(b*b));

а угол соответственно

ug:= trunc(180*ArcSin(a/c)/pi);

дальше проще, раз мы можем рисовать на bitmap-е, то можем и реализовать что-то вроде ИКО (индикатора кругового обзора), указывающий на нашу мышку:

x:= 16+trunc(16*sin((ug+270)*pi/180));

y:= 16-trunc(16*cos((ug+270)*pi/180));

XOrMask.Canvas.MoveTo(16,16); //ИКО

XOrMask.Canvas.LineTo(x, y);

и собственно, то ради чего это задумывалось:

//простейший алгоритм анимации-

if (20>ug)and(ug>0) then begin x:= 5; y:= 16; end else

if (40>ug)and(ug>20) then begin x:= 7; y:= 7; end else

if (60>ug)and(ug>40) then begin x:= 8; y:= 5; end else

if (80>ug)and(ug>60) then begin x:= 9; y:= 7; end else

if (100>ug)and(ug>80) then begin x:=11; y:= 16; end;

if (a<25)and(b<150) then begin x:= 8; y:= 16; end;

AndMask.Canvas.Ellipse(0,0,14,32); //глаз

AndMask.Canvas.Ellipse(18,0,32,32);

XOrMask.Canvas.Ellipse(x-r,y-r,x+r,y+r); //зрачок //r- радиус зрачка

XOrMask.Canvas.Ellipse(x-r+16,y-r,x+r+16,y+r);

Помещаем наше чудо в трей и по таймеру обновляем:

Shell_NotifyIcon(NIM_ADD,@no);

Shell_NotifyIcon(NIM_MODIFY,@no);

procedure Ontmr2(uTimerID, uMessage: uint;dwUser, dw1, dw2: dword) stdcall;

begin

see_tray(handle, hint, true)

end;

 … теперь и у нас тотальная слежка под нашим контролем .

Ссылки:

Контактная информация:

raxp@mail.zp.ua

26.04.2006


[Переход к списку статей]

 
 

[Видеоархив]

Передача создана дизайн-студией Conus Video
По вопросам размещения рекламы или информации в передаче Internet@Mania пишите imania@mail.zp.ua, или звоните
8(0612)63-80-84


Share |
 
 


Провайдеры Запорожья
zp-provider.narod.ru
providers.portall.zp.ua
Домовые сети
linet.zp.ua
setka.zp.ua
biscom.zp.ua
homenet.zp.ua
www.16x.zp.ua
www.ss.zp.ua
www.skynet.zp.ua
www.watson.zp.ua
www.link.zp.ua
www.kichkas.net
www.neuro.zp.ua
innkom.zp.ua
Каталоги Запорожья
www.otvet.zp.ua
www.portall.zp.ua
www.zaporozhye.org
www.spravka.zp.ua
Форумы
www.forumzone.zp.ua
forum.mail.zp.ua
forum.tinet.zp.ua
forum.nulled-warez.org
forum2.biscom.zp.ua
myforum.net.ua
forum.ru-board.com
forstud.org.ua
Чаты
chatzone.zp.ua
4at.zp.ua
chatinet.zp.ua
chatik.zp.ua
Компьютерные сайты
www.ixbt.com
www.techlabs.ru
www.thg.ru
www.overclockers.ru
Игровые сайты
www.games.zp.ua
www.ag.ru
www.gamemag.ru
www.uaplay.com
www.gameg.info
Журналы
www.seti.com.ua
www.cpp.com.ua
www.shpil.com
www.chip.ua
Блоги
revolver.ru
dirty.ru
photoblog.ru
www.autoblog.ru

 
    Передача создана дизайн-студией Conus Video
    По вопросам размещения рекламы или информации в передаче Internet@Mania пишите нам imania@mail.zp.ua, или звоните 8(0612)63-80-84