задний фон

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

задний фон

Сообщение azatsh » 17.08.2010 10:34:48

у меня есть форма на ней имейдж. у имейджа включаю свойство транспарент что бы фон не было видно. Как мне скрыть фон у формы, что бы только картинка была видна без ее фона.
azatsh
новенький
 
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Re: задний фон

Сообщение А.Н. » 29.08.2010 21:03:29

В смысле? "Форма по картинке"? Используйте регионы. Но это платформозависимо. Только для виндовс.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: задний фон

Сообщение azatsh » 30.08.2010 11:04:52

Мне нужно дырку в форме сделать=) в том то и дело, что мне для линукса надо.
azatsh
новенький
 
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Re: задний фон

Сообщение Brainenjii » 30.08.2010 11:39:08

работает только для win или qt. Для GTK на форуме видел не LCL решение
Код: Выделить всё
  Form1.AlphaBlend := TRUE;
  Form1.AlphaBlendValue := Random(255);
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: задний фон

Сообщение VirtUX » 30.08.2010 13:13:07

Brainenjii писал(а):работает только для win или qt. Для GTK на форуме видел не LCL решение
Код: Выделить всё
  Form1.AlphaBlend := TRUE;
  Form1.AlphaBlendValue := Random(255);

Это будет делать прозрачность для всей формы. А нужно, насколько я понял, для определенного региона.
Мне кажется без вмешательства в Form.Paint не обойтись. Но как правильно сделать я не в курсе.

Добавлено спустя 15 минут 5 секунд:
Хотя, как оказалось, метод Paint в CustomControls ничего не делает :?
Интересно, в какой момент и где происходит прорисовка формы?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: задний фон

Сообщение Alexx2000 » 30.08.2010 15:15:25

Вот на этот пример можно посмотреть - lazarus\examples\shapedcontrols, теоретически платформонезависимо.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 489
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: задний фон

Сообщение А.Н. » 30.08.2010 15:36:19

Мне нужно дырку в форме сделать=) в том то и дело, что мне для линукса надо.

Вопрос что понимать под "дыркой".
Возможное решение (в теории):
1. Взять текущее окно и рабочий стол на котором показана форма.
2. Определить координаты окна.
3. Скрыть окно (если это нужно).
4. Скопировать область рабочего стола "под окном".
5. Скомпоновать с фоном.

Визуально - это будет "дырка". Но "дотянуться" до рабочего стола через неё не удастся. :-)
Я сомневаюсь, что есть кроссплатформенные решения. С другой стороны...
Кажется, есть плееры под Линупс, типа xmms, только у которых скины со всякими рюшечками.
О, посмотрел. Да, обёртка для xine. Форма сделана по картинке.
От оконного менеджера не зависит никоим образом.
Вариант - скачать исходники и найти как это делается:
http://www.xine-project.org/home
Также, может, по теме что-то в найдётся через поисковик.

Для винды же - использовать регионы. Универсального решения нету.

Интересно, в какой момент и где происходит прорисовка формы?

В обработчике сообщения WM_PAINT. Процедура WMPaint.

Добавлено спустя 7 минут 49 секунд:
Alexx2000 писал(а):Вот на этот пример можно посмотреть - lazarus\examples\shapedcontrols, теоретически платформонезависимо.


Хм... Кстати, любопытно. Есть два перегруженных метода. Один для винды работает точно через регионы.
Второй, я чего-то не разобрался. Но, скорее всего, тоже.
Код: Выделить всё
procedure TWinControl.SetShape(AShape: TBitmap);
begin
  if not HandleAllocated then
    Exit;

  if (AShape <> nil) and (AShape.Width = Width) and (AShape.Height = Height) then
    TWSWinControlClass(WidgetSetClass).SetShape(Self, AShape.Handle)
  else
  if AShape = nil then
    TWSWinControlClass(WidgetSetClass).SetShape(Self, 0)
end;

procedure TWinControl.SetShape(AShape: TRegion);
begin
  LCLIntf.SetWindowRgn(Handle, AShape.Reference.Handle, True);
end;
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: задний фон

Сообщение VirtUX » 30.08.2010 17:07:13

Alexx2000 писал(а):Вот на этот пример можно посмотреть - lazarus\examples\shapedcontrols, теоретически платформонезависимо.

Спасибо! Натолкнуло на мысль - добавить рюшек к софтине :)
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: задний фон

Сообщение VirtUX » 07.09.2011 15:03:33

Удалено
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 247

Рейтинг@Mail.ru
cron