Вверх ↑
Этот топик читают: Гость
Ответов: 876
Рейтинг: 101
#1: 2010-10-15 14:40:47 ЛС | профиль | цитата
Не знаю как в других программах сделано, но хотелось бы знать как сделать в HiAsm

menu.png


Add(MainForm,14842589,245,161)
{
Width=300
Height=200
Color=3158064
WinStyle=1
Caption="test"
BorderStyle=4
DragForm=0
KeyPreview=1
TransparentColor=0
Position=1
TransparentManager="fix"
Point(onDblClick)
Point(Handle)
Point(doLeft)
Point(doTop)
Point(onMouseDown)
link(onMouseDown,3949968:doEvent1,[])
}
Add(PopupMenuEx,4790511,448,196)
{
EndItemRight=0
Menu=#9:111111111|9:222222222|9:333333333|9:444444444|4:Quit|
GutterLineOn=1
Frame=1
Font=[Tahoma,8,0,16777215,204]
BackColor=3158064
BackColorImage=0
SelColorLight=0
SelColorDark=3947580
LineColorLight=0
LineColorDark=3158064
CheckColor=3158064
SelCheckColor=3158064
SelColorText=16777215
Bitmaps=[]
AutoBackClrImg=1
}
Add(IndexToChanel,3659208,371,189)
{
link(onEvent2,4790511:doPopupHere,[])
}
Add(RGN_SetToWindow,611444,504,147)
{
link(Handle,4790511:Handle,[(510,135)(558,135)(558,249)(454,249)])
}
Add(RGN_OutlinePicture,16742805,371,147)
{
Picture=[ZIP5E82000078DAEDC9A111C020104451D209920A28201E898D482969FC72C3202253C0FB33CFEC9EE37ACAAAA796EE34D351EADADBFEBF450400000000000000000000000000000000000000000000000000000000000000003FBC794C4561]
link(onOutlinePicture,611444:doSetRegion,[])
}
Add(Hub,3949968,301,189)
{
link(onEvent1,3659208:doEvent,[])
link(onEvent2,16742805:doOutlinePicture,[(323,202)(323,153)])
}
карма: 1

0
файлы: 1menu.png [981B] [421]
Разработчик
Ответов: 26170
Рейтинг: 2127
#2: 2010-10-15 15:44:39 ЛС | профиль | цитата
Это самопальное меню, а не стандартный класс. В PopUpMenuEx убрать рамку не получится
карма: 22

0
Ответов: 1376
Рейтинг: 197
#3: 2010-10-15 16:11:27 ЛС | профиль | цитата
flud, и ты своё меню сделай
code_21047.txt
карма: 1

0
файлы: 1code_21047.txt [813B] [115]
Ответов: 876
Рейтинг: 101
#4: 2010-10-16 02:32:12 ЛС | профиль | цитата
nesco писал(а):
Это самопальное меню, а не стандартный класс


а как же тогда сие чудо рисует XP
menu_xp.png
карма: 1

0
файлы: 1menu_xp.png [62.9KB] [354]
Разработчик
Ответов: 26170
Рейтинг: 2127
#5: 2010-10-16 02:38:33 ЛС | профиль | цитата
flud писал(а):
а как же тогда сие чудо рисует XP

Я могу повторить цвет фона, но не могу убрать раму 3D, это может сделать только система в своей теме. Я же ясно сказал, что
nesco писал(а):
В PopUpMenuEx убрать рамку не получится
Я уже давно пробовал это, у меня не получилось. Не просите меня сделть то, что я не могу сделать из того, что есть в наличии
карма: 22

0
Ответов: 876
Рейтинг: 101
#6: 2010-10-16 06:35:31 ЛС | профиль | цитата
а я убрал правдо коряво..


