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

  • Автор темы sistemsx
  • Дата начала
S

sistemsx

Добрый день. Подскажите пожалуйста, Когда делаешь форму полупрозрачной, то компоненты тоже полупрозрачные, а как можно сделать на оборот, то есть форма не прозрачная, а панель можно было регулировать прозрачность, если можно примерчик кода. Заранее спасибо всем
 
S

sinkopa

Добрый день. Подскажите пожалуйста, Когда делаешь форму полупрозрачной, то компоненты тоже полупрозрачные, а как можно сделать на оборот, то есть форма не прозрачная, а панель можно было регулировать прозрачность, если можно примерчик кода. Заранее спасибо всем
:gigi: Не совсем понял мысль Вашу... под панелью полупрозрачной что "просвечивать" должно? Форма (которая непрозрачная)? Или то что под формой (типа полупрозрачная дыра в непрозрачной форме). Уж уточните пожалуйста.
 
S

sistemsx

:gigi: Не совсем понял мысль Вашу... под панелью полупрозрачной что "просвечивать" должно? Форма (которая непрозрачная)? Или то что под формой (типа полупрозрачная дыра в непрозрачной форме). Уж уточните пожалуйста.
в инете картинку нашел. Представть рабочий стол формой, а проводник, что на ней панелью)) Только панель должна быть не полностью прозрачной, а чтобы можно было регулировать ее. Может для этого есть какой нибудь другой компанент?
 
S

sinkopa

Представть рабочий стол формой, а проводник, что на ней панелью)) Только панель должна быть не полностью прозрачной, а чтобы можно было регулировать ее. Может для этого есть какой нибудь другой компанент?
:( Представил... То есть всетаки просвечивать должно то что на форме под панелью лежит. так?
Не думаю что Вы найдете такой компонент... уж больно желание у Вас... странное. :(
Обычно панель либо полностью прозрачная, либо НЕ прозрачная... Проблема даже не с самой панелью, а с контролами которые на ней лежат... их как полупрозрачными сделать? :)
Но... сэмитировать такое поведение панели можно, если точно знать что под панелью "нарисовано"...
Если Вы "раскроете секрет" что у Вас там (на форме под панелью), могу попробовать примерчик накодить. Delphi у Вас какой версии?
 
S

sistemsx

:( Представил... То есть всетаки просвечивать должно то что на форме под панелью лежит. так?
Не думаю что Вы найдете такой компонент... уж больно желание у Вас... странное. :(
Обычно панель либо полностью прозрачная, либо НЕ прозрачная... Проблема даже не с самой панелью, а с контролами которые на ней лежат... их как полупрозрачными сделать? :)
Но... сэмитировать такое поведение панели можно, если точно знать что под панелью "нарисовано"...
Если Вы "раскроете секрет" что у Вас там (на форме под панелью), могу попробовать примерчик накодить. Delphi у Вас какой версии?
Да просто можно любую картинку.
 
S

sinkopa

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

sistemsx

Вы так и не признались какой версии у Вас Delphi...
Тогда вот черновичок... в первом приближении... ;)
Посмотреть вложение 5613
Что тут надо еще сделать:
1. Чтобы не подрагивало - уменьшить количество перерисовок панелям (через перехват WM_ERASEBKGND)
2. AlphaBlend "панелеэмитатора" выставлять в 0 при сворачивании главной формы.
ну и если панель должна ресайзиться вместе с формой, то "панелеэмитатор" надо пересоздавать заново...
Вообще, по хорошему, оконные процедуры надо бы "синхронизировать"...
но это уже другая история... :)
Большое спасибо, буду разбираться, а почитать есть где нибудь про это, про что Вы выше написали?

Добавлено:
Вы так и не признались какой версии у Вас Delphi...
Тогда вот черновичок... в первом приближении... :)
Посмотреть вложение 5613
Что тут надо еще сделать:
1. Чтобы не подрагивало - уменьшить количество перерисовок панелям (через перехват WM_ERASEBKGND)
2. AlphaBlend "панелеэмитатора" выставлять в 0 при сворачивании главной формы.
ну и если панель должна ресайзиться вместе с формой, то "панелеэмитатор" надо пересоздавать заново...
Вообще, по хорошему, оконные процедуры надо бы "синхронизировать"...
но это уже другая история... :)
Большое спасибо, буду разбираться, а почитать есть где нибудь про это, про что Вы выше написали?
 
S

sinkopa

Большое спасибо, буду разбираться, а почитать есть где нибудь про это, про что Вы выше написали?
Главный смысл в следующем.
MSDN говорит: ПОЛУпрозрачность можно менять у окнон с расширенным стилем WS_EX_LAYERED.
пример
Код:
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.
Ну... вот тут еще можете почитать
Там народ обсуждал тему похожую на Вашу... но только с точностью наоборот... :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!