Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

Проблема с прозрачной формой.   Найти похожие ветки 

 
49 Cent   (2006-05-02 13:57) [0]

Использую код для формы:
Brush.Style:=bsClear;

На форме есть картинка. Когда передвигаю картинку на прозрачной форме остаются следы жизнедеятельности (старые положения картинки, всякие надписи с других окон и.т.д).

Прозрачное окно крайне важно. Как бы избежать появление всяких постороних изображений. Пробовал делать Repaint, но не помогает. Подскажите как быть, а?


 
DiamondShark ©   (2006-05-02 14:18) [1]

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;


 
49 Cent   (2006-05-02 14:50) [2]

Ээээ.. как бы не работает. А поисковик выдает на запрос "прозрачная форма" примерно такие варианты:
http://itby.ru/content/view/902/40/


 
DiamondShark ©   (2006-05-02 14:57) [3]

Что значит не работает? Я ж не с потолка взял, только что написал и запустил.
ОС какая?

А поисковики много разной ерунды выдают. Всему верить, что-ли?


 
antonn ©   (2006-05-02 17:36) [4]

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;



Страницы: 1 вся ветка

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.059 c
2-1146867723
tanya11
2006-05-06 02:22
2006.05.21
направление кнопки


6-1137578474
ronyn
2006-01-18 13:01
2006.05.21
местоположение компа


15-1145954816
Strate
2006-04-25 12:46
2006.05.21
Создание djvu


2-1146513225
Mr tray
2006-05-01 23:53
2006.05.21
Получить иконку запущенного приложения


2-1146460256
it_work
2006-05-01 09:10
2006.05.21
кодировка при получении письма