Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Вниз

Полупрозрачность   Найти похожие ветки 

 
EK   (2003-04-26 22:08) [0]

Очень нужно заставить компонент быть полупролзрачным.
например (мне нужно), TMemo.
Кто знает?
Заранее спасибо, а то в форуме по медиа никто не знает, вроде...


 
Yanis   (2003-04-26 22:51) [1]

Какой у тебя Delphi, если 7 или у друзей стоит, то посмотри примерчик, приблизительно по такому адресу:
D:\Program Files\Borland\Delphi7\Demos\ActionBands\AlphaBlendMenus


 
mike.dld   (2003-04-26 23:37) [2]

Есть такая функция (в модуле Windows):


SetLayeredWindowAttributes(hWnd: HWND; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD);


только в хэлпе про неё ничего не написано. Да, вообщем-то, и так всё понятно.


 
Yanis   (2003-04-26 23:59) [3]

Че то неработает!


 
EK   (2003-04-27 00:00) [4]

Щас попробую - скажу.


 
mike.dld   (2003-04-27 00:13) [5]


procedure SetAlphaBlend(Wnd: HWND; const Value: Integer);
const
LWA_COLORKEY=$00000001;
LWA_ALPHA=$00000002;
ULW_COLORKEY=$00000001;
ULW_ALPHA=$00000002;
ULW_OPAQUE=$00000004;
WS_EX_LAYERED=$00080000;
type
TSetLayeredWindowAttributes=
function( hwnd: Integer; crKey: TColor; bAlpha: Byte; dwFlags: DWORD )
: Boolean; stdcall;
var
SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
User32: THandle;
dw: DWORD;
begin
if Value = fAlphaBlend then Exit;
fAlphaBlend := Value;
User32 := GetModuleHandle( "User32" );
SetLayeredWindowAttributes := GetProcAddress( User32,
"SetLayeredWindowAttributes" );
if Assigned( SetLayeredWindowAttributes ) then
begin
dw := GetWindowLong( Wnd, GWL_EXSTYLE );
if Byte( Value ) < 255 then
begin
SetWindowLong( Wnd, GWL_EXSTYLE, dw or WS_EX_LAYERED );
SetLayeredWindowAttributes( Wnd, 0, Value and $FF, LWA_ALPHA);
end
else
SetWindowLong( Wnd, GWL_EXSTYLE, dw and not WS_EX_LAYERED );
end;
end;


Это немного модифицированная процедура из KOL


 
EK   (2003-04-27 00:18) [6]

1)
то mike.did и вообще народ!
mike.did, ты, видать, дело говоришь, но у меня БЕДА:
SetLayeredWindowAttributes выглядит довольно перспективно,но
просит "USER32.DLL". Если он небольшой, очень прошу, скиньте,а?
ведь наверняка штука нужная!

сюда: vgekata@mail.ru

2)Yanis и др.:
2.1)А почему не работает?
2.2)Насчет дельфей. У меня Д6.
Чтобы не скинули все это в "потрепаться" ответтье ТОЛЬКО на 2 маленьких вопроса:
2.2.1)Не будет ли у меня проблем с импортами в D7 из В7?
2.2.2)AlphaBlendMenus - это то, что нужно, ведь так?


 
EK   (2003-04-27 00:30) [7]

Ошибка:
2.2.2)D7/D6.


 
mike.dld   (2003-04-27 00:38) [8]

Удивлен, почему у тебя нет user32.dll, посмотри в $WinDir$\system или $WinDir$\system32, если нет, тогда скажи, какая у тебя версия, не все же скидывать.


 
Shurik   (2003-04-27 01:02) [9]

Долго смеялся по поводу отсутствия User32.dll. А как ОС-то работает?


 
EK   (2003-04-27 01:16) [10]

