Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2003-12-03

Re: Еще вопросик

Здравствуйте !

> Спасибо, Виктор. Да, действительно, все гораздо проще.
>
> А как быть с прозрачностями? Причем, хотелось бы, чтобы прозрачнос
> ть могла быть
> различной для разных частей окошка, да еще чтоб работало на виндах
> поменьше,
> чем Win2000.

Смотрел описание SetLayeredWindowAttributes в MSDN 2003 -
там буквально написано :
Minimum operating systems Windows 95, Windows NT 3.1

Странно... Всегда думал, что она только в 98 - х виндах
появилась (это насчет Win2000).

А вот разная прозрачность для разных частей - даже не знаю что и
сказать... В винде такой поддержки нет.
В общем плане для изображений различная прозрачность достигается
выполнением квартернарных растровых операций с определенными
значениями данных альфа-канала. То есть есть изображение-источник,
изображение-приемник, маска (данные альфа-канала, каждый пиксел
которой и задает прозрачность соответствующего пиксела источника),
кисть (в общем случае кисть определает фрагменты изображения, в которых
производится альфа-слияние, то есть это как бы маска наложения).
В Win GDI, насколько я помню, то ли вообще квартернарные операции
не поддерживаются, то ли их всего пара.

Вообще, у окна может быть расширенный стиль WS_EX_TRANSPARENT.
Если его установить, то окно будет перерисовываться только после
перерисовки всех окон под ним. Пробовал как то использовать это
для реализации прозрачности - ничего хорошего - просто глюки (сильное
"моргание", смазывание изображения при пересечении границ других
окон).

Так что виндовыми средствами реализовать переменную прозрачность корректно,
наверно, лио нельзя, либо проблематично.

> Думаю, что сложно, поэтому особо не настаиваю на подд
> ержке старых
> виндов. Зато какое впечатление производит!

Да, раньше ка то тоже увлекся этим.
Кстати, в следующем номере рассылки
"Visual С++ - расширенное программирование"
(http://subscribe.ru/catalog/comp.soft.prog.qandacpp)
об этом тоже немного пойдет речь - там будет рассматриваться
создание компонента SplashScreen. Кстати, рассылку недавно перевели
в основной каталог (подписчиков за несколько дней стало 1681 - круто) !

Vic.

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.prog.prog&email=
http://subscribe.ru/ mailto:ask@subscribe.ru

   2003-12-03 21:47:41 (#29016)

Еще вопросик

Спасибо, Владимир, за такую показательную программулю. Все вполне ясно.

Есть одна волшебная функция :

int SetWindowRgn(
HWND hWnd, // handle to window
HRGN hRgn, // handle to region
BOOL bRedraw // window redraw option
);

и все :-)

Спасибо, Виктор. Да, действительно, все гораздо проще.

А как быть с прозрачностями? Причем, хотелось бы, чтобы прозрачность могла быть
различной для разных частей окошка, да еще чтоб работало на виндах поменьше,
чем Win2000. Думаю, что сложно, поэтому особо не настаиваю на поддержке старых
виндов. Зато какое впечатление производит!

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.prog.prog&email=
http://subscribe.ru/ mailto:ask@subscribe.ru

   2003-12-03 20:20:59 (#28971)

Re[3]: Прозрачность окон

Здравствуйте !

> 3 июня 2002 г., 02:41:39, ты намылил:
>
> VVV> LWA_ALPHA = 2
> VVV> LWA_COLORKEY, наверно = 1
>
> Супер!!! Всё работает!!!
> Big tnx, Victor.

Я рад :-)

> PS: Victor, а че у тебя 3 июня на компе? ;-)

Это я ставил прогу Visual Assist - классная примочка к VC++.
У VC иногда проблемы с выкидыванием подсказок - прога это
исправляет. Синтаксис как хочешь подсвечивает, и еще много полезных
функций. Только она проверяет время на компе, и если версия стара -
просится в инет. Вот я время и переводил.
Прогу, кстати, рекомендую всем кто юзает VC++.

