|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
|
SoWa |
|
|||
Харекришна Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 2 Всего: 74 |
Как сделать полупрозрачное окно
ТЕОРИЯ: Предисловие: Недавно поднималась тема о прозрачности окна и непрозрачности компонентов. Решения были разные. Представляю вашему вниманию еще одно решение с улучшением- наложением светофильтров. Окно программы будет не просто прозрачным, но и цветным. Прежде всего, хочу предупредить, что этот текст рассчитан на людей, знакомых с функциями WinAPI и сообщениями Windows и поэтому вряд ли будет полезен тем, кто предпочитает ограничиваться работой на уровне компонентов Delphi. Теперь ещё два предупреждения: во первых, полупрозрачное окно иногда перерисовывается не совсем правильно. Во-вторых, эта программа написана только для демонстрации самого принципа создания полупрозрачных окон и кое-что в ней можно (и иногда даже нужно) улучшить. Внутренняя схема перерисовки окон в Windows такова, что каждый раз перерисовывается только та его часть, которая не закрыта другими окнами и, следовательно, видна на экране. Это ускоряет процесс обновления экрана. Но полупрозрачное окно должно каким-то образом получать информацию о том, что нарисовано под ним. Здесь мы вступаем в противоречие с правилами Windows, поэтому следует прибегнуть к некоторому обману. При необходимости перерисовать полупрозрачное окно надо это окно ненадолго убрать с экрана. Как только все нижележащие окна будут перерисованы, надо запомнить ту область экрана, которая будет закрыта окном, вновь вывести на экран это окно и отрисовать его с учётом сохранённой картинки. Первая трудность на этом пути - как узнать, что перерисовка всех окон закончилась? Самый примитивный способ- подождать! Скажу только, что времени задержки 400 мс, которое установлено в этом примере вполне хватило. Вторая трудность - если вдруг окно, лежащее под полупрозрачным, обновилось, то это не приведёт сразу же к перерисовке этого окна. Теперь о том, как осуществить всё это на практике. Перерисовка окна определяется обработкой одного из двух сообщений: WM_EraseBkgnd и WM_Paint. WM_Paint лучше вот почему: Во-первых, WM_EraseBkgnd может посылаться по несколько раз, соответственно окно перерисовывается до нескольких раз подряд. Во-вторых, между WM_EraseBkgnd и WM_Paint есть существенная разница: в первом случае Windows сам определяет, какая часть окна должна перерисоваться, и рисовать за пределами этой части просто не разрешает. А полупрозрачное окно, вообще говоря, обладает нетрадиционной точкой зрения на этот вопрос, что и приводит к конфликтам, особенно тогда, когда полупрозрачное окно частично закрыто другими окнами. Что же касается WM_Paint, то и тут Windows, конечно же, держит всё под контролем и тоже следит за тем, какая область окна должна быть перерисована. Однако, к счастью для полупрозрачных окон, это всё не выливается в прямые запреты, как в случае с WM_EraseBkgnd, здесь Windows ограничивается только выдачей ценных указаний через BeginPaint и TPaintStruct. Ну, а теперь мы отрисовываем окно целиком. И наконец, в-третьих, Windows зачем-то генерирует WM_EraseBkgnd после выполнения ShowWindow, поэтому попытка спрятать окно при обработке этого сообщения приведёт к бесконечной рекурсии. Впрочем, пренебрегать WM_EraseBkgnd тоже не стоит. Дело в том, что во время запуска программы этому процессу, видимо, присваивается повышенный приоритет. Это приводит к тому, что наше окно начинает рисоваться, Windows посылает WM_EraseBkgnd, стандартная процедура обработки этого события закрашивает всю клиентскую часть окна красивым серым цветом (как обычно), затем обрабатывается WM_Paint, в котором окно прячется с экрана, после чего остальные окна должны быстро перерисоваться и, когда пройдёт заданное время, программа посмотрит, что там нарисовано, начнёт наложение светофильтра... А окна-то не успели перерисоваться! Программа увидит своё собственное окно, которое мы не успели стереть. Это нам не надо, поэтому, чтобы не увеличивать время ожидания, нужно заблокировать вызов стандартного обработчика WM_EraseBkgnd. Это, естественно, никак не отразится на скорости перерисовки остальных окон, но ведь и само окно ничего не нарисует на экране, и после ожидания программа увидит то, что надо. И последний штрих: при перемещении окна Windows, во избежание ненужных действий, не запускает механизм перерисовки, а просто переносит изображение с одного места на другое. Для полупрозрачных окон это недопустимо, изображение должно обновляться при каждом переносе. Для этого надо отслеживать сообщение WM_Move, которое возникает в таких случаях. И, соответственно, запускать перерисовку окна. Если WM_Move вам не подходит , вы можете использовать WM_WindowPosChanged. Я не заметил разницы... Проблема заключается в том, что в некоторых версиях системы при перемещении окна не рисуется рамка, а каждый раз происходит перерисовка всего окна целиком. То же самое происходит и при изменении размеров окна. Так происходит, например, в Win NT и в Win95 при установленном MS Plus! Ключ к решению проблемы лежит в обработке сообщений WM_EnterSizeMove и WM_ExitSizeMove. Нужно завести переменную типа boolean, которая будет изменяться при начале перетаскивания с False на True и наоборот при его завершении. Соответственно обработчик WM_Paint должен следить за этой переменной и не выполнять задержку. Проблема - как узнать, что должно быть под окном. Если каждый раз запоминать не только нужную часть экрана, а весь экран целиком, то к моменту входа в режим перетаскивания программа будет обладать всей необходимой информацией о том, что там внизу. Теперь надо будет только вырезать нужный кусок. Главный недостаток такого подхода - программа должна быть, как пионер, всегда готова к началу перетаскивания и всегда сохранять экран целиком, что приведёт к дополнительному расходу памяти. Но от этого тоже можно избавиться, храня только нужный кусочек экрана (пока не реализовано). ПРАКТИКА: Бросим на форму Button, SpinEdit, ColorDialog. Потом приводим код к такому состоянию:
Приведенный код без комментариев. Они все в присоединенном файле. Дерзайте. Послесловие: Тут довольно много некорректного кода (по причине того, что я много еще не знаю). Просьба все улучшения выкладывать в этой теме (без флейма, плз). В примере добавлены два label`а, чтобы показать, что их свойство Transparent работает. И еще- попробуйте в SpinEdit добавить ноликов, чтобы значение выходило за «100», будет красиво! Помогли- DelphiKingdom Это сообщение отредактировал(а) SoWa - 4.6.2005, 03:12 Присоединённый файл ( Кол-во скачиваний: 522 ) ColorTransp.zip 4,84 Kb -------------------- Всем добра |
|||
|
||||
Poseidon |
|
|||
Delphi developer Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Еще информация по теме: FAQ - Прозрачность формы
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
RaIDeR |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 20.6.2005 Репутация: нет Всего: 4 |
Вот ещё кое что по теме:
Этот код работает только в Windows 2k/XP . ps Не помню где Я этот код нашел |
|||
|
||||
MIX55 |
|
|||
много работы Профиль Группа: Awaiting Authorisation Сообщений: 208 Регистрация: 23.10.2005 Где: Здесь Репутация: нет Всего: 4 |
--------------------
Hарод, а как в дельфи писать паскалевские проги....?*********************************************Жизнь слишком коротка, чтобы писать на Assembler'e |
|||
|
||||
tripsin |
|
||||||||||||||||||||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 10.4.2005 Где: Талица Репутация: 3 Всего: 3 |
Вот моя статья в общую копилку. Написана в основном для начинающих и оформлена в виде "магического свитка" а'ля Гарри Поттер
Формула Прозрачности или Прозрачная Магия Ни в заумных фолиантах, ни на просторах дикой сети я не нашел достойного свитка, вразумительно и доступно рассказывающего о создании Полупрозрачных Окон. Хотя возможно я плохо искал, или те свитки были скрыты невидимой чарой. В этом манускрипте я постарался подробно рассказать о магии прозрачности окон. Это знают даже маглы. Все уже наверное знают, что начиная с Delphi 6 формы умеют поддерживать свою прозрачность. Для этого не требуется абсолютно никаких усилий. Достаточно использовать свойства формы:
Уже на этом этапе новичку требуется дать небольшое пояснение. Существуют 2 режима прозрачности:
Азы: Формула прозрачности Но нам же мало стандартных свойств! Мы хотим сделать красивый виджет, взять за основу картинку и сделать окно невообразимой формы и различной прозрачности. И вот тут мы вступаем на зыбкую почву слабодокументированных, но очень соблазнительных возможностей. Для непосвященного наши действия будут попахивать магией. Хотя абсолютно все будет досконально разжевано и объяснено на пальцах. Для совершения заклинаний нам понадобится волшебник, и даже все маглы уже знают, что самым лучшим волшебником является профессор Дамблдор. Мы воспользуемся виртуальной личиной профессора, любезно им предоставленной. Также им была безвозмездно предоставлена формула прозрачности: Здесь:
Transparency имеет значение от 0 до 1. Но нам по ходу дела будет удобнее использовать для задания прозрачности значения от 0 до 255 (то есть размером в 1 байт). Это связано с тем, что в используемых нами картинках цвет пикселов указан в системе RGB (красный, зеленый, синий) и размер каждого цветового компонента составляет 8 бит или 1 байт. Кроме того мы хотим, чтобы кроме общей прозрачности рисунка мы могли задавать прозрачность каждого пикселя в отдельности. Поэтому Transparency мы будем вычислять вот так:
Уровень «СОВУ»: Перцеголовая чара. скачай демо-проект pepper-head.rar (59,2 кб) Знания СОВУ (Совершенно Обычный Волшебный Уровень) являются базовыми и без них ты не сможешь разобраться ни в уровне ПАУК, ни, тем более, в боевой магии. Как всегда, чтобы в чем-то хорошо разобраться, надо сделать все своими ручками. И сейчас мы разберем ручное создание эффекта прозрачности изображения. Кроме весьма полезного опыта, сотворенный нами код будет полезен начинающим кодерам графических редакторов. Итак формула прозрачности у нас уже есть. Сейчас мы с ее помощью для разминки пальцев составим Перцеголовую Чару. Кроме профессора нам для работы потребуется перец, выращенный, конечно, на огороде Хагрида. Заклинание будет заключаться в следующем: на фон нежного пастельного цвета мы сначала наложим полупрозрачного Дамблдора, а затем на получившийся рисунок на место дамблдоровой головы наложим полупрозрачное изображение перца. В приложенном свитке с демонстрацией можно менять степень прозрачности накладываемых изображений. При наложении мы будем использовать единую прозрачность для всего изображения (без чресписксельной прозрачности). Поэтому формула немного упростится: Образы волшебника, перца и фон поместим на форму в виде TImage. Изображения у нас окружены яркими цветами. Эти цвета нам нужны в качестве прозрачных ключей, чтобы при наложении убрать фон с исходных картинок. То есть мы применим сразу оба типа прозрачности – и по цветовому ключу, и альфа-смешивание. Вот основная функция смешивания изображений:
В функцию передаем рисунок-источник и рисунок, на который будем накладывать изображение. X и Y – координаты верхнего левого угла рисунка-источника на целевом рисунке. CommonAlpha – общая прозрачность рисунка (0..255, при 255 – непрозрачный рисунок). TransparentColor – прозрачный цвет. Используем его, чтобы убрать фон с рисунка источника. Доступ к пикселям рисунков осуществляем с помощью свойства Canvas.Pixels[]. Обходим в цикле все точки рисунка-источника, получаем их цвет. Если цвет соответствует TransparentColor, то устанавливаем полную прозрачность (Transparency) пикселя, иначе она равна CommonAlpha. Дальше проводим смешивание цветов картинок и устанавливаем новый цвет пикселя. Смешивание проводит функция BlendColor:
Она получает два цвета и смешивает их с учетом прозрачности. Собственно тут и применяется формула прозрачности. Поочередно вызовем функцию BlendImage для Дамблдора и перца. Получился перцеголовый Дамлдор. Все! Заклинание готово. Подробности реализации смотри в приложенном демонстрационном свитке. Сразу надо отметить, что свойство канвы Pixels[] использует функции Windows API – GetPixel и SetPixel. Но эти функции работают просто кошмарно медленно. Перейдя на новый уровень, ты узнаешь как существенно оптимизировать код заклинания и заставить его работать намного быстрее. Уровень «ПАУК»: Оптимизация и Плащ-невидимка. скачай демо-проект invisible-coat.rar (56,2 кб) Уровень ПАУК (Пресложная Аттестация Умений Колдуна) предполагает доскональное знание изучаемого предмета и готовность к реальному применению знаний. Как уже говорилось функции GetPixel, SetPixel и использующее их свойство канвы Pixels[] работают бессовестно медленно. А в функции BlendImage свойство Pixels используется 4 раза. Если ты захочешь сделать так, чтобы перец на голове проявлялся постепенно и будешь в цикле рисовать его с постепенно увеличивающейся непрозрачностью, то можешь и не дождаться окончания процесса. Срочно необходима оптимизация ! Выкинем API функции GetPixel и SetPixel и напишем свои быстрые. Для этого будем получать цвет пикселя непосредственно из области памяти, в которую записано изображение. К счастью разработчики Delphi предусмотрели такой вариант. Объект TBitmap имеет свойство Scanline[] – массив указателей на начала строк пикселей в изображении. Зная объем памяти занимаемый одним пикселем можно легко вычислить указатель на пиксель, прибавив к указателю на строку (это координата Y) положение пикселя в строке (координата X) умноженное на объем памяти, занимаемый одним пикселем (для 24-битной картинки 24/8 = 3 байта). Для доступа к цветовым компонентам в системе RGB используем структуру TRGBTriple (описана в Windows.pas).
Кроме того, можно оптимизировать и функцию смешивания цветов BlendColor. Для этого надо преобразовать формулу так, чтобы убрать все математические операции с плавающей запятой. Учтем также, что операция X shr 8 эквивалентна X / 256, но выполняется быстрее:
В результате мы получаем увеличение производительности более, чем в 5 раз! И, как увидим дальше, это далеко не предел. Теперь о плаще-невидимке. Мне не удалось достать хорошего работающего плаща для проведения наших опытов, но кое-что у меня все-таки есть . Как-то, бродя по задворкам Хогварца, я обнаружил на куче мусора старый потрепанный плащ-невидимку. Он не работал. Вернее работал наполовину и добиться полной невидимости в нем не получалось. Наверное поэтому его и выбросили. При осмотре плаща я обнаружил причину поломки. Как раз в области оптического процессора прямо сквозь цепи фотонных нанодатчиков была сделана довольно корявая вышивка: «Harry Potter». Очевидно старый владелец этой вещи, абсолютно не разбирался в ее работе. Ну что же, приспособим это барахло для наших нужд. Заставим Дамблдора одеть этот плащ и постепенно появляться перед нами. Плащ-невидимка представляет собой 8-битную серую картинку. Размер каждого пикселя как раз представляет собой значение от 0 до 255. Значения цвета пикселей плаща будут определять прозрачность каждого пикселя на изображении волшебника. То есть плащ будет альфа-каналом картинки волшебника. В этом примере сразу будем использовать быстрый доступ к пикселям изображения с использованием свойства TBitmap.Scanline[]. Установку значений цветовых компонентов будем делать по полной формуле прозрачности, но оптимизируем ее, чтобы не было операций с плавающей точкой: Код функции откомментирован построчно, поэтому объяснения будут лишними. Смотри код и читай комментарии.
Эта процедура работает очень быстро. В демонстрационном свитке для сравнения используются все рассмотренные методы доступа к пикселям. Так вот эта процедура быстрее доступа с помощью новых GetPixel и SetPixel в 8 раз. А при сравнению с использованием свойства Canvas.Pixels[] производительность возрастает в ≈56 раз !! Теперь ты готов к реальному применению заклинаний прозрачности и можешь переходить к боевой магии. Боевая магия: Джинн из файла. скачай демо-проект jinn_from_file.rar (17,1 кб) Ничего особенно воинственного мы тут делать не собираемся. Просто сейчас мы применим наши знания на практике, чтобы поразить окружающим красивыми визуальными эффектами. Выпустим джинна из файла! Для приготовления джинна нам пригодится уже знакомый виртуальный образ Дамблдора, а также разработанный на предыдущем уровне плащ-невидимка. Если запустить программу из ярлыка на рабочем столе или из Explorer’а, то джинн плавненько появится прямо из файла. Предполагается, что взявшись за реализацию боевого заклинания, ты имеешь представление, что из себя представляет окно и контекст устройства. Этот джинн является полноценным окном. Его можно таскать по столу мышкой и заставить исчезнуть по двойному клику. Он даже сможет исполнять твои желания. Правда для этого ты должен сам четко объяснить ему, что ты хочешь. То есть остается собственно написать функции, которые этот джинн будет выполнять. Итак, поехали. Джинна мы сделаем из простой формы путем довольно сложной трансфигурации. Перво-наперво обыкновенное окно надо превратить в многослойное. Это делается путем добавления к стилю окна флага WS_EX_LAYERED.
Дальше с многослойным окном можно собственно проводить трансфигурацию. Для этого применяется заклинание UpdateLayeredWindow. В Windows Vista добавлено еще одно заклинание – UpdateLayeredWindowIndirect (вызывается похоже)
В основном проблем с параметрами тут нет, кроме одного - hdcSrc: HDC; Это должен быть контекст устройства вывода, совместимый в нашем случае с экраном, и в него должна быть выбрана картинка, которую мы хотим видеть на месте нашего окна. Для того чтобы использовать per-pixel прозрачность эта картинка должна быть 32-битной. То есть должна содержать альфа-канал. Из всех форматов изображений наиболее универсально поддерживает альфа-канал формат PNG. И в основном именно его для этой цели и используют. Для его загрузки можно использовать сторонние библиотеки (например PNGlib) или воспользоваться мощностями GDI+ (Пример можешь глянуть здесь ). Но мы не пойдем этим путем и создадим 32-битную картинку вручную внутри стандартного TBitmap. В этот нам опять поможет наш любимый профессор. У нас есть 24-битная картинка с образом Дамблдора и 8-битная серая картинка с плащом-невидимкой. 24+8=32. Нам остается только свести эти картинки вместе в одну 32-битную картинку. Есть один очень важный момент. Windows при создании полупрозрачного окна руководствуется той же самой формулой прозрачности, что и мы в своих примерах, но одно из действий она не выполняет! Вот это: Это действие надо сделать самому, перед тем как передать картинку в функцию. То есть мы должны во время соединения волшебника и плаща цветовые компоненты всех пикселей Дамблдора умножить на значение альфа-канала (плаща-невидимки) и разделить на 256. Вот такой подводный камень. Он перегородил дорогу многим, пытавшимся создать Полупрозрачное Окно. Если ты будешь часто менять изображение в окне, то тебе придется каждый раз заново обрабатывать пиксели изображения альфа-каналом. Поэтому эту операцию надо оптимизировать еще жестче. Как всегда, чем быстрее работает алгоритм, тем больше он требует памяти. Это я к тому, что мы может рассчитать все возможные значения пикселя только один раз и поместить их в таблицу (PreMultiplyTable), а потом не выполнять никаких вычислений, а просто брать данные из таблицы. Оптимизации нет предела! При загрузке программы будем заполнять таблицу значениями:
Размер таблицы PreMultiplyTable составляет 256*256=65536 байт. То есть за большую скорость мы расплатились 64 Кб памяти. Процедура сведения картинок выполняется по быстрому алгоритму и очень похожа на то, что мы делали на уровне ПАУК. Доступ к цветовым компонентам 32-битной картинки делаем с помощью структуры TRGBQuad (используем ее поле rgbReserved для альфа-канала).
Как видишь весь подготовительный код мы поместили в обработчик создания формы. Так как в моем примере картинка окна не изменяется, то 32-битная картинка создается только один раз и в этом примере использование предумноженной таблицы прироста скорости не дает. Саму трансфигурацию выполним при активации формы. Контекст устройства для заклинания UpdateLayeredWindow получим из самой картинки: TBitmap.Canvas.Handle. Дальше получим координаты мышки на экране (а она будет как раз над файлом в проводнике, ты же нему кликал для запуска примера). И будем показывать постепенно появляющегося джинна, плавно отъезжающего от мышки, то есть от файла. Создастся впечатление, что джинн появился прямо из файла. Вот так вот Всего лишь ловкость рук.
Остальной код в примере нужен для того, чтобы таскать джинна по столу за тело. С эти разберешся сам. Конечно надо сделать еще так чтобы джинн был всегда поверх всех окон, чтобы его можно было вызвать горячей клавишей, чтобы он не запускался второй раз, но это уже не относится к теме данного манускрипта. Кстати обрати внимание что, хотя окно выводится прямоугольное, прозрачные участки джинна прозрачны также и для кликов мышью. Этот значит, что теперь ты можешь создать окно самой вычурной формы без использования всяких регионов. Это положительные моменты. Но есть тут один очень жирный минус. Используя функцию UpdateLayeredWindow, ты сообщаешь операционной системе о том, что берешь на себя полную ответственность за рисования окна и управление им. Windows будет только брать картинку из контекста, который ты указал в hdcSrc и обеспечивать прозрачность в соответствии с параметрами функции и альфа-каналом рисунка. В твое окно перестанет приходить сообщение WM_PAINT и событие OnPaint перестанет работать. Перерисовывать окно ты будешь должен сам по мере надобности. Для этого снова вызываешь UpdateLayeredWindow и передаешь ей обновленную картинку. И вот тут и возникает проблема с компонентами на форме. Если во время разработки ты поместил на форму элементы управления (типа кнопок или полей ввода), то на новом окне они не прорисуются. Ведь выводится только твоя картинка. Но эти элементы будут работать, реагировать на клики (хотя и не всегда). Наиболее разумным решением этой проблемы будет полный отказ от стандартных элементов управления. Вместо этого надо рисовать элементы управления вручную в виде картинок прямо в контексте устройства, но перед его обработкой альфа-каналом. (применительно к коду примера рисовать элементы надо на картинке волшебника перед сведением картинок в 32-битную) Это все. Теперь ты знаешь заклинание Полупрозрачных Окон и, надеюсь, разобрался с магией прозрачности. Да! Свитки примеров компилировались в Delphi7 и тестировались в WindowsXP. Орехов Роман also known as tripsin © 2006 Это сообщение отредактировал(а) tripsin - 26.12.2006, 21:47 |
||||||||||||||||||||
|
|||||||||||||||||||||
tripsin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 10.4.2005 Где: Талица Репутация: 3 Всего: 3 |
Полезные ссылки по теме
Это сообщение отредактировал(а) tripsin - 27.12.2006, 09:33 |
|||
|
||||
AlexeyShestchenko |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 59 Регистрация: 7.2.2008 Репутация: нет Всего: нет |
Очень красивые получаются формы,у меня есть шаблон-картинка,выглядит как форма в висте,эффектно смотриться
Но есть свои проблемы. Например если засунуть это дело в dll с формой, то при создании их будет две и в деспетчере задач :( что не очень радует. Но с контролами все будет супер!!! никаких морганий и т.п. Прежде всего надо научить delphi "понимать" png. Ищем в нете компонент pngimage. Потом нам понадобится HSLUtils:
А вот это самый лакомый кусочек пользуйтесь. Кстати, если кто доработает пишите сюда.
|
||||
|
|||||
Poseidon |
|
|||
Delphi developer Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Делись
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
KgCoder |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 93 Регистрация: 6.3.2008 Где: KGstan Репутация: нет Всего: нет |
Вчера скачал True Transparency.
Снова возник вопрос как сделать фон полупрозрачным...вернее использовать png в качестве фона. Может кто-нибудь сможет сделать что-то подобное и выложит исходники? |
|||
|
||||
KgCoder |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 93 Регистрация: 6.3.2008 Где: KGstan Репутация: нет Всего: нет |
AlexeyShestchenko
Вот собрал ваш вариант: png.rar После появления выходит вот это: Не могу понять почему... Помогите кто-знает.... |
|||
|
||||
bagos |
|
|||
Опытный Профиль Группа: Участник Сообщений: 275 Регистрация: 17.6.2006 Репутация: нет Всего: 1 |
попробуй form color = yellow, form - transporentcolor = true, transporent color = yellow
|
|||
|
||||
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |