![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с прозрачной формой.
49 Cent © (2006-05-02 13:57:00)Использую код для формы:
Brush.Style:=bsClear;
На форме есть картинка. Когда передвигаю картинку на прозрачной форме остаются следы жизнедеятельности (старые положения картинки, всякие надписи с других окон и.т.д).
Прозрачное окно крайне важно. Как бы избежать появление всяких постороних изображений. Пробовал делать Repaint, но не помогает. Подскажите как быть, а?
antonn (2006-05-02 17:36:00) [1]
procedure TMainForm.trans(i:byte);
const WS_EX_LAYERED = $80000;
LWA_COLORKEY = $00000001;
LWA_ALPHA = $00000002;
type TSetLayeredWindowAttributes = function(hWnd : HWND; crKey : DWORD;bAlpha : Byte; dwFlags : DWORD) : BOOL; stdcall;
var SetLayeredWindowAttributes : TSetLayeredWindowAttributes;
hUser32 : HINST;
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
hUser32 := LoadLibrary('user32.dll');
if hUser32 <> 0 then
begin
try
SetLayeredWindowAttributes := GetProcAddress(hUser32, 'SetLayeredWindowAttributes');
if Assigned(@SetLayeredWindowAttributes) then
//цвет "511" будет автоматически "вырезать" в форме "дырки", если такое не нужно, то LWA_COLORKEY удвлить
SetLayeredWindowAttributes(Handle, 511, Byte(i), LWA_ALPHA or LWA_COLORKEY);
finally
FreeLibrary(hUser32);
end;
end;
end;
DiamondShark (2006-05-02 14:57:00) [2]Что значит не работает? Я ж не с потолка взял, только что написал и запустил.
ОС какая?
А поисковики много разной ерунды выдают. Всему верить, что-ли?
49 Cent (2006-05-02 14:50:00) [3]Ээээ.. как бы не работает. А поисковик выдает на запрос "прозрачная форма" примерно такие варианты:
http://itby.ru/content/view/902/40/
DiamondShark (2006-05-02 14:18:00) [4]Brush.Style:=bsClear не имеет никакого отношения к прозрачности формы.
Вот вариант для Win2000 и выше:
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
protected
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
implementation
{$R *.DFM}
const
WS_EX_LAYERED = $00080000;
LWA_COLORKEY = $00000001;
LWA_ALPHA = $00000002;
function SetLayeredWindowAttributes(
hwnd: HWND;
crKey: COLORREF;
bAlpha: BYTE;
dwFlags: DWORD
): BOOL; stdcall; external 'user32.dll';
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_LAYERED;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Color := $FEFEFE;
SetLayeredWindowAttributes(Handle, $FEFEFE, 0, LWA_COLORKEY);
end;