Vic.

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.prog.prog&email=
http://subscribe.ru/ mailto:ask@subscribe.ru

   2003-12-03 16:54:42 (#28851)

PPC кодинг

Привет!
Кто-нибудь под PocketPC2002/Windows Mobile 2003 программит?

С уважением, Акулич СЕ

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.prog.prog&email=
http://subscribe.ru/ mailto:ask@subscribe.ru

   2003-12-03 10:50:19 (#28681)

Re[2]: Прозрачность окон

Здарова Victor,

3 июня 2002 г., 02:41:39, ты намылил:

VVV> LWA_ALPHA = 2
VVV> LWA_COLORKEY, наверно = 1

Супер!!! Всё работает!!!
Big tnx, Victor.

PS: Victor, а че у тебя 3 июня на компе? ;-)

   Томилов Александр 2003-12-03 03:54:26 (#28584)

Re: Прозрачность окон

Всем привет !

> Здарова, программеры.
>
> В win2k есть такая фича как прозрачность окон.
> Вызывается SetLayeredWindowAttributes(Handle, clBlack, 122,LWA_ALPHA);
> Я надыбал что SetLayeredWindowAttributes находится в USER32.DLL.

прототип такой :

BOOL SetLayeredWindowAttributes(
HWND hwnd,
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags
);

но это на C. На паскале - что то типа этого же должно быть.

> Вопрос шо такое LWA_ALPHA и чему равно.

это один из флагов, который можно передать в качестве
параметра dwFlags.

Их всего двеа :

LWA_COLORKEY - указывает на то, что параметр crKey задает
цвет пикселов, которые будут прозрачны.

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

LWA_ALPHA = 2
LWA_COLORKEY, наверно = 1

Еще прикол - для того, чтобы можно было сделать окно прозрачным,
у него должен стоять расширенный стиль
WS_EX_LAYERED (0x00080000)

Vic.

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.prog.prog&email=
http://subscribe.ru/ mailto:ask@subscribe.ru

   2003-12-03 01:48:02 (#28580)

Re: Есть тута программеры + непрямоугольные окна

Здарова программеры,

1 декабря 2003 г., 05:58:51, было намылено:

m> PS: А сколько человек подписано на этот дискуссионный лист, а то я
m> пока только двоих (вместе с вами) видел.
Есть, только я по delphi в основном. Но по API могу че-нить и
написать.

Ю> Народ, кто-нибудь делал оконное приложение, которое рисует не стандартные
прямоугольные
Ю> окна, которые всем порядком надоели, а произвольной формы, да еще со всякими
Ю> прозрачностями, как Winamp3?

1) Про непрямоугольные окна.
На форме TImage. Align=alClient
"Прозрачный" цвет берется из левого верхнего угла 1.bmp

unit UnitMain;

interface

uses
Windows, Messages, Graphics, Controls, Forms, ExtCtrls, Classes;

type
TFormMain = class(TForm)
ImageFormMain: TImage;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FormMain: TFormMain;
R:HRgn;

implementation

{$R *.dfm}

procedure TFormMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If ssLeft In Shift Then
Begin
ReleaseCapture;
SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION,0);
End;
end;

procedure TFormMain.FormCreate(Sender: TObject);
Var
X1,X,Y:Integer;
begin
X1:=-1;
R:=CreateRectRgn(0,0,0,0);
ImageFormMain.Picture.LoadFromFile('1.bmp');
FormMain.BorderStyle:=bsNone;
FormMain.Height:=ImageFormMain.Picture.Bitmap.Height;
FormMain.Width:=ImageFormMain.Picture.Bitmap.Width;
With ImageFormMain.Picture.Bitmap Do
For Y:=0 To Height-1 Do
For X:= 0 To Width-1 Do
If Canvas.Pixels[X,Y]<>Canvas.Pixels[0,0] Then
Begin If X1=-1 Then X1:=X; End
Else
If X1>-1 Then
Begin
CombineRgn(R,R,CreateRectRgn(X1,Y,X-1,Y+1),RGN_OR);
X1:=-1;
End;
SetWindowRgn(Handle,R,True);
SetWindowLong(Handle,GWL_EXSTYLE,0{WS_EX_LAYERED});
end;

end.

Про непрямоугольные окна 2
На форме TImage. Align=alClient
TTimer interval=100 enabled=true

unit UnitMain;

interface

uses
Windows, Messages, Graphics, Controls, Forms, ExtCtrls, Classes;

type
TFormMain = class(TForm)
ImageFormMain: TImage;
Timer: TTimer;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure TimerTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FormMain: TFormMain;
R: HRgn;

implementation

{$R *.dfm}

procedure TFormMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If ssLeft In Shift Then
Begin
ReleaseCapture;
SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION,0);
End;
end;

procedure TFormMain.FormCreate(Sender: TObject);
Var
X1,X,Y: Integer;
begin
X1 := -1;
R := CreateRectRgn(0,0,0,0);

ImageFormMain.Picture.LoadFromFile('1.bmp');
FormMain.BorderStyle := bsNone;
FormMain.Height := ImageFormMain.Picture.Bitmap.Height;
FormMain.Width := ImageFormMain.Picture.Bitmap.Width;

With ImageFormMain.Picture.Bitmap Do
For Y := 0 To Height-1 Do
For X := 0 To Width-1 Do
If Canvas.Pixels[X,Y] <> Canvas.Pixels[0,0] Then
Begin If X1=-1 Then X1 := X; End
Else
If X1>-1 Then
Begin
CombineRgn(R,R,CreateRectRgn(X1,Y,X-1,Y+1),RGN_OR);
X1 := -1;
End;
SetWindowRgn(Handle, R, True);
SetWindowLong(Handle, GWL_EXSTYLE, 0{WS_EX_LAYERED});
end;

procedure TFormMain.TimerTimer(Sender: TObject);
begin
If Timer.Tag = 255 Then Timer.Tag := -255;
If Timer.Tag > 0 Then
// SetLayeredWindowAttributes(Handle, 0, Timer.Tag, LWA_ALPHA)
Else
// SetLayeredWindowAttributes(Handle, 0, -Timer.Tag, LWA_ALPHA);
Timer.Tag := Timer.Tag+1;

end;

end.

2) Про A и A* ничего не слышал.

PS: Еще, мылы с аттачами запрещены здесь или нет, а то всем желающим
на мыло рассылать в облом?

   Томилов Александр 2003-12-03 01:08:18 (#28569)

Прозрачность окон

Здарова, программеры.

В win2k есть такая фича как прозрачность окон.
Вызывается SetLayeredWindowAttributes(Handle, clBlack, 122,LWA_ALPHA);
Я надыбал что SetLayeredWindowAttributes находится в USER32.DLL.
Вопрос шо такое LWA_ALPHA и чему равно.
Киньте описание SetLayeredWindowAttributes если есть.

   Томилов Александр 2003-12-03 01:08:09 (#28568)