Add(MainForm,14842589,126,147)
{
Width=300
Height=200
Color=3158064
WinStyle=1
Caption="text"
BorderStyle=4
DragForm=0
KeyPreview=1
TransparentColor=0
Position=1
TransparentManager="fix"
Point(onDblClick)
Point(Handle)
Point(doLeft)
Point(doTop)
Point(onMouseDown)
Point(onMouseUp)
link(onMouseDown,3659208:doEvent,[])
link(onMouseUp,7727793:doEvent,[(205,188)(205,223)])
}
Add(PopupMenuEx,4790511,385,182)
{
EndItemRight=0
Menu=#9:111111111|9:222222222|9:333333333|9:444444444|4:Quit|
GutterLineOn=1
Frame=1
Font=[Tahoma,8,0,16777215,204]
BackColor=3158064
BackColorImage=0
SelColorLight=0
SelColorDark=3947580
LineColorLight=0
LineColorDark=3158064
CheckColor=3158064
SelCheckColor=3158064
SelColorText=16777215
Bitmaps=[]
AutoBackClrImg=1
}
Add(IndexToChanel,3659208,252,175)
{
link(onEvent2,4790511:doPopupHere,[])
}
Add(MouseEvent,13860606,385,224)
{
Point(Handle)
}
Add(IndexToChanel,7727793,252,217)
{
link(onEvent2,6756256:doOutlinePicture,[(303,230)(303,272)])
}
Add(RGN_SetToWindow,4876953,399,266)
{
link(Handle,13860606:Handle,[])
}
Add(RGN_OutlinePicture,6756256,322,266)
{
Picture=[ZIPEE05000078DA73F27DC7CA00067640AC01C419401C0DC48C4008021BA0F220C0846032FCFFFF1F841100228697FF00493FFB287F943FCA1FE58FF2C9E6935AFE02000A97A0C7]
link(onOutlinePicture,4876953:doSetRegion,[])
}
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#7: 2010-10-16 12:24:18 ЛС | профиль | цитата
flud писал(а):
а я убрал

Ты убрал внешними компонентами, а не самим PopUpMenuEx. Такое решение, тоже имее право на существование
карма: 22

0
Ответов: 876
Рейтинг: 101
#8: 2010-10-16 14:25:40 ЛС | профиль | цитата
nesco а ты мог бы подсказать куда мне вставить такой код
GetCursorPos(pos)
h_menu := WindowFromPoint(pos)
которая даст мне хендл тока что созданного меню как в примере выше, проблема в том что я все время получаю хендл главной формы так еще после вызова в меню
идея простоя подредактировать XPMenus.pas для моих нужд сделать проверку чтоб регионы к другим окнам не лепил итд, надеюсь будет быстрее и не заметно.
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#9: 2010-10-16 14:28:39 ЛС | профиль | цитата
flud писал(а):
куда мне вставить такой код
GetCursorPos(pos)
h_menu := WindowFromPoint(pos)

В IC
карма: 22

0
Ответов: 876
Рейтинг: 101
#10: 2010-10-16 14:34:33 ЛС | профиль | цитата
лол ну это то я знаю

проблема в том что я все время получаю хендл главной формы так еще после вызова в меню

или может сделать задержку что бы программа успела открыть менюшку ? и как ее сделать задержку ? sleep(10) тупо подвисает прогу
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#11: 2010-10-16 15:13:47 ЛС | профиль | цитата
Попробуй затолкать в TXPMenu._OnMes, но там надо подумать в какое сообщение засунуть это дело

------------ Дoбавленo в 15.13:
Скорее всего, вот сюда надо воткнуть -- WM_MENUSELECT
карма: 22

1
Голосовали:flud
Ответов: 876
Рейтинг: 101
#12: 2010-10-16 15:14:13 ЛС | профиль | цитата
не как во всех случаях возвращает хендл главной формы.
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#13: 2010-10-16 16:01:43 ЛС | профиль | цитата
flud, попробуй вот здесь поставить -- TXPMenu._DrawItem перед

   with PMenu(Sender){$ifndef F_P}^{$endif} do begin
карма: 22

1
Голосовали:flud
Ответов: 876
Рейтинг: 101
#14: 2010-10-17 01:14:59 ЛС | профиль | цитата
Спасибо nesco результат есть, но..

вот измененная функция

#pas
function GetGutterWidth(IsLine: Boolean): Integer;
begin
with PMenu(Sender){$ifndef F_P}^{$endif} do begin

GetCursorPos(pos);
h_menu := WindowFromPoint(pos);
region := CreateRectRgn(4,4,101,87);
GetClassName(h_menu, WinClass, SizeOf(WinClass));

if String(WinClass) = '#32768' then begin
SetWindowRgn(h_menu, region, true);
end;

{ if Pointer(Bitmap)<>nil then begin
Result := Max(BitmapSize.bmWidth + 4, Rect.Bottom - Rect.Top);
if IsLine then
Result := Max(Result, TextExtent(Caption).cy + 7);
end else
if IsLine then
Result := TextExtent(Caption).cy + 7
else
Result := Rect.Bottom - Rect.Top + 3;}
end;
Result := Max(Result, ItemHeight) + 1;
end;

но было бы еще лучше если бы сделать расчеты по обрезанию ведь можно узнать размер меню вот там и получить нужный регион
а потом можно будет оформить как отдельный property _prop_СropBorder: true/false
карма: 1

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)