IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Стиль формы как в Windows Vista
сообщение
Сообщение #1


Билл Гейтс =)
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Хочу урасить форму и сделать её как в Висте.
А именно.
Я хочу узнать, как сделать снимок той части экрана, которая
находится под формой, это изображение поместить на компонент
TImage, изображение растянуть по всей форме и применить
к этому изображению эфферк Blur, чтобы форма выглядела
как прозрачное запотевшее стекло. Заранее спасибо good.gif .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Просто изменить прозрачность формы - не устроит?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Просто прозрачность не даст эффекта запотевшего стекла. Для этого надо снять скриншот... Проблема в другом - допустим, при старте приложения снять его не проблема:

procedure TForm1.FormCreate(Sender: TObject);
var DesktopBitmap: TBitmap;
begin
DesktopBitmap := TBitmap.Create;
with DesktopBitmap do begin
Width := Form1.Width + 5;
Height := Form1.Height + 30; // <--- чтоб заголовок формы не мешал
end;

BitBlt(DesktopBitmap.Canvas.Handle,
0,0,Form1.Width+5,Form1.Height+30,
GetDC(GetDesktopWindow),Form1.Left+5,Form1.Top+30,SrcCopy);
Image1.Picture.Bitmap.Assign(DesktopBitmap);
DesktopBitmap.Free;
end;

(на форме - один TImage привязанный к размерам формы)

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

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Билл Гейтс =)
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Нет.

Неточно снимает скриншот того, что под формой.

А насчёт того, что я буду делать при перетягивании окна по экрану -
я буду менять фон формы только тогда, когда положение формы будет
зафиксировано на экране.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
Неточно снимает скриншот того, что под формой.
Это ты внукам рассказывать будешь:
Прикрепленное изображение

Добавить 1 или 2 пикселя, кстати, можешь и вручную, если для тебя это неточно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Перетягивание - не единственная проблема.
У других окон есть привычка закрываться (ну например у касперского есть "закрыть окно при завершении проверки"). Если часть окна находилась под формой, а часть вне нее, может получиться интересная картинка ;)


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Билл Гейтс =)
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 29.06.2007 19:51) *

Это ты внукам рассказывать будешь:
Прикрепленное изображение

Добавить 1 или 2 пикселя, кстати, можешь и вручную, если для тебя это неточно...


Программа снимает скриншот правильно только по событию Form1.OnCreate.
А например если поместить на форму кнопку и поставить ту процедуру, что ты написал,
под событие Button1.OnClick, скриншот уже будет сниматься неправильно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


В любом случае нужно сперва отключить Border у формы - у каждого пользователя свои темы в винде, и везде их ширина бортика и высота заголовка отличаются.
Тогда размер окна совпадет с прямоугольником, который получаем через ClientRect.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
А например если поместить на форму кнопку
, то поставь вот эту процедуру:
procedure TForm1.GetBg;
var
DesktopBitmap: TBitmap;
R: TRect;
P: TPoint;
begin
DesktopBitmap := TBitmap.Create;
R := GetClientRect;
with DesktopBitmap do begin
Width := R.Right - R.Left;
Height := R.Bottom - R.Top;
end;

P := ClientToScreen(R.TopLeft);
BitBlt(DesktopBitmap.Canvas.Handle,
0,0,Form1.Width - Form1.BorderWidth,Form1.Height - Form1.BorderWidth,
GetDC(GetDesktopWindow), P.X, P.Y, SRCCOPY);
DesktopBitmap.PixelFormat := pf24bit;

GBlur(DesktopBitmap, 2); // Взято из DRKB

Image1.Picture.Bitmap.Assign(DesktopBitmap);
DesktopBitmap.Free;
end;


+ не забудь в OnCreate формы добавить:

...
AlphaBlendValue := 254;
AlphaBlend := True;
...
(запусти с этими строками, и без них, поймешь зачем это нужно)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Теоритически можно постаить какой нибудь компанент типа Alpha Control...И нарисовать под него скин какой нужен...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 30.09.2020 13:42
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name