| 
| 
 | Вопрос # 695/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты! Можно ли средствами Delphi сделать панель меню "Пуск" полупрозрачной? 
|  |   Вопрос задал: alone (статус: Посетитель)Вопрос отправлен: 3 июля 2007, 12:53
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, Гадлевский Олег Вячеславович!Ну конечно можно. Для этого в Win2000 в user32.dll появилась функция SetLayeredWindowAttributes, нужно только найти нужное окно, установить у него EX_LAYERED стиль и менять прозрачность.
 
 См. готовый проект - прикреплённый файл.
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 
|  | Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)Время отправки: 3 июля 2007, 14:50
 Оценка за ответ: 4
 Комментарий к оценке: Спасибо, Игорь! Всё работает, но есть маленькая загвоздочка - у меня в настройках панели установлена опция "Автоматически скрывать панель задач" и поэтому панель при работе Вашей программы становится не прозрачной, а размытой. Не могли бы Вы устранить этот недостаток? |  
 Мини-форум вопросаВсего сообщений: 6; последнее сообщение — 5 июля 2007, 22:51; участников в обсуждении: 2. 
|   | Матвеев Игорь Владимирович (статус: Студент), 4 июля 2007, 10:39 [#1]:Что Вы понимаете поз словом "прозрачной"? - нужно чтобы тело панели было полностью прозрачным, а текст и значки отображались? 
 В таком случае нужно лишь немного изменить приведенный мной код:
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
 PanelCanvas : TCanvas;
 BodyColor   : TColor;
 begin
 // Определим цвет тела панели
 PanelCanvas := TCanvas.Create;
 PanelCanvas.Handle := GetWindowDC( hStartWnd );
 // Берем левый верхний пиксел
 BodyColor := PanelCanvas.Pixels[0, 0];
 // Установим прозрачным системный цвет панели
 SetLayeredWindowAttributes(hStartWnd, RGB(212, 208, 200), 125, LWA_COLORKEY);
 Label3.Caption := 'flat transparent';
 end;
 
 Однако при этом области с прозрачным цветом станут действительно прозрачными, т.е. нечувствительными к кликам мыши.
 |  
|   | alone (статус: Посетитель), 4 июля 2007, 13:07 [#2]:Под "прозрачной" я понимаю не полностью прозрачную панель, а полупрозрачную, наверно мне следовало бы употребить это слово. Попытаюсь получше объяснить, чего бы мне хотелось добиться. Панель сворачивается, а потом при наведении курсора снова разворачивается. Так вот после этого панель становится размытой, а не полупрозрачной, а хотелось бы, чтобы панель оставалась прозрачной, даже если поменять обои. |  
|   | Матвеев Игорь Владимирович (статус: Студент), 4 июля 2007, 15:38 [#3]:Не знаю как оно это у Вас так получается, у меня все работает как часы. Если после сворачивания полупрозрачной панели развернуть ее опять панель перерисовывается, сохраняя прозрачность, соответственно никаких дефектов не остается. 
 Попробуйте мой код на другой доступной системе.
 |  
|   | alone (статус: Посетитель), 4 июля 2007, 15:46 [#4]:К сожалению, Игорь Владимирович, у меня нет возможности попробовать Ваш код на другой системе, по крайней мере сегодня. Скажите, а на какой системе испытывали Ваш код Вы? |  
|   | Матвеев Игорь Владимирович (статус: Студент), 5 июля 2007, 03:05 [#5]:Проверял на WinXP SP 2 как с включенными, так и с отключенными визуальными стилями. |  
|   | alone (статус: Посетитель), 5 июля 2007, 22:51 [#6]:У меня XP HE. Не знаю, почему у меня не так работает... |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |