Спливаючі повідомлення

Є питання…. Багато хто бачив впливаючі повідомлення Miranda, Qip, Opera і т.д. Підкажіть будь ласка яким чином це реалізовано і чи є для цього нормальні компоненти.

Це можна зробити простою формою, показувати з прапором SW_SHOWNOACTIVATE;

PopupForm: TForm; . ShowWindow(PopupForm.Handle, SW_SHOWNOACTIVATE); . Сховати можна за таймером.

Просто форма не влаштовує. Потрібно щось симпатичніше. Як у Міранди. О. може у кого є листинг мирандавського плагіна для вікон спливаючих

> Ksenom (09.03.06 11:11) [2][1] + TArtForm (шукай на torry.net)

Е моє. :((( Delphi це ж не набір VCL і плагінів - це середовище розробки. Якщо хто ще не освічений в цю істину - офіційно повідомляю!).

Якщо чогось немає, або те, що їсти не влаштовує - беремо, дістаємо руки з кишень, кладемо їх на пристрій інтерпретації думок і інтерпретуємо все, що тільки заманеться! ;) А інакше любитель якийсь виходить (хочу щоб було але не хочу вчитися)

Якщо треба спливаюче віконце в прозі, тобто на території форми, там купа всяких методів. А якщо треба, щоб message вилазив на робочому столі, на ще й мабуть зі всякими там картинками або ще якими фічами, то беремо форму, якщо не влаштовує вид заголовка - ставимо BorderStyle в dsNone, переписуємо в неї процедуру обробки повідомлень (з поста [1]), а в обробнику OnShow ставимо координати і говоримо, що робити. І все. :Р Форму можна прибирати за рецептом [1] або по кліку на кнопочці, для цього тобі приробленою.

Це як у Касперському?

Cash, будьте впевнені, види форми, поява і фічі мені знайомі. Показати вікно я можу, іне тільки показати)) З приводу "аматор", згоден. не всі богами народжуються. але вчитися бажання є і саме за цим сюди я і прийдеш. Критикувати кожен може. я ж прошу навчити. та підказати.

Ksenom (10.03.06 12:17) [8]хоч скріншот то покажи, цих "віконець Марандовських" :) може потрібно з альфаканалом, ось приклад є: http://kladovka .net.ru/index.cgi?pid=list&rid=318

Ksenom (10.03.06 12:17) [8]: Така відповідь мене більш ніж тішить (напевно й інших теж), а то я вже думав, що тут ще один послідовник Ken-а завівся. :)))

Приєднуюсь до наймудрішої думки antonn-а, треба б візуально відчутний образ того виду, а то прямі очі розбігаються від великої кількості ідей, що порадити! :)

По-моєму, якщо я правильно розумію, як працюють ці віконця в Міранді, у них просто змінюється послідовно прозорість з повністю прозорого до непрозорого. За рахунок цього досягається гарний ефект його появи на екрані.

Щоправда, їх там може з'являтися багато – одне над іншим – для цього, просто створюйте форми динамічно – і перед відображенням [1] розраховуйте координати їхнього розташування.

Скажу навіть більше – розрахунок координат зводиться до двох рядків, а все відображення – до 5

Form := TYourFormClass.Create(nil); Form.Top: = Screen.WorkAreaHeight - Form.Height; Form.Left := Screen.WorkAreaWidth - Form.Width; ShowWindow(Form.Handle, SW_SHOWNOACTIVATE); Application.ProcessMessages;

Працює чудово :) Правда без прозорості

так, загалом, і прозорість не складно

type TSetLayeredWindowAttributes = function(hWnd : HWND; crKey : DWORD;bAlpha : Byte; dwFlags : DWORD) : BOOL; stdcall;

procedure TMainForm.trans(i:byte); var SetLayeredWindowAttributes : TSetLayeredWindowAttributes; hUser32 : HINST; begin SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) або WS_EX_LAYERED); hUser32 := LoadLibrary("user32.dll"); if hUser32 <> 0 then begin try SetLayeredWindowAttributes := GetProcAddress(hUser32, "SetLayeredWindowAttributes"); if Assigned(@SetLayeredWindowAttributes) then SetLayeredWindowAttributes(Handle, 0, i, LWA_ALPHA); finally FreeLibrary(hUser32); end; end; end;

2 antonn: Так, це по-моєму вже досить складно.

я зазвичай обходжуся просто установкою AlphaBlend і AlphaBlandValue (130)

Всім дякую. ви мені допомогли порадою. Окреме спасибі "Кашперук Іван" та "antonn"