Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AlphaBlend только в тех местах где нет компонентов 
:(
    Опции темы
Delphist
Дата 8.6.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(Mephisto @  8.6.2007,  18:00 Найти цитируемый пост)
Вот как дельфина делает альфабленд:

Ну покажи, хотя бы напримере 2-х компонентов


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Sunvas
Дата 8.6.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Общем долго-долго я над этим игрался. Использовал всю мощь сего форума - никак не получается для контролов на форме сделать. Как-то видно винда определяет что не форма это.
Мой приговор - невозможно.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
misha_mike
Дата 9.6.2007, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



Ну почему сразу невозможно? Тут уже предлагали: делаем два одинаковых по размеру окна, одно с альфа-каналом без контролов, а над ним второе с контролами и WS_EX_TRANSPARENT. Остается синхронизировать все операции над ними и обеспечить всегда правильный взаимный z-order. Изврат, но если заказчик так хочет изврат -- пусть его и получает, кто ж ему лекарь?
PM MAIL   Вверх
Delphist
Дата 9.6.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(Sunvas @  8.6.2007,  22:31 Найти цитируемый пост)
Мой приговор - невозможно. 

Ну а как же заставка AutoCad 2006


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Alexeis
Дата 9.6.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Я даже попробовал его. Трудновато 
Цитата(misha_mike @  9.6.2007,  00:56 Найти цитируемый пост)
обеспечить всегда правильный взаимный z-order

 А так выглядит очень даже ничего.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sw04
Дата 9.6.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 22.1.2007
Где: Ufa

Репутация: нет
Всего: 18



Чем Вам не угодил пример из статьи прозрачности форм? 
получается ровно так как надо - все компоненты изображены нормально, а сама форма прозрачная.
Есть минус в перерисовке при любом движении окна, но другого решения пока не видел.


--------------------
<удалено администрацией>
PM   Вверх
Alexeis
Дата 9.6.2007, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Delphist @  9.6.2007,  10:44 Найти цитируемый пост)
Ну а как же заставка AutoCad 2006 

  Так она наверное без конролов совсем.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Yanis
Дата 9.6.2007, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Вот какой изврат я нарисовал smile

Прежде чем качать можете глянуть скрин.
Основной принцип заключается в создании второй прозрачной формы, которая всегда располагается под основной формой. Дырки в основной форме я добился с помощью её свойсвта Transparent и TransparentColor. Скачивайте, смотрите.

Это сообщение отредактировал(а) Yanis - 9.6.2007, 22:52

Присоединённый файл ( Кол-во скачиваний: 69 )
Присоединённый файл  test.rar 240,74 Kb


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 9.6.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Yanis, Ну ты бы хоть рассказал вкратце, что главная форма у тебя полностью прозрачная и на ней все компоненты, а нижняя форма полупрозрачная и пустая с убранным заголовком. Вот только есть один ньюанс, когда по форме кликаешь, то она чуток подмигивает, но обработчик быстро поднимает на верх нужную форму. Теперь можно нижнюю сделать вообще с изменяющейся прозрачностью. Работает быстро и почти безупречно. Зачет.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Yanis
Дата 9.6.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Alexeis
Всё таки лучше один раз потрогать, чем сто раз прочитать smile
Я думаю, что с не VCL-евскими окошками вообще летать будет.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Yanis
Дата 9.6.2007, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Alexeis
Твои слова 
Цитата(Alexeis @  9.6.2007,  23:40 Найти цитируемый пост)
Вот только есть один ньюанс, когда по форме кликаешь, то она чуток подмигивает, но обработчик быстро поднимает на верх нужную форму.
 дали мне стимул добиться, что бы окно не мигало smile
Достаточно заменить:
Код
procedure WMActivate(var M: TWMActivate); message WM_ACTIVATE;
procedure TForm2.WMActivate(var M: TWMActivate);
begin
  if M.Active <> WA_INACTIVE then
    begin
      Form1.Show;
      Form1.SetSamePos(Form1, Self);
    end;
end;

на
Код
procedure WMMouseActivate(var M: TWMMouseActivate); message WM_MOUSEACTIVATE;
procedure TForm2.WMMouseActivate(var M: TWMMouseActivate);
begin
  M.Result := MA_NOACTIVATEANDEAT;
end;


Исправленный исходник прилагается. В этот раз только код.

