Форум: "Media";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
ВнизПрозрачные окна Найти похожие ветки
← →
Darlok (2002-05-15 15:57) [0]Привет всем!
Подскажите плиз, как работать с прозрачными окнами.
Если можно, то помогите примерами :)
← →
Song (2002-05-15 16:48) [1]Так же как и с обычными.. :)
← →
Darlok (2002-05-16 12:44) [2]А как быть с тем, что когда его перетаскиваеш, оно таскает с собой кусок Decktop - а :(.
Могу привести код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT);
end;
end.
← →
GL (2002-05-17 16:39) [3]Во-первых
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_LAYERED);
Во-вторых надо вызвать процедуру
SetLayeredWindowAttributes(Handle, nil, nAlpha, LWA_ALPHA);
На всякий случай
WS_EX_LAYERED = $00080000
LWA_ALPHA = 2
Ещё небольшая проблема: эта процедура не определена в Windows.pas, но её можно явно загрузить из User32.dll
← →
p^Zmei (2002-06-24 14:16) [4]Насчет SetLayeredWindowAttributes и WS_EX_LAYERED:
действительно присутствует в юзер32.длл, но ...
для винды2000 и ХР. В Вин9х такой нету 8((.
Поетому просто сдерай так:
public
procedure onMoveWindow(var Msg : TWMMove);message WM_MOVE;
//или TWMWINDOWPOSCHANGED и WM_WINDOWPOSCHANGED
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT);
Form1.Brush.Style:=bsClear;
end;
procedure TForm1.onMoveWindow(var Msg : TWMMove);
begin
inherited;
Invalidate;
//или RedrawWindow(Form1.Handle,RDW_DRAWFRAME+RDW_UPDATENOW);
end;
После перетаскивания окошко опять станет невидимым.
(Кроме неклиентской части - она будет глюковать, потому шта
перекрашивается на WM_NCPAINT).
Наибестейших Вам регардсов.
← →
REaliSt (2002-06-24 17:36) [5]В Дельфи 6 есть свойство AlphaBlending у TForm.
Только вот под 2000/XP only работает.
← →
K.o.Z (2002-07-31 18:22) [6]читай про регионы в Win32.hlp, а ими уж можно такое творить...
← →
Proton (2002-07-31 21:49) [7]
>SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT);
>SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_LAYERED);
один про фому, другой про ерему
вообще то SetWindowLong в приведенном вами виде не корректно
надо сначало
oldlong := GetWindowLong(Handle, GWL_EXSTYLE);
а затем
SetWindowLong(Handle, GWL_EXSTYLE, oldlong or WS_EX_LAYERED);
> Прозрачные окна [D6, Win95/98, Win2k]
а кокой смысл в таком окне ?
если на нем скажем нарисован рабочий стол а при нажатии ни чего не происходит ?
запугать юзера и помочь ему принять верное решение о удалении вашей программы ?
← →
DKuznets (2002-07-31 23:03) [8]Народ, вот походу другой вопрос... У меня форма не таскается, она просто прозрачная, просто Brush.Style:=bsClear... Но вот на ней метки стоят и постоянно текст меняется... Так вот новый текст появляется поверх старого - т.е. становится нечитаемым. Если убрать bsClear - то все нормально. Есть одна тонкость -
ExtendedStyle:=GetWindowLong(application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle or WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW);
В результате десктоп просто "просвечивает" через форму и она не мешает работе :)
Как это победить?
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c