Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.07.2010, 18:41
Аватар для PeKpyT
PeKpyT PeKpyT вне форума
Прохожий
 
Регистрация: 06.07.2010
Адрес: Internet
Сообщения: 3
Репутация: 10
По умолчанию Прозрачность в Delphi

Можно сделать так чтобы только форма была прозрачной, а компоненты которые на ней расположены оставались нормальными? и как это делается? (еще вопрос можно ли сделать только часть формы прозрачной?)

Последний раз редактировалось PeKpyT, 06.07.2010 в 18:56.
Ответить с цитированием
  #2  
Старый 06.07.2010, 20:02
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Да можно.

Свойство формы TransparentColor := true;
TransparentColorValue:=ClGreen;

все что будет зеленое будет прозрачным.

2-ой вопрос да можно.
выполняем пункт 1. цвет формы ставим green кидаем панель и растягиваем на половину.
Ответить с цитированием
  #3  
Старый 06.07.2010, 20:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Смотря как стоит задача.
В общем случае, прозрачность части формы делается через регионы. Это самый правильный путь. Кстати, скины используют именно этот путь. Все остальное - это обходной путь для реализации ПОЧТИ того, что хочется. Еще, начиная с Delphi 7 можно управлять полу-прозрачностью всей формы (вместе со всеми компонентами, которые на форме расположены). Это делается с помощью средств операйионной системы и, соответсвенно, дает делать только так, как расчитано и ни как иначе.
Ответить с цитированием
  #4  
Старый 06.07.2010, 20:31
Аватар для PeKpyT
PeKpyT PeKpyT вне форума
Прохожий
 
Регистрация: 06.07.2010
Адрес: Internet
Сообщения: 3
Репутация: 10
По умолчанию

Black Raider
Цитата:
Да можно.

Свойство формы TransparentColor := true;
TransparentColorValue:=ClGreen;

все что будет зеленое будет прозрачным.

Это чото нето! форма ссловно "дырявая" получается, а мне нужно именно прозрачная, ктому же комп как то напрягается, да еще и к правому краю монитора "прилипает". А можно ли ето реализовать спомощью свойства AlphaBlendValue?

lmikle
Цитата:
Смотря как стоит задача.

Вообщем мне нужно чтобы форма была прозрачной приблизительно как при AlphaBlendValue=220, а остальные элементы управления расположеные на форме имели нормальную прозрачность!
Ответить с цитированием
  #5  
Старый 06.07.2010, 21:03
Аватар для urahara
urahara urahara вне форума
Новичок
 
Регистрация: 16.01.2010
Сообщения: 86
Репутация: 35
По умолчанию

Цитата:
Сообщение от PeKpyT
Black Raider
Вообщем мне нужно чтобы форма была прозрачной приблизительно как при AlphaBlendValue=220, а остальные элементы управления расположеные на форме имели нормальную прозрачность!
способ 1. две формы на одной прозрачность в 220, поверх вторую с кнопками, обрезав лишние используя регионы.
способ 2. UpdateLayeredWindow.

во вторым способам не справишься наверняка.
__________________
Arrrgh
Ответить с цитированием
  #6  
Старый 06.07.2010, 22:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Если делать честно, то надо писать свою форму, которая реализует прозрачность не за счет возможностей windows. Т.е. она как-бы не прозрачная, но сама отрисовывает на канве то, что скрыто под ней. При этом компоненты будут работать нормально.
Ответить с цитированием
  #7  
Старый 06.07.2010, 22:31
Аватар для urahara
urahara urahara вне форума
Новичок
 
Регистрация: 16.01.2010
Сообщения: 86
Репутация: 35
По умолчанию

Цитата:
Сообщение от lmikle
Если делать честно, то надо писать свою форму, которая реализует прозрачность не за счет возможностей windows. Т.е. она как-бы не прозрачная, но сама отрисовывает на канве то, что скрыто под ней. При этом компоненты будут работать нормально.
ну тогда же это лагать будет или ты знаешь способ?
__________________
Arrrgh
Ответить с цитированием
  #8  
Старый 06.07.2010, 22:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

ну почему сразу лагать.
если делать аккуратно, то это не так и напряжно для компа.
собственно, вопрос только в одном - как получить изображение под формой. Остальное делается на ура и никак не тормозит.
Ответить с цитированием
  #9  
Старый 06.07.2010, 23:27
Аватар для urahara
urahara urahara вне форума
Новичок
 
Регистрация: 16.01.2010
Сообщения: 86
Репутация: 35
По умолчанию

Цитата:
Сообщение от lmikle
ну почему сразу лагать.
если делать аккуратно, то это не так и напряжно для компа.
собственно, вопрос только в одном - как получить изображение под формой. Остальное делается на ура и никак не тормозит.
лагать не в смысле тормозит, а в смысле задержка получении этого самое изображения.
__________________
Arrrgh
Ответить с цитированием
  #10  
Старый 06.07.2010, 23:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

ну, при очень быстрых перемещениях - возможно. однако, в таком случае пользователь все-равно фиг чего увидит
Ответить с цитированием
  #11  
Старый 06.07.2010, 23:59
Аватар для urahara
urahara urahara вне форума
Новичок
 
Регистрация: 16.01.2010
Сообщения: 86
Репутация: 35
По умолчанию

Цитата:
Сообщение от lmikle
ну, при очень быстрых перемещениях - возможно. однако, в таком случае пользователь все-равно фиг чего увидит
примерчик можно?
__________________
Arrrgh
Ответить с цитированием
  #12  
Старый 07.07.2010, 01:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Нет, на вскидку не напишу - надо порыться как получать картинку под формочкой. Если сделаешь этот код, то с быстрым отображением помогу. Самому копаться просто лень, бо как мне это нафиг не надо.
Ответить с цитированием
  #13  
Старый 07.07.2010, 01:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

На:
Код:
procedure TForm1.FormPaint(Sender: TObject);
var
  C : TCanvas;
  H : THandle;
  R : TRect;
begin
  C := TCanvas.Create;
  H := GetDesktopWindow;
  C.Handle := GetWindowDC(H);
  R := Rect(0,0,Screen.Width,Screen.Height);
  If H <> 0 Then GetWindowRect(H,R);
  Self.Canvas.CopyRect(Rect(0,0,Width,Height),C,Rect(Left,Top,Left + Width,Top + Height));
  C.Free;
end;

Немножко не то, но очень близко. Дальше дотачивай сам.
Ответить с цитированием
  #14  
Старый 07.07.2010, 20:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

еще на 95 таким образом делал прозрачность (встроенной то нет) - ничего не тормозило, код не остался. по памяти: запоминать что под формой нужно в WM_ERASEBKGND, рисовать в WM_PAINT
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:09.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025