Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2009, 03:37   #1
SONce
Пользователь
 
Регистрация: 13.04.2009
Сообщений: 21
По умолчанию Отмена попапа

Есть компонент попап меню, как при каком либо условии не дать ему открыться? Копал копал, ничего не нашол.
SONce вне форума Ответить с цитированием
Старый 18.04.2009, 06:48   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

У PopupMenu установить свойство AutoPopup в False.
В процедуре, связанной с событием OnMouseDown того компонента, для которого предназначено меню проверять свое условие и показывать или не показывать PopupMenu. Пример для формы:
Код:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
                               Shift: TShiftState; X, Y: Integer);
var P : TPoint;
begin
  if (Button = mbRight) and (<условие, по которому меню показывается>) then begin
    //преобразование клиентских координат мыши в экранные, т.к. метод Popup требует экранные
    P := ClientToScreen(Point(X, Y)); 
    PopupMenu1.Popup(P.X, P.Y);
  end;
end;
Если меню должно показываться для другого компонента на форме, то преобразование координат должен вызывать этот другой компонент:
Код:
...
    P := TListBox(Sender).ClientToScreen(Point(X, Y)); 
...
Другой вариант основанный на том факте, что при скрытии всех элементов меню оно не показывается. В процедуре, связанной с событием OnPopup PopupMenu проверять условие и в зависимости от него показывать или скрывать все элементы:
Код:
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var I : Integer;
begin
  if Edit1.Text = '1' then   //условие, по которому меню показывается
    for I := 0 to PopupMenu1.Items.Count-1 do
      PopupMenu1.Items[I].Visible := True
  else
    for I := 0 to PopupMenu1.Items.Count-1 do
      PopupMenu1.Items[I].Visible := False
end;

Последний раз редактировалось Скандербег; 18.04.2009 в 07:23.
Скандербег вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отмена удаления записи Хитрец БД в Delphi 2 12.04.2009 23:14
отмена печати на принтере в Delphi Юliana Общие вопросы Delphi 2 29.01.2008 19:51
Отмена учета регистра Македонский Общие вопросы Delphi 7 12.09.2007 09:41
Отмена запроса на сохранение SlipKorn Microsoft Office Excel 1 14.06.2007 00:17