Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.037 c
5-1132169560
DrPass
2005-11-16 22:32
2006.05.21
Проблема с наследованием формы через OTA


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


8-1134657965
seleman
2005-12-15 17:46
2006.05.21
Вопрос по видео


2-1146724155
Мурзилка
2006-05-04 10:29
2006.05.21
выпадающее меню у кнопки ToolButton1


2-1146511238
Glex
2006-05-01 23:20
2006.05.21
Как считать строку из typed файла?




   Наверх