Да...с User32.dll - это я маху дал. ОС работает. Нашел его. Просто там в другом проблема была.
У меня, наверное, последний небольшой вопрос к mike.did:
в SetAlphaBlend:
переменная fAlphaBlend ни где не объявлена.
Глобальная? Тогда где объявлена глобальная? У меня нет такой.
Если локальная, то нафига она нужна в процедуре?
Закомментировал 2 первые строчки с fAlphaBlend - прога работает, но ничего не меняется.
Может, я не то передаю:
procedure ...ButtonClick(Sender:TObject)
begin
SetAlphaBlend(Memo1.Handle, 128);
...
Просто, в этой области я весьма не силен...



 
mike.dld   (2003-04-27 01:17) [11]

Вот ещё, только что откопал на MSDN. Можно, наверное, использовать при отрисовке.


The AlphaBlend function displays bitmaps that have transparent or semitransparent pixels.

BOOL AlphaBlend(
HDC hdcDest, // handle to destination DC
int nXOriginDest, // x-coord of upper-left corner
int nYOriginDest, // y-coord of upper-left corner
int nWidthDest, // destination width
int nHeightDest, // destination height
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of upper-left corner
int nYOriginSrc, // y-coord of upper-left corner
int nWidthSrc, // source width
int nHeightSrc, // source height
BLENDFUNCTION blendFunction // alpha-blending function
);
Parameter
hdcDest
[in] Handle to the destination device context.
nXOriginDest
[in] Specifies the x-coordinate, in logical units, of the upper-left corner of the destination rectangle.
nYOriginDest
[in] Specifies the y-coordinate, in logical units, of the upper-left corner of the destination rectangle.
nWidthDest
[in] Specifies the width, in logical units, of the destination rectangle.
nHeightDest
[in] Specifies the height, in logical units, of the destination rectangle.
hdcSrc
[in] Handle to the source device context.
nXOriginSrc
[in] Specifies the x-coordinate, in logical units, of the upper-left corner of the source rectangle.
nYOriginSrc
[in] Specifies the y-coordinate, in logical units, of the upper-left corner of the source rectangle.
nWidthSrc
[in] Specifies the width, in logical units, of the source rectangle.
nHeightSrc
[in] Specifies the height, in logical units, of the source rectangle.
blendFunction
[in] Specifies the alpha-blending function for source and destination bitmaps, a global alpha value to be applied to the entire source bitmap, and format information for the source bitmap. The source and destination blend functions are currently limited to AC_SRC_OVER. See the BLENDFUNCTION and EMRALPHABLEND structures.


 
mike.dld   (2003-04-27 01:19) [12]

fAlphaBlend там не надо. Но вот что: SetLayeredWindowAttributes позволяет изменить степень прозрачности только для главного окна


 
mike.dld   (2003-04-27 01:33) [13]

Например, для DWORD:


var i,j: DWORD;
key: HKEY;
...
i := FunctionName(Param1,...)
...
RegOpenKeyEx(HKEY_CURRENT_USER,"Software\Program",0,KEY_WRITE,key);
RegSetValueEx(key,"Param_To_Set",nil,REG_DWORD,@i,@j);
RegCloseKey(key);
...


 
mike.dld   (2003-04-27 01:34) [14]

Извините, не туда написал :)


 
Avenger [NhT]   (2003-04-27 13:33) [15]

SetLayeredWindowAttributes есть тока в НТ/2к/хр поэтому
чтоб прога работала в 9х грузи процу через LoadLibrary!


 
Illusion   (2003-04-27 14:14) [16]

AlphaBlend вообще не для этого! Она может изменять альфа состовляющую для любого DC! В том числе (кстати) и для окон который мутят при помощи wglCreateContext (типа OpenGL в полупрозрачном окне). А чтобы юзаели его к окнам... Да, можно получить контекст окна... Но что-то я никогда н видел...



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.027 c
1-84096
Raki
2003-06-10 14:40
2003.06.26
Путь к файлу


14-84606
Silentium!
2003-06-09 12:36
2003.06.26
Адресная книга


1-84079
snower
2003-06-08 00:40
2003.06.26
передать в dll


1-84358
Александр-И
2003-06-16 17:09
2003.06.26
LabeledEdit + UpDown


1-84307
Мыш
2003-06-15 17:55
2003.06.26
встраиваемый плагин





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский