|
Вопрос # 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. Не знаю, почему у меня не так работает...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|