Спливаючі повідомлення
Є питання…. Багато хто бачив впливаючі повідомлення 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"