Форум: "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