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

Вниз

Меню   Найти похожие ветки 

 
_SuN_   (2007-02-02 18:56) [0]

Как сделать полупрозрачное меню, меню с горизонтально расположенными итемами?


 
GrayFace ©   (2007-02-03 09:52) [1]

Для горизонтально расположеных пунктов меняй свойство Break.

Вот полупрозрачное PopupMenu. (с MainMenu тфкой фокус не проходит)
type
 int = integer;

procedure SetLayeredAttribs(Handle:HWnd;
            AlphaBlend:boolean; AlphaBlendValue:byte;
            TransparentColor:boolean; TransparentColorValue:int);
const
 cUseAlpha: array [Boolean] of Integer = (0, LWA_ALPHA);
 cUseColorKey: array [Boolean] of Integer = (0, LWA_COLORKEY);
var
 Style: Integer;
begin
 if not CheckWin32Version(5, 0) then  exit;
 Style := GetWindowLong(Handle, GWL_EXSTYLE);
 if AlphaBlend or TransparentColor then
 begin
   if (Style and WS_EX_LAYERED) = 0 then
     SetWindowLong(Handle, GWL_EXSTYLE, Style or WS_EX_LAYERED);
   SetLayeredWindowAttributes(Handle, TransparentColorValue, AlphaBlendValue,
     cUseAlpha[AlphaBlend] or cUseColorKey[TransparentColor]);
 end else
 if (Style and WS_EX_LAYERED) <> 0 then
 begin
   SetWindowLong(Handle, GWL_EXSTYLE, Style and not WS_EX_LAYERED);
   RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
 end;
end;

var
 Hook: int;

function EditHookProc(Code, wParam:int; lParam:PMsg):int; stdcall;
begin
 if Code <> MSGF_MENU then
 begin
   Result:= CallNextHookEx(Hook, Code, wParam, int(lParam));
   exit;
 end;
 Result:=0;
 with lParam^ do
   if message = WM_PAINT then
   begin
     SetLayeredAttribs(hwnd, true, 180, false, 0);
     Result:=0;
   end else
     Result:= CallNextHookEx(Hook, Code, wParam, int(lParam));
end;

procedure HookMenu;
begin
 if Hook<>0 then  exit;
 Hook:= SetWindowsHookEx(WH_MSGFILTER, @EditHookProc, 0, GetCurrentThreadId);
 Win32Check(Hook<>0);
end;

procedure UnhookMenu;
begin
 if Hook = 0 then  exit;
 UnhookWindowsHookEx(Hook);
 Hook:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 HookMenu;
 with Mouse.CursorPos do
   PopupMenu1.Popup(X, Y);
 UnhookMenu;
end;


 
_SuN_   (2007-02-03 22:44) [2]

попробовал, становятся полупрозрачными все окна приложения, тоесть не пойдёт такой вариант (((((
а про размещение итемов в горизонтальном положении никто ничего не знает??? как это делает, например Windows Live Messenger выбор смайлов селан в таком меню


 
Olivetti   (2007-02-03 22:56) [3]

а про размещение итемов в горизонтальном положении никто ничего не знает??? как это делает, например Windows Live Messenger выбор смайлов селан в таком меню

Меню - тоже окно.

выбор смайлов селан в таком меню

В окне.

в меню

В окне.


 
GrayFace ©   (2007-02-04 22:20) [4]

_SuN_   (03.02.07 22:44) [2]
попробовал, становятся полупрозрачными все окна приложения

Странно.

_SuN_   (03.02.07 22:44) [2]
а про размещение итемов в горизонтальном положении никто ничего не знает???

GrayFace ©   (03.02.07 9:52) [1]
Для горизонтально расположеных пунктов меняй свойство Break.



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

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

Наверх




Память: 0.48 MB
Время: 0.053 c
15-1172906408
IMHO
2007-03-03 10:20
2007.04.01
Почему социализм уступил капитализму?


3-1167911522
r9000
2007-01-04 14:52
2007.04.01
Использование подключения к базе в dll -ке


3-1168459764
Kley
2007-01-10 23:09
2007.04.01
Поле в отчете


2-1173552150
Зм1й
2007-03-10 21:42
2007.04.01
Контроллы и потоки


1-1170841579
Krants
2007-02-07 12:46
2007.04.01
TTreeView одинарым кликом открыть список