Хочу урасить форму и сделать её как в Висте. А именно. Я хочу узнать, как сделать снимок той части экрана, которая находится под формой, это изображение поместить на компонент TImage, изображение растянуть по всей форме и применить к этому изображению эфферк Blur, чтобы форма выглядела как прозрачное запотевшее стекло. Заранее спасибо .
мисс_граффити
27.06.2007 21:28
Просто изменить прозрачность формы - не устроит?
volvo
27.06.2007 21:42
Просто прозрачность не даст эффекта запотевшего стекла. Для этого надо снять скриншот... Проблема в другом - допустим, при старте приложения снять его не проблема:
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;
(на форме - один TImage привязанный к размерам формы)
, но что ты будешь делать при перетягивании окна по экрану? Каждый раз снимать скриншот? Система повесится...
The PRO
29.06.2007 22:21
Нет.
Неточно снимает скриншот того, что под формой.
А насчёт того, что я буду делать при перетягивании окна по экрану - я буду менять фон формы только тогда, когда положение формы будет зафиксировано на экране.
Добавить 1 или 2 пикселя, кстати, можешь и вручную, если для тебя это неточно...
мисс_граффити
29.06.2007 23:48
Перетягивание - не единственная проблема. У других окон есть привычка закрываться (ну например у касперского есть "закрыть окно при завершении проверки"). Если часть окна находилась под формой, а часть вне нее, может получиться интересная картинка ;)
Добавить 1 или 2 пикселя, кстати, можешь и вручную, если для тебя это неточно...
Программа снимает скриншот правильно только по событию Form1.OnCreate. А например если поместить на форму кнопку и поставить ту процедуру, что ты написал, под событие Button1.OnClick, скриншот уже будет сниматься неправильно.
hardcase
30.06.2007 16:36
В любом случае нужно сперва отключить Border у формы - у каждого пользователя свои темы в винде, и везде их ширина бортика и высота заголовка отличаются. Тогда размер окна совпадет с прямоугольником, который получаем через ClientRect.
volvo
3.07.2007 22:15
Цитата
А например если поместить на форму кнопку
, то поставь вот эту процедуру:
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;