Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.04;
Скачать: CL | DM;

Вниз

Как получить 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
1-10703
Rav
2003-08-18 19:35
2003.09.04
Ms Excel


14-10902
race1
2003-08-17 15:41
2003.09.04
2 dates to 1


7-10999
tan
2003-06-20 10:22
2003.09.04
считывание с COM-порта с помощью int14?


1-10820
sasami737
2003-08-12 00:39
2003.09.04
Установка компонентов


3-10608
Vadim_aka
2003-08-13 16:23
2003.09.04
Как парсировать ТХТ файл в БД InterBase.