Lazarus. Один PopuMenu для нескольких элементов.

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
KOL48
новенький
Сообщения: 14
Зарегистрирован: 16.04.2010 10:10:48

Lazarus. Один PopuMenu для нескольких элементов.

Сообщение KOL48 »

Здравствуйте.

Кратко условие задачи. На форме имеется несколько элементов Shape. При левом клике на каждом элементе появляется падающее меню, состоящее из четырех пунктов. По каждому пункту будет запускаться системный браузер, в адресную строку которого будет подставляться IP-адрес в зависимости от кликнутого шейпа.

Вопрос: можно ли использовать один единственный элемент PopupMenu для обработки событий от каждого шейпа? Если да, то каким образом. Как PopupMenu узнает от какого Shape пришло событие?

Использование элементов Shape желательно, но не обязательно. Сойдут и Label.

Фрагменты кода, ссылки на теорию категорически приветствуются.

Спасибо.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

KOL48 писал(а):Вопрос: можно ли использовать один единственный элемент PopupMenu для обработки событий от каждого шейпа? Если да, то каким образом. Как PopupMenu узнает от какого Shape пришло событие?

повесь один общий обработчик OnMouseDown для всех шейпов.
и проверяй - если была нажата правая кнопка мышки, то запоминай какой шейп был нажат.
Здесь же можешь заполнять PopupMenu как тебе будет угодно.

Код: Выделить всё

procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton; ...);
begin
  if Button = mbRight then begin
    PressedShape:=Sender as TShape;
    //сейчас вылетит птичка!
    ...
  end;
end;


на момент появления PopupMenu на экране, ты будешь знать (в PressedShape) кто именно был нажат.
KOL48
новенький
Сообщения: 14
Зарегистрирован: 16.04.2010 10:10:48

Сообщение KOL48 »

А переменная PressedShape какого типа?
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

KOL48 писал(а):А переменная PressedShape какого типа?


Изображение TShape
Ответить