|
|
Регистрация | << Правила форума >> | 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 расхолаживает, там давно всё сабклассировано.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (04.12.2012)
|
#39
|
||||
|
||||
Спасибо, сабклассировал) Думал есть выход по-проще.
Теперь появились такие вопросы: 1. Как обработать щелчки по элементам в PopupMenu? 2. Как в PopupMenu добавить разделитель элементов "-"? 3. Как добавлять Items в ListBox. Заранее спасибо. |
#40
|
||||
|
||||
Смотрю всерьёз за API взялся.
1. WM_COMMAND 2. Лучше всего создавать меню в ресурсном файле. 3. LB_ADDSTRING Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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 Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (05.12.2012)
|
#43
|
||||
|
||||
читай внимательно справку!
Цитата:
Код:
AppendMenu(APopup, MF_SEPARATOR, 0, nil); Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
sariman (05.12.2012)
|
#44
|
||||
|
||||
Не хочет компилиться
|
#45
|
||||
|
||||
APopup замени на свой
Пишу программы за еду. __________________ |