Текущий архив: 2003.10.23;
Скачать: CL | DM;
Вниз
Прозрачная форма Найти похожие ветки
← →
Движняк (2003-10-12 01:10) [0]Нужно сделать прозрачную форму, но не с помощью AlphaBlend так как программа должна работать под win 98, и не с помощью CreateRectRgn так как на форме будут анимированные гифы с прозрачным фоном. Пожалуйста, подскажите, как можно сделать реально прозрачную форму может, есть какой-нибудь компонент?
← →
Zergling (2003-10-12 06:25) [1]1. Фень Юань кажися в своей книге описывал некую функцию экспортируемую из DLL для win98. Но он ее нерекамендует использовать т.к. имеется утечка памяти. Шас подсказать немогу т.к. умной книги под рукой нет.
2. Начать изучать DirectDraw :)
3. Если найдеш быстрый доступ к пикселям окна, то сюда :)
http://delphimaster.net/view/4-1060073468/
← →
Yrtimd (2003-10-12 07:08) [2]Изображение рабочего стола копировать умеешь?
Снимок экрана, тобишь?
Ну, так и байай его на форму без бордеров, а сверху рисуй свой скин. Правда обрабатывать драг энд дроп и ресайз надо будет самостоятельно!.. ;)
← →
Zergling (2003-10-12 07:13) [3]http://delphigfx.mastak.ru/libs.htm
← →
Delphi5.01 (2003-10-12 09:20) [4]Nado FormAsRGN ili tipa chtoto takoe, no esli ti v Win2k ili XP to tam avtomatom rabotaet prozracnost, u formi est svoistvo. Delphi6 imeu vvidu
Jelau udachi
← →
DeMoN-777 (2003-10-12 13:26) [5]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
protected
procedure RebuildWindowRgn;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.RebuildWindowRgn;
var
FullRgn, Rgn: THandle;
ClientX, ClientY, I: Integer;
begin
// определяем относительные координаты клиенской части
ClientX:= (Width - ClientWidth) div 2;
ClientY:= Height - ClientHeight - ClientX;
// создаем регион для всей формы
FullRgn:= CreateRectRgn(0, 0, Width, Height);
// создаем регион для клиентской части формы
// и вычитаем его из FullRgn
Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
// теперь добавляем к FullRgn регионы каждого контрольного элемента
for I:= 0 to ControlCount -1 do with Controls[I] do
begin
Rgn:= CreateRectRgn(ClientX + Left, ClientY + Top, ClientX + Left +Width, ClientY + Top + Height);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
end;
// устанавливаем новый регион окна
SetWindowRgn(Handle, FullRgn, True);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
HorzScrollBar.Visible:= False;
VertScrollBar.Visible:= False;
// строим новый регион
RebuildWindowRgn;
end;
end.
← →
Zergling (2003-10-13 08:02) [6]Движняк (12.10.03 01:10)
Всетаки не совсем понятно, какая прозрачность имеется ввиду: окно не стандартной формы (регион) или Alpa-прозрачность?
Отвечаю по первому своему посту, пункт 1.
Из книги:
Win98/2000 для расширеннного стиля окна есть флаг WS_EX_LAYERED
WM_CREATE:
begin
SetWindowLong(WC_HWND, GWL_EXSTYLE, GetWindowLong(WC_HWND, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(WC_HWND, RGB(0, 0, 1), $C0, LWA_ALPHA or LWA_COLORKEY);
end;
У меня не работает. Говорит, что в USER32.DLL нет SetLayeredWindowAttributes, посмсотрел с помощью IDA и впрямь нет :) (видать ошибся Фень Юань), хотя по MSDN:
The SetLayeredWindowAttributes function sets the opacity and transparency color key of a layered window.
Header Declared in Winuser.h, include Windows.h
Import library User32.lib
Minimum operating systems Included in Windows 95, Windows NT 3.1
Страницы: 1 вся ветка
Текущий архив: 2003.10.23;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.009 c