Форум: "Основная";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
Внизразмеры PopupMenu Найти похожие ветки
← →
ZEE (2002-07-28 17:00) [0]Как узнать сабж перед тем как это меню "выпадет" чтобы правильно его расположить. Это для того чтобы менюшка (если в ней слишком много пунктов) не перекрывала собой кнопку под которой она должна "выпасть", а например сдвигать ее вправо от кнопки...
Спасибо всем ответившим.
← →
Юрий Зотов (2002-07-28 17:20) [1]Если меню поднимается прямым вызовом TrackPopupMenu, то последний параметр (prcRect) как раз и задает прямоугольник, который оно не должно перекрывать. Передавайте в нем прямоугольник Вашей кнопки (в экранных координатах), и все будет ОК.
А второй параметр (uFlags) определяет СПОСОБ, с помощью которого меню будет выравниваться, чтобы не перекрывать этот прямоугольник. Поэкспериментируйте - увидите как это происходит и выберете, что Вам больше подойдет.
← →
ZEE (2002-08-01 01:36) [2]>Юрий Зотов
Поэкспериментировал с TrackPopupMenu (до этого пользовал Popup у PopupMenu), но никак не получается нормально использовать параметр prcRect, у него тип PRect - типа указатель и как его инициализировать я что-то никак не въеду. Разъясните плиииз.
← →
Юрий Зотов (2002-08-01 05:58) [3]Бросьте на форму PopupMenu1 и Button1. В меню создайте несколько пунктов, а к OnClick кнопки прицепите такой обработчик:
procedure TForm1.Button1Click(Sender: TObject);
var
PMParams: TPMParams;
begin
with PMParams do
begin
cbSize := SizeOf(PMParams);
rcExclude := Rect(0, 0, 0, 0);
with Mouse.CursorPos do
TrackPopupMenuEx(PopupMenu1.Handle, TPM_HORIZONTAL, X, Y, Handle, @PMParams)
end
end;
Запустите программу и щелкните по кнопке. Меню показывается в позиции указателя мыши и перекрывает кнопку.
Теперь вместо строки
rcExclude := Rect(0, 0, 0, 0)
вставьте следующее:
rcExclude := Button1.BoundsRect;
MapWindowPoints(Handle, HWND_DESKTOP, rcExclude, 2);
Теперь меню автоматически сдвигается по горизонтали - так, чтобы не перекрывать кнопку (это и есть работа rcExclude). Если TPM_HORIZONTAL заменить на TPM_VERTICAL, то оно будет сдвигаться по вертикали.
Сместите форму так, чтобы кнопка на ней прижалась к правому нижнему углу экрана. Теперь меню будет показываться по-другому, но в любом случае никогда не перекроет кнопку.
Вот и все. Детали см. в справке API (TrackPopupMenuEx).
← →
ZEE (2002-08-01 15:53) [4]>Юрий Зотов
Что-то не так...
Строка
TrackPopupMenuEx(PopupMenu1.Handle, TPM_HORIZONTAL, X, Y, Handle, nil);
работает нормально, а строка
TrackPopupMenuEx(PopupMenu1.Handle, TPM_HORIZONTAL, X, Y, Handle, @PMParams);
никак не работает (меню не выскакивает)...
ЗЫ: неPMParams: TPMParams;
, аPMParams: PTPMParams;
← →
Юрий Зотов (2002-08-03 00:58) [5]Вот как раз в этом Вашем "ЗЫ" и вся проблема. Сделайте ТОЧНО как написано - и она исчезнет. Потому что САМА запись (TPMParams) и УКАЗАТЕЛЬ на эту запись (PTPMParams) - вещи совершенно разные.
Рекомендуемые темы:
Указатели и работа с динамической памятью.
Операция @ (взятие адреса).
Рекомендуемая литература:
В.В. Фаронов. Программирование в среде Turbo Pascal 5.0.
← →
ZEE (2002-08-04 02:21) [6]Так я ж это "ЗЫ" поставил потому что на
PMParams: TPMParams
Делфи ругается, а сPMParams: PTPMParams
- все впорядке (т.е. компилится)...
← →
Юрий Зотов (2002-08-04 11:28) [7]Код перед выкладкой проверялся, он работает. Проверьте, не пропущен ли символ @ в последнем параметре TrackPopupMenuEx.
← →
ZEE (2002-08-04 22:41) [8]O, Yeeeeesss! заработало!
Дело вот в чем:
неPMParams: TPMParams
и неPMParams: PTPMParams
, аPMParams: T TPMParams
- вот где собака порылась :)
← →
Юрий Зотов (2002-08-04 22:48) [9]Непонятно, ну да ладно. Главное - работает.
← →
ZEE (2002-08-05 01:41) [10]Да просто у вас в примере "очепятка" была: не TPMParams надо, а TTPMParams - одной буковки "T" не хватало - а я сразу не сообразил...
← →
Юрий Зотов (2002-08-05 08:46) [11]Да в том-то и дело, что ТОЧНО этот код у меня работает. Я же не просто так написал "код проверялся". Поэтому все равно непонятно. Но теперь это уже, наверное, неважно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c