Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
ВнизКак получить Sender объекта на котором кликнули попупменюшкой Найти похожие ветки
← →
pvv (2003-08-24 05:53) [0]Здраствуйте Мастера, если не по теме, то скажите где спросить.
Есть несколько объектов на любом из них кликаю правой кнопкой мышки и в пункте меню делаю что-либо. Не хочется писать много процедур для каждого объекта. Отсюда вопрос, как получить сендер объекта на котором вызван попуп. Впроцедуру попупменюклика передается сендер пункта попупменю. Хочется сделать что-то типа:
(Sender as TImage).Picture.LoadFromFile(...);
Смог вычислить только имя компонента (типа MyImg), а что дальше не знаю. Может кто подскажет.
За любые идеи блогадарю.
PS: Можно ответ или сампл мне на емайл PVVladimir@mail.ru, просто редко бываю в инете, а почту чаще смотрю.
← →
TAMROF (2003-08-24 07:34) [1]This example uses two edit boxes, two memos, and one pop-up menu on a form. The pop-up menu contains Cut, Copy, and Paste commands. This code makes the pop-up menu available to both edit boxes and both memos:
procedure TForm1.FormCreate(Sender: TObject);
begin
PopupMenu1.AutoPopup := True;
Edit1.PopupMenu := PopupMenu1;
Edit2.PopupMenu := PopupMenu1;
Memo1.PopupMenu := PopupMenu1;
Memo2.PopupMenu := PopupMenu1;
end;
These are the cut, copy, and paste OnClick events for the commands on the pop-up menu.
procedure TForm1.Copy1Click(Sender: TObject);
begin
if PopupMenu1.PopupComponent = Edit1 then
Edit1.CopyToClipboard
elseif PopupMenu1.PopupComponent = Edit2 then
Edit2.CopyToClipboard
else if PopupMenu1.PopupComponent = Memo1 then
Memo1.CopyToClipboard
else if PopupMenu1.PopupComponent = Memo2 then
Memo2.CopyToClipboard
else
Beep;
end;
procedure TForm1.Cut1Click(Sender: TObject);
begin
if PopupMenu1.PopupComponent = Edit1 then
Edit1.CutToClipboard
elseif PopupMenu1.PopupComponent = Edit2 then
Edit2.CutToClipboard;
else if PopupMenu1.PopupComponent = Memo1 then
Memo1.CutToClipboard
else if PopupMenu1.PopupComponent = Memo2 then
Memo2.CutToClipboard
else
Beep;
end;
procedure TForm1.Paste1Click(Sender: TObject);
begin
if PopupMenu1.PopupComponent = Edit1 then
Edit1.PasteFromClipboard
else if PopupMenu1.PopupComponent = Edit2 then
Edit2.PasteFromClipboard;
else if PopupMenu1.PopupComponent = Memo1 then
Memo1.PastFromClipboard
else if PopupMenu1.PopupComponent = Memo2 then
Memo2.PasteFromClipboard
else
Beep;
end;
Что-нить понятно?
← →
Sheng (2003-08-24 10:23) [2]PopupMenu1.PopupComponent - и есть Sender
← →
Юрий Зотов (2003-08-24 10:47) [3]> Sheng © (24.08.03 10:23) [2]
Sender - это все же пункт меню, TMenuItem.
А PopupComponent - это другое.
> TAMROF (24.08.03 07:34) [1]
А если на форме еще 20 Edit"ов или Memo, то так и будем все перечислять? А если их 120?
Вот этот код сработает при любом количестве любых потомков TCustomEdit:
procedure TForm1.Cut1Click(Sender: TObject);
begin
if PopupMenu1.PopupComponent is TCustomEdit then
TCustomEdit(PopupMenu1.PopupComponent).CutToClipboard
else
Beep
end;
← →
TAMROF (2003-08-24 13:18) [4]Вообще-то речь не идет только о Edit-ах !
Поэтому
>А если на форме еще 20 Edit"ов или Memo, то так и будем все
>перечислять? А если их 120?
не уместно...
Речь идет о нескольких разных компонентах от разных потомков...
Вот проблема:
>Есть несколько объектов на любом из них кликаю правой кнопкой мышки...
2 pvv:
или не так?
← →
pvv (2003-08-24 15:18) [5]
> TAMROF (24.08.03 07:34) [1]
Спасибо, но про такой вариант я писал, что не очень.
Можно и через case.
Если конкретней, то есть 50 картинок на форме и я в них загружаю, редактирую и удаляю изображение изображение.
> Юрий Зотов © (24.08.03 10:47) [3]
> Вот этот код сработает при любом количестве любых потомков
> TCustomEdit:
>
> procedure TForm1.Cut1Click(Sender: TObject);
> begin
> if PopupMenu1.PopupComponent is TCustomEdit then
> TCustomEdit(PopupMenu1.PopupComponent).CutToClipboard
> else
> Beep
> end;
Вот это то, что мне надо было.
Спасибо всем. Я разобрался.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c