Страница 1 из 1

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

СообщениеДобавлено: 16.06.2010 15:53:12
KOL48
Здравствуйте.

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

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

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

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

Спасибо.

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

СообщениеДобавлено: 16.06.2010 16:06:28
скалогрыз
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) кто именно был нажат.

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

СообщениеДобавлено: 16.06.2010 16:21:03
KOL48
А переменная PressedShape какого типа?

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

СообщениеДобавлено: 16.06.2010 16:28:21
скалогрыз
KOL48 писал(а):А переменная PressedShape какого типа?


Изображение TShape