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

Вниз

Прозрачные окна   Найти похожие ветки 

 
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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.017 c
14-69535
Феликс
2002-11-03 02:42
2002.11.21
Пардон, но вот нормальная версия программы


3-69170
battar
2002-10-24 22:25
2002.11.21
fastreport


1-69398
Сатир
2002-11-08 20:17
2002.11.21
Оптимизируйте конструкцию


3-69143
Tundra
2002-10-31 10:03
2002.11.21
Глюки с ADO


1-69286
Mi
2002-11-12 09:31
2002.11.21
Работа в Delphi с БД Access