Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-69489
Николай Быков
2002-11-01 18:05
2002.11.21
Встреча Мастаков в Новосибирске


3-69146
Max Zyuzin
2002-10-30 08:41
2002.11.21
Совет нужен по IB


3-69161
Explorer
2002-10-31 12:03
2002.11.21
Лог на 6 Гб!!!


8-69447
QueenOfRain
2002-04-27 10:36
2002.11.21
Объясните, плиз


14-69571
VDen
2002-11-04 19:24
2002.11.21
Любимый СофтАйс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский