Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 695

/ вопрос открыт /

Здравствуйте, уважаемые эксперты! Можно ли средствами Delphi сделать панель меню "Пуск" полупрозрачной?

alone Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

alone (статус: Посетитель), 4 июля 2007, 13:07 [#2]:

Под "прозрачной" я понимаю не полностью прозрачную панель, а полупрозрачную, наверно мне следовало бы употребить это слово. Попытаюсь получше объяснить, чего бы мне хотелось добиться. Панель сворачивается, а потом при наведении курсора снова разворачивается. Так вот после этого панель становится размытой, а не полупрозрачной, а хотелось бы, чтобы панель оставалась прозрачной, даже если поменять обои.
Матвеев Игорь Владимирович

Матвеев Игорь Владимирович (статус: Студент), 4 июля 2007, 15:38 [#3]:

Не знаю как оно это у Вас так получается, у меня все работает как часы. Если после сворачивания полупрозрачной панели развернуть ее опять панель перерисовывается, сохраняя прозрачность, соответственно никаких дефектов не остается.

Попробуйте мой код на другой доступной системе.
alone

alone (статус: Посетитель), 4 июля 2007, 15:46 [#4]:

К сожалению, Игорь Владимирович, у меня нет возможности попробовать Ваш код на другой системе, по крайней мере сегодня. Скажите, а на какой системе испытывали Ваш код Вы?
Матвеев Игорь Владимирович

Матвеев Игорь Владимирович (статус: Студент), 5 июля 2007, 03:05 [#5]:

Проверял на WinXP SP 2 как с включенными, так и с отключенными визуальными стилями.
alone

alone (статус: Посетитель), 5 июля 2007, 22:51 [#6]:

У меня XP HE. Не знаю, почему у меня не так работает...

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.02 сек.