Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Delphi. Π’Ρ€ΡŽΠΊΠΈ ΠΈ эффСкты». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 2

Автор Π’Π°Π»Π΅Ρ€ΠΈΠΉ Борисок

Рассмотрим Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ способ ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ внимания ΠΊ ΠΎΠΊΠ½Ρƒ прилоТСния. Он базируСтся Π½Π° использовании API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetForegroundWindow. Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ СдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ – дСскриптор ΠΎΠΊΠ½Π°. Если выполняСтся ряд условий, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ дСскриптором Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π² это ΠΎΠΊΠ½ΠΎ. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΊΠ½ΠΎ активизируСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ срабатывании Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° (листинг 1.4).

...

Листинг 1.4.

Активизация ΠΎΠΊΠ½Π°

procedure TForm1.Timer1Timer(Sender: TObject);

begin

SetForegroundWindow(Handle);

end;

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΡΡ‚Π°Ρ€ΡˆΠ΅ Windows 95 ΠΈ Windows NT 4.0 Π²Π²Π΅Π΄Π΅Π½ ряд ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° дСйствиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetForegroundWindow. Π’Π°ΠΊ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· случаСв нСдруТСствСнного использования Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π°, Π½ΠΎ это всСго лишь ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π§Ρ‚ΠΎΠ±Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, процСсс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π΅ΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссом с Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ, ΠΈ Ρ‚. ΠΏ. ВсС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π½ΡŽΠ°Π½ΡΡ‹ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡŽΠΊΠ° Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² случаС, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, автоматичСски вызываСтся функция FlashWindow для ΠΎΠΊΠ½Π° прилоТСния (заставляСт ΠΌΠΈΠ³Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ этого прилоТСния Π½Π° ПанСли Π·Π°Π΄Π°Ρ‡). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetForegroundWindow ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠΈ, Π½Π΅ останСтся Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌ.

1.2. Окно прилоТСния

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ прилоТСния, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅, располоТСнной Π½Π° ПанСли Π·Π°Π΄Π°Ρ‡, совпадаСт Π² Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Application Π΄ΠΈΠ°Π»ΠΎΠ³Π° Project options, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ мСню Project β†’ Options), Π½ΠΎ Π½Π΅ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ прилоТСния. ВзглянитС Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² DPR-Ρ„Π°ΠΉΠ»Π΅ (нСсущСствСнная Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΡƒΡ‰Π΅Π½Π°).

...

program…

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

Π’ конструкторС класса TApplication, экзСмпляром ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся глобальная пСрСмСнная Application (Π΅Π΅ объявлСниС находится Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Forms), происходит нСявноС созданиС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ этого ΠΎΠΊΠ½Π° отобраТаСтся Π½Π° ПанСли Π·Π°Π΄Π°Ρ‡ (кстати, этот Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства Title ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Application). ДСскриптор Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ свойства Handle ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Application.

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния дСлаСтся Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ (Π΅ΠΌΡƒ задаСтся нулСвая высота ΠΈ ΡˆΠΈΡ€ΠΈΠ½Π°), Ρ‡Ρ‚ΠΎΠ±Ρ‹ создавалась иллюзия Π΅Π³ΠΎ отсутствия ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ являСтся ΠΈΠΌΠ΅Π½Π½ΠΎ создаваСмая ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°.

Для подтвСрТдСния Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ (листинг 1.5).

...

Листинг 1.5. ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ прилоТСния

procedure TForm1.Button1Click(Sender: TObject);

begin

SetWindowPos(Application.Handle, 0, 0, 0, 200, 100,

SWP_NOZORDER or SWP_NOMOVE);

end;

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΡˆΠΈΡ€ΠΈΠ½Π° ΠΎΠΊΠ½Π° станСт Ρ€Π°Π²Π½ΠΎΠΉ 200, Π° высота – 100, ΠΈ ΠΌΡ‹ смоТСм ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΎΠΊΠ½Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅) фокус Π²Π²ΠΎΠ΄Π° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ пСрСдаСтся созданной ΠΏΠ΅Ρ€Π²ΠΎΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π³Π»Π°Π²Π½ΠΎΠΉ, Ρ„ΠΎΡ€ΠΌΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡ‚Π°Ρ‚ΡŒ понятно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ ΠΌΠΈΠ³Π°Π»Π° ΠΊΠ½ΠΎΠΏΠΊΠ° прилоТСния ΠΏΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ FlashWindow ΠΈΠ»ΠΈ FlashWindowEx. НСдостаток этот ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (листинг 1.6).

...

Листинг 1.6.

