Полупрозрачную Panel1 В Delphi

Тема в разделе "Delphi - Компоненты", создана пользователем sistemsx, 3 апр 2013.

  1. sistemsx

    sistemsx Member

    Регистрация:
    29 мар 2013
    Сообщения:
    6
    Симпатии:
    0
    Добрый день. Подскажите пожалуйста, Когда делаешь форму полупрозрачной, то компоненты тоже полупрозрачные, а как можно сделать на оборот, то есть форма не прозрачная, а панель можно было регулировать прозрачность, если можно примерчик кода. Заранее спасибо всем
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    :gigi: Не совсем понял мысль Вашу... под панелью полупрозрачной что "просвечивать" должно? Форма (которая непрозрачная)? Или то что под формой (типа полупрозрачная дыра в непрозрачной форме). Уж уточните пожалуйста.
     
  3. sistemsx

    sistemsx Member

    Регистрация:
    29 мар 2013
    Сообщения:
    6
    Симпатии:
    0
    Вот в инете картинку нашел. Представть рабочий стол формой, а проводник, что на ней панелью)) Только панель должна быть не полностью прозрачной, а чтобы можно было регулировать ее. Может для этого есть какой нибудь другой компанент?
     
  4. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    :( Представил... То есть всетаки просвечивать должно то что на форме под панелью лежит. так?
    Не думаю что Вы найдете такой компонент... уж больно желание у Вас... странное. :(
    Обычно панель либо полностью прозрачная, либо НЕ прозрачная... Проблема даже не с самой панелью, а с контролами которые на ней лежат... их как полупрозрачными сделать? :)
    Но... сэмитировать такое поведение панели можно, если точно знать что под панелью "нарисовано"...
    Если Вы "раскроете секрет" что у Вас там (на форме под панелью), могу попробовать примерчик накодить. Delphi у Вас какой версии?
     
  5. sistemsx

    sistemsx Member

    Регистрация:
    29 мар 2013
    Сообщения:
    6
    Симпатии:
    0
    Да просто можно любую картинку.
     
  6. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Вы так и не признались какой версии у Вас Delphi...
    Тогда вот черновичок... в первом приближении... ;)
    Посмотреть вложение TranspTest.rar
    Что тут надо еще сделать:
    1. Чтобы не подрагивало - уменьшить количество перерисовок панелям (через перехват WM_ERASEBKGND)
    2. AlphaBlend "панелеэмитатора" выставлять в 0 при сворачивании главной формы.
    ну и если панель должна ресайзиться вместе с формой, то "панелеэмитатор" надо пересоздавать заново...
    Вообще, по хорошему, оконные процедуры надо бы "синхронизировать"...
    но это уже другая история... :)
     
  7. sistemsx

    sistemsx Member

    Регистрация:
    29 мар 2013
    Сообщения:
    6
    Симпатии:
    0
    Большое спасибо, буду разбираться, а почитать есть где нибудь про это, про что Вы выше написали?

    Добавлено:
    Большое спасибо, буду разбираться, а почитать есть где нибудь про это, про что Вы выше написали?
     
  8. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Главный смысл в следующем.
    MSDN говорит: ПОЛУпрозрачность можно менять у окнон с расширенным стилем WS_EX_LAYERED.
    пример
    Код (Delphi):
    SetWindowLong(Whandle, GWL_EXSTYLE, GetWindowLong(Whandle, GWL_EXSTYLE) or WS_EX_LAYERED); // Whandle - дескриптор окна
    SetLayeredWindowAttributes(Whandle, 0, 255{0 - 255}, LWA_ALPHA);
    Тот же MSDN уточняет, что невозможно назначить WS_EX_LAYERED для дочерних окон. Т.е. МОЖНО для форм и диалогов, НЕЛЬЗЯ для кнопок, чекбоксов, эдитов и пр...
    Я не случайно спросил какой у Вас Delphi. Дело в том что в VCL большинство контролов, таких как TButton, TEdit и тд... являются обертками для стандартных WIN-контролов. т.е. подчиняются всем законам WinAPI. Поэтому в Delphi младше XE2, странные "извращения" типа Ваших решаются только "танцами с бубном"... Никто конечно не запрещает Вам накодировать собственных компонентов с нестандартным (с точки зрения Windows) поведением, но отрисовывать на форме Вам их придется самому. Windows за Вас (как это она делает с TButton) это делать не будет.
    В XE2 при включеных VCL-стилях можно в некоторой степени управлять отрисовкой стандартных контролов. А еще можно делать проекты не на VCL а на альтернативной библиотеке Firemonkey. C ее FMX-контролами (в плане визуального отображения) можно делать всё что "душе угодно".
    А по Вашему вопросу... ну даже не знаю что конкретно посоветовать почитать...
    Гугл разве что... :)
    Что такое оконная процедура и как ее переназначить в Delphi проекте он Вам точно раскажет.
    И про то какие оконные сообщения для чего служат и как их перехватывать.
    И про то как уменьшить моргания с помощью перехвата сообщения WM_ERASEBKGND.
    Ну... вот тут еще можете почитать http://forum.vingrad.ru/forum/topic-155304.html
    Там народ обсуждал тему похожую на Вашу... но только с точностью наоборот... :)
     

Поделиться этой страницей