Присоединённый файл ( Кол-во скачиваний: 71 )
Присоединённый файл  test.rar 29,51 Kb


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
ivan219
Дата 10.6.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Eсли можно раскажите суть метода а то я так и непонял smile 

Это сообщение отредактировал(а) ivan219 - 10.6.2007, 11:05
PM MAIL ICQ   Вверх
Yanis
Дата 10.6.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(ivan219 @  10.6.2007,  11:56 Найти цитируемый пост)
Eсли можно раскажите суть метода а то я так и непонял

А ты скачай. Там же всё просто.
Попробуй такой код на пустой форме:
Код
  TransparentColor := True;
  TransparentColorValue := clPurple;


Все контролы с цветом clPurple, расположенные теперь на этой форме будут дырявить форму.
Если дописать:
Код
Color := clPurple;
, то форма будет без клиентской области вместо этого будет дырка smile
Что бы нельзя было кликнуть «под формой», я располагаю форму с прозрачностью 1 под главной формой.

Это сообщение отредактировал(а) Yanis - 10.6.2007, 11:25


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 10.6.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Yanis @  10.6.2007,  11:24 Найти цитируемый пост)
Что бы нельзя было кликнуть «под формой», я располагаю форму с прозрачностью 1 под главной формой.

  Более того нижнюю форму можно сделать с градиентной прозрачностью, т.е. плавно растворяющуюся к  краям. Это делается при помощи UpdateLayeredWindow. В ней можно задать прозрачность каждого пиксела. Как я понял эта функция была введена для создания стартовых окошек, потому на ней не видны контролы. Но она очень даже подошла бы как фон к примеру Яниса.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 10.6.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Вот гибрид на основе примеров Яниса и Гирдера. Теперь в качестве фона у нас круговой градиент похожий на стекло бутылки.

Код

procedure TForm1.FormActivate(Sender: TObject);
begin
  if bLoaded then
    Exit;
  with Form2 do
    begin
     { AlphaBlend := True;  //убрана равномерная прозрачность
      AlphaBlendValue := 1; }
      BorderStyle := bsNone;
      SetSamePos(Self, Form2);
      Show;
      SetWindowPos(Handle, Form1.Handle, 0, 0, 0, 0,
                   SWP_NOMOVE or SWP_NOSIZE);
      Form1.Show;
    end;
  bLoaded := True;
end;


Код

procedure TForm2.FormResize(Sender: TObject);
type
  TRGBAarray = array[0..32000] of RGBQUAD;
  PRGBAarray = ^TRGBAarray;
var
  Bmp  : TBitmap;
  BF   : TBlendFunction;
  PA   : PRGBAarray;
  i, j : integer;
  cx, cy : integer;
  LA, L : integer;
  Alpha : integer;
  b : boolean;
  FBmpSize    : TSize;
  FBmpTopLeft :TPoint;
begin
  Bmp := TBitmap.Create;
  Bmp.PixelFormat := pf32Bit;
  Bmp.Width  := Width;
  Bmp.Height := Height;
  Bmp.Canvas.Brush.Color := RGB(0, 40, 0);
  Bmp.Canvas.FillRect(Rect(0, 0, Width, Height));

  SetWindowLong(Handle, GWL_EXSTYLE,
                GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  BF.BlendOp             := AC_SRC_OVER;
  BF.BlendFlags          := 0;
  BF.SourceConstantAlpha := 255;
  BF.AlphaFormat         := AC_SRC_ALPHA;

  LA := round(sqrt(sqr(Bmp.Width) + sqr(Bmp.Height)) / 2);
  cx := Bmp.Width div 2;
  cy := Bmp.Height div 2;

  for i := 0 to Bmp.Height-1
  do
    begin
      PA := Bmp.ScanLine[i];
      for j := 0 to Bmp.Width - 1
      do
        begin
          L     := round(sqrt(sqr(cx - j) + sqr(cy - i)));
          Alpha := 255 - ((L * 255) div LA);
          PA[j].rgbReserved := Alpha;
        end;
    end;

  FBmpSize.cx := Width;
  FBmpSize.cy := Height;
  FBmpTopLeft := Point(0, 0);

  UpdateLayeredWindow(Handle, 0, nil,
                      @FBmpSize, Bmp.Canvas.Handle, @FBmpTopLeft,
                      clNone, @BF, ULW_ALPHA);
  Bmp.Free;

end;





Присоединённый файл ( Кол-во скачиваний: 133 )
Присоединённый файл  transForm.rar 233,42 Kb


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.