МиганиС ΠΊΠ½ΠΎΠΏΠΊΠΈ прилоТСния Π½Π° ПанСли Π·Π°Π΄Π°Ρ‡

procedure TForm1.Button2Click(Sender: TObject);

var

fl: FLASHWINFO;

begin

fl.cbSize:= SizeOf(fl);

fl.hwnd:= Application.Handle;

fl.dwFlags:= FLASHW_ALL;

fl.uCount:= 10;

fl.dwTimeout:= 200;

FlashWindowEx(fl);

end;

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π° прилоТСния. Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² листинг 1.5. НаконСц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ мигания ΠΊΠ½ΠΎΠΏΠΊΠΈ прилоТСния Π½Π° ПанСли Π·Π°Π΄Π°Ρ‡ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„ΠΎΡ€ΠΌΡ‹ (ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ листинг 1.7.

...

Листинг 1.7.

МиганиС ΠΊΠ½ΠΎΠΏΠΊΠΈ прилоТСния ΠΈ инвСрсия Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„ΠΎΡ€ΠΌΡ‹

procedure TForm1.Button3Click(Sender: TObject);

var

fl: FLASHWINFO;

begin

//МиганиС кнопки

fl.cbSize:= SizeOf(fl);

fl.hwnd:= Application.Handle;

fl.dwFlags:= FLASHW_TRAY;

fl.uCount:= 10;

fl.dwTimeout:= 200;

FlashWindowEx(fl);

//Π˜Π½Π²Π΅Ρ€ΡΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°

fl.cbSize:= SizeOf(fl);

fl.hwnd:= Handle;

fl.dwFlags:= FLASHW_CAPTION;

fl.uCount:= 10;

fl.dwTimeout:= 200;

FlashWindowEx(fl);

end;

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС инвСртируСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„ΠΎΡ€ΠΌΡ‹ Forml. Кнопка Π½Π° ПанСли Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΈΠ³Π°Ρ‚ΡŒ, Π½ΠΎ ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Ρ‹Ρ‚ΡŒ скрыта ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Π°, ΠΊΠΎΠ³Π΄Π° Π² этом Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ. Π’Π°ΠΊ, для скрытия ΠΊΠ½ΠΎΠΏΠΊΠΈ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ShowWindow ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

...

ShowWindow(Application.Handle, SW_HIDE);

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ прилоТСния, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ShowWindow Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, Ρ€Π°Π²Π½Ρ‹ΠΌ SW_NORMAL.

1.3. ΠŸΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Π΅ ΠΎΠΊΠ½Π°

Π’ Windows 2000 Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования прозрачности ΠΎΠΊΠΎΠ½ (Π² англоязычной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Π΅ ΠΎΠΊΠ½Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Layered windows). ДостигаСтся это Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ стиля ΠΎΠΊΠ½Π° (ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΈ использовании ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… стилСй ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π² Π³Π». 2). Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ использованиС API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° для Ρ„ΠΎΡ€ΠΌ Delphi. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ свойства Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² состав класса TForm.

β€’ AlphaBlend – Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ прозрачности. Если True, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, Ссли False, Ρ‚ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π°.

β€’ AlphaBlendValue – Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ прозрачности ΠΎΠΊΠ½Π° (ΠΎΡ‚ 0 Π΄ΠΎ 255). Если 0, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ, Ссли 255, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ.

ЗначСния пСрСчислСнных свойств ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠ· ΠΎΠΊΠ½Π° Object Inspector, Ρ‚Π°ΠΊ ΠΈ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (рис. 1.1).

Рис. 1.1. Бвойства для настройки прозрачности Π² ΠΎΠΊΠ½Π΅ Object Inspector

На рис. 1.2 наглядно продСмонстрировано, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ (Ρ„ΠΎΡ€ΠΌΠ° Delphi).

Рис. 1.2. Π€ΠΎΡ€ΠΌΠ°, прозрачная Π½Π° 14 %

НиТС для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ свойства AlphaBl end, Π° Ρ‚Π°ΠΊΠΆΠ΅ AlphaBlendValue для задания прозрачности ΠΎΠΊΠ½Π° Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (сочСтаниС ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° tbAlpha, Ρ„Π»Π°ΠΆΠΊΠ° chkEnableAlpha ΠΈ подписи lblCurAlpha Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ рис. 1.2) (листинг 1.8).

...

Листинг 1.8.

ДинамичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ прозрачности ΠΎΠΊΠ½Π°

procedure TForm1.chkEnableAlphaClick(Sender: TObject);

begin

AlphaBlendValue:= tbAlpha.Position;

AlphaBlend:= chkEnableAlpha.Checked;

end;

procedure TForm1.tbAlphaChange(Sender: TObject);

var

pos, perc: Integer;

begin

pos:= tbAlpha.Position;

//НовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прозрачности

AlphaBlendValue:= pos;

//Обновим подпись ΠΏΠΎΠ΄ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΎΠΌ

perc:= pos * 100 div 255;

lblCurAlpha.Caption:= IntToStr(pos) + ΠΈΠ· 255 ( +

IntToStr(perc) + %) ;

end;

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ интСрСсный эффСкт постСпСнного исчСзновСния, Π° Π·Π°Ρ‚Π΅ΠΌ появлСния Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ (листинг 1.9).

...

Листинг 1.9.

Π˜ΡΡ‡Π΅Π·Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈ появлСниС Ρ„ΠΎΡ€ΠΌΡ‹

implementation

var

isInc: Boolean; // Если True, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ AlphaBlend Ρ„ΠΎΡ€ΠΌΡ‹

// увСличиваСтся, Ссли False, Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ

//(Ρ„ΠΎΡ€ΠΌΠ° скрываСтся)

procedure TForm1.cmbHideAndShowClick(Sender: TObject);

begin

if AlphaBlend then chkEnableAlpha.Checked:= False;

//Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ (ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ ΠΏΠ»Π°Π²Π½ΠΎΠΌΡƒ ΡΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ)

AlphaBlendValue:= 255;

AlphaBlend:= True;

Refresh;

//ЗапускаСм процСсс скрытия Ρ„ΠΎΡ€ΠΌΡ‹

isInc:= False;

Timer1.Enabled:= True;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

var val: Integer;

begin

if not isInc then

begin

//"РастворСниС" ΠΎΠΊΠ½Π°

val:= AlphaBlendValue;

Dec(val, 10);

if val <= 0 then

begin

//Окно ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ

val:= 0;

isInc:= True;

end

end

else begin

//ПоявлСниС окна

val:= AlphaBlendValue;

Inc(val, 10);

if val >= 255 then

begin

//Окно ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ

val:= 255;

Timer1.Enabled:= False; //ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½

AlphaBlend:= False;

end

end;

AlphaBlendValue:= val;

end;

Главная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² листингС 1.9 Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° кроСтся Π² использовании Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° (Timerl) для инициирования измСнСния прозрачности ΠΎΠΊΠ½Π°. Π’Π°ΠΊ сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠ³Π»ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ скрываСтся ΠΈΠ»ΠΈ постСпСнно показываСтся, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ «съСдало» всС рСсурсы Π½Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слабой машинС. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ прозрачности Π² простом Ρ†ΠΈΠΊΠ»Π΅, запуститС Π΅Π³ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Pentium III 600 ΠœΠ“Ρ† Π±Π΅Π· Π½Π°Π²ΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈ сами ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ станСт с Π±Π΅Π΄Π½ΠΎΠΉ машиной.

Π“Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅, Π° Π³Π»Π°Π²Π½ΠΎΠ΅ умСстноС, использованиС прозрачности ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ интСрфСйса прилоТСния (взглянитС хотя Π±Ρ‹ Π½Π° Winamp 5 ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ прозрачности ΠΎΠΊΠΎΠ½).

1.4. Окна ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ нСстандартной Ρ„ΠΎΡ€ΠΌΡ‹

БСйчас ΠΌΡ‹ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стандартныС возмоТности Windows, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для достиТСния большСго разнообразия ΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ элСмСнтов ΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ интСрфСйса Π·Π° счСт измСнСния Ρ„ΠΎΡ€ΠΌΡ‹ элСмСнтов управлСния ΠΈ, СстСствСнно, самих ΠΎΠΊΠΎΠ½ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π Π΅Π³ΠΈΠΎΠ½Ρ‹. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ использованиС

РассматриваСмыС Π΄Π°Π»Π΅Π΅ эффСкты ΠΏΠΎ измСнСнию Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠΊΠΎΠ½ Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° использовании Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΠ² (областСй) отсСчСния – Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС слоТных гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ±Π»Π°ΡΡ‚ΡŒ рисования ΠΎΠΊΠ½Π°. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠΊΠ½Π° (Π² Ρ‚ΠΎΠΌ числС ΠΈ ΠΎΠΊΠ½Π° элСмСнтов управлСния) ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ отсСчСния, Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΠΌ с высотой ΠΈ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ, Ρ€Π°Π²Π½ Ρ‹ΠΌΠΈ высотС ΠΈ ΡˆΠΈΡ€ΠΈΠ½Π΅ самого ΠΎΠΊΠ½Π°.