![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#31
|
||||
|
||||
|
Прочитайте внимательно мое сообщение, я сказал что присваиваю хэндл главному окну и работает только на форме, а на объектах не выводится меню. Пробовал присвоить хэндл другому окну - вовсе не работает.
|
|
#32
|
|||
|
|||
|
а с какого он должен работать на других объектах если присвон главному окну\форме
![]() |
|
#33
|
||||
|
||||
|
Цитата:
|
|
#34
|
|||
|
|||
|
битва экстрасенсов выходит по пятницам, если что
а кому, и чего, и каким образом ты там присваиваешь, тут в душе никто неебзнает |
|
#35
|
||||
|
||||
|
Вот часть кода:
Код:
function WindowProc(Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):
LRESULT; stdcall;
var
WndRect: TRect;
Height: Integer;
CursorPos: TPoint;
begin
// Иинициализация переменнной Height
Height := 0;
// Инициализация результата функции
Result := 0;
// Обработка сообщений
case Msg of
WM_CREATE:
begin
// Создаем прогрессбар с заданными параметрами
PlayBar := CreateWindowEx(WS_EX_CLIENTEDGE, 'MSCtls_Progress32', '',
WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL or PBS_SMOOTH, 0, 0, 0, 0,
Wnd, 0, hInstance, nil);
// Устанавливаем параметры плейлиста и отображаем
SetWindowPos(PlayBar, 0, 0, 0, 0, PBHeigth, SWP_SHOWWINDOW);
// Обработка события клика по прогрессбару
hPlayBarPrev := Pointer(GetWindowLong(PlayBar, GWL_WNDPROC));
SetWindowLong(PlayBar, GWL_WNDPROC, Longint(@PlayBarWndProc));
// Создаем плейлист с заданными параметрами
PlayList := CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', '', WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL, 0, 0, 0, 0, Wnd, 0, hInstance, nil);
// Устанавливаем позицию плейлиста и отображаем
SetWindowPos(PlayList, HWND_BOTTOM, 0, 0, Height, Width,
SWP_SHOWWINDOW);
// Создаем Popup меню
PopupMenu := CreatePopupMenu;
end;
// Сообщение при закрытии формы
WM_DESTROY:
begin
PostQuitMessage(0);
// Отрицательный результат
Result := 0;
// Завершаем процедуру
Exit
end;
WM_SIZE:
begin
// Получаем размер клиентской части окна
GetClientRect(Wnd, WndRect);
// Узнаем ширину главного окна
Width := (WndRect.Right - WndRect.Left);
// Узнаем высоту главного окна
Height := (WndRect.Bottom - WndRect.Top);
// Изменяем рамер ползунка прокрутки
MoveWindow(PlayBar, PBINDENT, PBTopSpace, Width - PBINDENT * 2,
PBHeigth, True);
// Изменяем рамер плейлиста
MoveWindow(PlayList, 0, PLTopSpace, Width, Height, True);
end;
WM_RBUTTONDOWN:
begin
// Получаем кординаты мыиши
GetCursorPos(CursorPos);
// Отображаем Popup меню
TrackPopupMenu(PopupMenu, TPM_LEFTALIGN or TPM_RIGHTBUTTON, CursorPos.X, CursorPos.Y, 0, Wnd, nil);
end;
else
// Положительний результат
Result := DefWindowProc(Wnd, Msg, wParam, lParam)
end;
end; |
|
#36
|
|||
|
|||
|
на вскидку, не уверен что WM_RBUTTONDOWN должно срабатывать на чем либо кроме главного окна
|
| Этот пользователь сказал Спасибо robt за это полезное сообщение: | ||
sariman (04.12.2012)
| ||
|
#37
|
||||
|
||||
|
Как тогда быть?
|
|
#38
|
||||
|
||||
|
И ещё раз - subclassing. Только тогда ты сможешь присвоить меню куда-либо кроме главного окна. VCL расхолаживает, там давно всё сабклассировано.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (04.12.2012)
| ||
|
#39
|
||||
|
||||
|
Спасибо, сабклассировал) Думал есть выход по-проще.
Теперь появились такие вопросы: 1. Как обработать щелчки по элементам в PopupMenu? 2. Как в PopupMenu добавить разделитель элементов "-"? 3. Как добавлять Items в ListBox. Заранее спасибо. |
|
#40
|
||||
|
||||
|
Смотрю всерьёз за API взялся.
1. WM_COMMAND 2. Лучше всего создавать меню в ресурсном файле. 3. LB_ADDSTRING |
|
#41
|
||||
|
||||
|
Да-да) А можно по-подробнее про 1-е и 2-е? Как обрабатывать WM_COMMAND и как хранить в ресурсном файле PopupMenu?
|
|
#42
|
||||
|
||||
|
Вызов по клику (не только PopupMenu)
Код:
WM_COMMAND :
begin
case LOWORD(wParam) of
ID_POPUP : ; // что-то делаем
end;
end;Код:
// идентификаторы
#define ID_POPUPMENU $1000
#define ID_POPUP0 $1010
#define ID_POPUP0 $1020
#define ID_POPUP0 $1030
#define ID_POPUP0 $1040
// Popup menu
ID_POPUPMENU MENUEX
BEGIN
POPUP "Item1" ID_POPUP0
BEGIN
MENUITEM "SubItem1", ID_POPUP1
MENUITEM "SubItem2", ID_POPUP2
MENUITEM "SubItem3", ID_POPUP3
END
END |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (05.12.2012)
| ||
|
#43
|
||||
|
||||
|
читай внимательно справку!
Цитата:
Код:
AppendMenu(APopup, MF_SEPARATOR, 0, nil); |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
sariman (05.12.2012)
| ||
|
#44
|
||||
|
||||
|
Не хочет компилиться
![]() |
|
#45
|
||||
|
||||
|
APopup замени на свой
|