• •
Дельфин
в
иллюминаторе
|р р
Сергей ПАРИЖСКИЙ
Все мы привыкли к прямоугольным окнам приложений. Попробуем написать программу для W in-
dows, окна которой будут далеки от принятого стандарта. Как всегда, поможет нам в этом Delphi.
Д
ля начала изменим форму окна — сделаем его круглым.
Создайте новую форму и событие
O n c re a te
в ней. С ра-
зу объявите переменную
Form a
как
h r g n ,
оно будет со-
держать область в виде эллипса. После
b e g in
напиши-
те следующий код:
f o r m a := C r e a t e E l lip t i c R g n (0 , 0 , f o r m l.w id t h , f o r m l.
h e i g h t ) ;
S e tW in d o w R g n ( f o r m l.h a n d le , fo rm a , t r u e ) ;
После запуска программы вместо привычного прямоуголь-
ника вы увидите эллипс. В первой строке мы присваиваем
ношей переменной значение W inA pi-функции
C r e a t e E l l i p -
t ic R g n ,
которая создает область в виде эллипса. О но при-
нимает следующие значения: левая позиция, верхняя, п р о -
воя, нижняя. Во второй строке W înApi-функция
SetW indow Rgn
принимает значения ука за те л ь о кн а , область, п е р е р и с о в ка
о кн а . Первый параметр — это указатель но окно, которое
надо изменить; у нос это формо. Второй параметр — о б -
ласть, которую мы получили из первой строки. Третий может
принимать два значения — tru e , если надо перерисовать ок-
но, и fa lse в противном случае. Если вы выбрали fa lse , то в
лю бой момент сможете перерисовать ф орму, написав
fo r m l. r e p a in t. Попробуйте поиграть параметрами и по-
добрать нужные формы.
Теперь сделаем в окне несколько дырок разной формы,
чтобы через них можно было видеть, что происходит 30 о к-
ном. Замените имеющийся код следующим:
v a r
E l l i p s , fo rm a : HRGN;
b e g in
fo rm a : = C r e a t e E l l i p t i c R g n (О , О , f o r m l .W id t h , f o r m l.
H e i g h t ) ;
e l l i p s : = C re a te R e c tR g n ( f o r m l .w i d t h d i v 2 , f o r m l .
h e ig h t d i v 2 ,
f o r m l .W id t h , f o r m l . H e ig h t ) ;
C o m b in e R g n (fo rm a , fo rm a , e l l i p s ,R G N _ D I F F ) ;
S e tW in d o w R g n <h a n d le , fo rm a , t r u e ) ;
e n d ;
К ак видим, код очень изменился — введена новая пере-
м енная
E l l i p s ,
которая будет содерж ать в себе обл асть о т-
верстия. Вначале мы зад ае м координаты эллиптического ок-
на, затем координаты области, которой не будет. П осл е о п -
ределения коорд и нат
мы
вы зы ваем W in A p i-ф ункцию С о т -
b in e R g n
с порам етрам и (область с результатом всех дейст-
вий, первая обл асть для ком бинирования, вторая область,
тип ком бинирования). П р и типе ком бинирования
r g n _ d i f f
удаляется вторая обл асть из первой. Вот какие типы ком би-
нирования вы м ожете использовать:
•S
RGN
a n
— обл асть перекрывания;
•S
RGN COPY
— копия первой области;
■S
RGN OR
— объединение областей;
•S
r g n _ x o r
— объединение областей, исключая все пере-
сечения.
Зам ени те строку
e l l i p s : = C re a te R e c tR g n ( f o r m l . w id t h d i v 2 , f o r m l .
h e ig h t d i v 2 , f o r m l.W id t h , f o r m l .H e i g h t ) ;
на
e llip s := C r e a t e R e c t R g n (1 0 0 , 1 0 0 , 3 0 0 , 200);
Если вы э ксп е р и м е н ти р о вал и с ф о р м ам и о кн а, то, н а -
вер ное, зам ети те, что иногда за го л о в о к о к н а не виден, и
мы не м ож ем его перетащ ить. Для то го чтобы у б р а ть з а -
гол овок о кн а, в свой стве ф орм ы
B o r d e r S t y l e
п о ставьте
зн ач е н и е
b sN o n e .
Т еперь н ап и ш е м код пер е таски ван и я
окна. Для н а ч а л а в разд е л е t y p e д опи ш и те в кон е ц п р о -
цедуру:
p r o c e d u re D r u g D r o p (v a r d r : T W M N C H itT e s t); m essage
w m _ N C H itT e s t;
Э т о собы тие ф ормы происходит, когда мы по ней клика-
ем. Д алее надо, чтобы при этом событии ф орм а меняла м е-
стополож ение — для этого в теле програм м ы о б р а б а ты в а е м
это собы тие и пиш ем следую щ ую процедуру:
p r o c e d u re T F o r m l.D r u g D r o p (v a r d r : T W M N C H itT e s t);
b e g in
i n h e r i t e d ;
i f d r .R e s u l t = h t c l i e n t th e n
d r .R e s u l t := h t C a p t i o n ;
e n d ;
С н а ч а л а мы проверяем: если щ елчок был по области ф ор-
мы, тогда мы убеж даем програм м у в том, что он был сделан
не где-нибудь, а на ее заголовке. Д алее ничего писать не
надо, так как если это заголовок, то окно будет перетаски-
ваться и так.
..
Теперь давайте рассм отрим м одную штуку — прозрачны е
окна. Все почем у-то думаю т, что создать окно, которое б у-
дет п р о зр ачн о на 4 7 % , слож но — но на сам ом деле это толь-
ко кажется. Чтобы сделать свое окно прозрачны м или полу-
прозрачны м , достаточно установить свойство главной ф ор-
мы
A lp h a B le n d
равны м
true.
П осл е этого мы смож ем регу-
лировать прозр ачность ф орм ы с пом ощ ью свойства
A i p h -
a B le n d v a lu e ,
которое может принимать значения от 0 до 255.
Если 0, то ф орм а на 1 0 0 % п р о зр ач н а (невидима), 2 5 5 —
обы чное н е п р озр ачн ое окно, и, как нетрудно догадаться, е с-
ли выставить значение в 127, ф орм а будет п р о зр ачн а на
5 0 % . Как видите, п од обр ать степень прозрачности совсем
несложно, вам даж е не приш лось кодить. М о ж н о бросить на
ф орм у тайм ер из вкладки
System
и плавно изменять п р о зр ач -
ность или написать следую щ ий код для плавного изменения
прозр ачн ости формы:
v a r
i : i n t e g e r ;
b e g in
i : =1;
w h ile i< 2 5 5 d o b e g in
i : = i + l ;
f o r m l. A lp h a B 1e n d V a lu e : = i ;
i f i= 2 5 5 th e n b e g in
r e p e a t
i : = i - l ;
f o r m l . A lp h a B 1e n d V a lu e : = i ;
u n t i l i < l ;
e n d ;
e n d ;
e n d ;
Здесь два цикла: первый — w h ile — плавно меняет ф о р -
му о т невидимой д о соверш енно непрозрачной. Д алее сле-
дует проверка, и если ф орм а сов е р ш е нн о непрозрачна, то
ночинается второй цикл — r e p e a t .
..u n t il, который плавно
п р е в р ащ ае т ф орм у в аб с о л ю тн о прозрачную . Так как вто-
рой цикл является вложенным, то этот процесс будет прои с-
ходить бесконечно, но при ж елании вы м ож ете вставить о п е -
р ато р b r e a k — для преры вания цикла.
В статье а в то р привел все известны е ем у с п ос о б ы п о -
издеваться над окнам и © — но, дум аем , пытливый ум н а -
ш их читателей о тк р о е т н ем ал о новых возм ож ностей в этой
области.
№ 40/315 04 октября-11 октября 2004
предыдущая страница 38 Мой Компьютер 2004 40 читать онлайн следующая страница 40 Мой Компьютер 2004 40 читать онлайн Домой Выключить/включить текст