Форум: "Основная";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизВсплывающие сообщения Найти похожие ветки
← →
Ksenom (2006-03-09 10:33) [0]Есть вопрос…. Многие видели вплывающие сообщения Miranda, Qip, Opera и.д.
Подскажите пожалуйста каким образом это реализовано и есть ли для этого нормальные компоненты.
Уже неделю в сети таскаюсь а так и не нашёл нормального ответа на данный вопрос.
← →
Жуков Олег (2006-03-09 10:51) [1]Это можно сделать простой формой, показывать с флагом SW_SHOWNOACTIVATE;
PopupForm: TForm;
...
ShowWindow(PopupForm.Handle, SW_SHOWNOACTIVATE);
...
Прятать можно по таймеру.
← →
Ksenom (2006-03-09 11:11) [2]Просто форма не устраивает... Нужно что то посимпотичнее... Как у Миранды....
О... может у кого есть листинг мирандовского плагина для окошек всплывающих
← →
AbrosimovA (2006-03-09 14:11) [3]Компонент WPTaskbarNotifier
← →
Eraser © (2006-03-09 15:29) [4]
> Ksenom (09.03.06 11:11) [2]
[1] + TArtForm (ищи на torry.net)
← →
Ksenom (2006-03-09 16:17) [5]Жаль... всё не то...
← →
Cash © (2006-03-09 16:41) [6]Е мое!!! :(((
Delphi это же не набор VCL и плагинов - это среда разработки!!!!
Если кто еще не просвещен в эту истину - офицательно уведомляю!
Если чего то нет, или то, что есть не устраивает - берем, достаем руки из
карманов, кладем их на устройство интерпритации мыслей и интерпретируем
все, что только вздумается! ;)
А иначе любитель какой то получается (хочу чтобы было но не хочу учиться)
Если надо всплывающее окошко в проге, т. е. на территории формы,
там куча всяких методов.
А если надо, чтоб message вылезал на рабочем столе, на еще и небось
со всякими там картинками или еще какими фичами, то берем форму,
если не устраивает вид заголовка - ставим BorderStyle в dsNone,
переписываем у нее процедуру обработки сообщений (из поста [1]),
а в обработчике OnShow ставим координаты и говорим, что делать.
И все!!! :Р
Форму можно убирать по рецепту [1] или по клику на кнопочке, для
этого тоббой приделанной.
← →
kernel © (2006-03-09 17:59) [7]Это что-ли как в Касперском?
← →
Ksenom (2006-03-10 12:17) [8]Cash, будте уверенны, виды формы, появление и фичи мне знакомы.
Показать окно я могу, и не только показать ))
По поводу "любитель", согласен... не все богами рождаются... но учиться желание есть и именно за этим сюда я и пришёш...
Критиковать каждый может... я же прошу научить... и подсказать...
← →
antonn © (2006-03-10 13:27) [9]Ksenom (10.03.06 12:17) [8]
хоть скриншот то покажи, этих "окошек Марандовских" :)
может нужно с альфаканалом, вот примерчик есть: http://kladovka.net.ru/index.cgi?pid=list&rid=318
← →
Cash © (2006-03-10 14:56) [10]Ksenom (10.03.06 12:17) [8]:
Такой ответ меня более чем радует (наверное и других тоже),
а то я уж думал, что тут еще один последователь Ken-а завелся. :)))
Присоединяюсь к мудрейшей мысли antonn-а, надо бы визуально
осязаемый образ того вида, а то прям глазы разбегаются от
обилия идей, что посоветовать! :)
← →
Кашперук Иван (2006-03-10 17:39) [11]По-меому, если я правильно понимаю как работают эти окошки в Миранде, у них просто меняется последовательно прозрачность с полностью прозрачного до полностью непрозрачного.
За счет этого достигается красивый эффект его появления на экране.
Правда, их там может появлятся много - одно над другим - для этого, просто создавайте формы динамически - и перед отображением [1] рассчитывайте координаты их расположения.
Удачи!
← →
Кашперук Иван (2006-03-10 17:56) [12]Скажу даже больше - рассчет координат сводится к двум строкам, а все отображение - к 5
Form := TYourFormClass.Create(nil);
Form.Top := Screen.WorkAreaHeight - Form.Height;
Form.Left := Screen.WorkAreaWidth - Form.Width;
ShowWindow(Form.Handle, SW_SHOWNOACTIVATE);
Application.ProcessMessages;
Работает прекрасно :)
Правда без прозрачности
← →
antonn © (2006-03-10 18:21) [13]да, в общем то, и прозрачность не сложно
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) or 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;
← →
Кашперук Иван (2006-03-11 21:56) [14]2 antonn: Да уж, это по-моему уже довольно сложно.
я обычно обхожусь просто установкой AlphaBlend и AlphaBlandValue (в 130)
← →
Ksenom (2006-03-17 17:19) [15]Всех благодарю... вы мне помогли советом...
Отдельное спасибо "Кашперук Иван" и "antonn"
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c