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

Вниз

Подскажите, как создать TPopupMenu у любого виз. компанента   Найти похожие ветки 

 
mmms   (2005-07-08 15:04) [0]

Например, переделал под себя TLabel, как на нее можно "привязать" TPopupMenu, с парой любых менюшек?

в компаненте, от TLabel, пишу:

private
pm_grid: TPopupMenu;
...

constructor TMyComp.Create (AOwner:TComponent);
var
 ti: TMenuItem;
begin
 inherited Create(AOwner);

 ti:=TMenuItem.Create();
// ti.Caption:="Ghfgghfhhf";
 pm_grid.Items.Caption:="dfhdh";
 PopupMenu:=pm_grid;
end;


То что тут наворотил, конечно же лажа, просто пробовал, как бы это можно сделать, подскажите плз, как правильно создать TPopupMenu у виз компанента? (Понятно, что как и любой компанент, но интересует частичка кода, как это в Delphi реализовать) Заранее благодарю.


 
icWasya ©   (2005-07-11 09:35) [1]


private
 pm_grid: TPopupMenu;
private
 procedure Ghfgghfhhf(Sender:TObject);
 procedure qwerty(Sender:TObject);
...

constructor TMyComp.Create (AOwner:TComponent);
var
ti: TMenuItem;
begin
inherited Create(AOwner);

pm_grid:=TPopupMenu.Create(Self);

ti:=TMenuItem.Create(Self);
ti.Caption:="Ghfgghfhhf";
ti.OnClick:=Ghfgghfhhf;
pm_grid.Items.Add(ti);

ti:=TMenuItem.Create(Self);
ti.Caption:="Qwerty";
ti.OnClick:=qwerty;
pm_grid.Items.Add(ti);

PopupMenu:=pm_grid;
end;

procedure TMyComp.Ghfgghfhhf(Sender:TObject);
begin

end;

procedure TMyComp.qwerty(Sender:TObject);
begin

end;



 
mmms   (2005-07-11 11:34) [2]

icWasya ©   (11.07.05 09:35)
Спасибо, не знаю почему у самого не получилось :) Добавил Destroy, и все стало Ок!!! Ещё раз, благодарю!

begin
 pm_grid.Free;
 inherited Destroy;
end;


 
Юрий Зотов ©   (2005-07-11 12:11) [3]

> mmms   (11.07.05 11:34) [2]

Вот только интересно, как будет работать Ваш компонент, если его пользователь назначит ему в Инспекторе Объектов свое собственное PopupMenu?


 
mmms   (2005-07-11 13:07) [4]

Юрий, это ошибка в тут приведенном коде, или ошибка в том, что нельзя TPopupMenu применять к элементам таким образом? Мне надо просто что бы были элементы, с одним TPopupMenu, и не планируется добавлять внешние TPopupMenu.


 
mmms   (2005-07-11 13:10) [5]

И ещё вопрос, хочу в этот код TPopupMenu прицепить ImageList, и определить для элемента меню свою картинку. Вот только как ImageList "заполнить картинкой"? Посмотреть на нормальной форме, как в DFM файле заполняется структура BMP картинки в ImageList, и скопировав его использоватьть в PAS, или можно каким нибудь другим образом?


 
Юрий Зотов ©   (2005-07-11 15:58) [6]

> mmms   (11.07.05 13:07) [4]

Ошибка в том, что нельзя назначать popup-меню таким образом. Потому что ничто не мешает юзеру назначить в ИО свое popup-меню - и компонент работать перестанет. Даже если скрыть свойство "PopupMenu" из ИО, то реально это не ничего не даст, потому что юзер может сделать то же самое и в коде, а вот этого ему уже никак не запретишь.

Обрабатывая в компоненте правую кнопку мыши напрямую, можно активировать его внутреннее popup-меню, а заодно и блокировать внешнее popup-меню, даже если юзер его назначит. Но такое решение вряд ли можно назвать удачным - потому что юзер имеет полное право ожидать от компонента стандартного поведения и будет крайне удивлен тем, что назначенное им внешнее меню не вызывается. Скорее всего, такой компонент он тут же отправит в корзину.

А других решений задачи я не вижу. Да и смысла в ней, честно говоря, не вижу тоже. Чем Вас не устраивает стандартное назначение внешнего меню, к которому все давно привыкли? Там и картинки, и ActionList, и прикрепление к кнопкам тулбаров и еще много чего вкусного. И все уже готовое.


 
mmms   (2005-07-11 16:06) [7]

Юрий Зотов ©   (11.07.05 15:58)
Юрий, в том то и дело, что нужен не стандартный TPopupMenu, а именно созданные вместе с компанентом. Ладно с меткой, а например с TGrid, сделать TPopupMenu, где в меню куча функций, типа просмотр перед печатью, созранить в Excel файл, настройка показа/скрытия всех колонок, с записью инфа по каждому полю в реестр. Если для каждого грида писать свои TPopupMenu, то это просто ужас какой будет (Гридов в проекте под сотню). Я сделал с помощью этого сайта, и с помощью вас Юрий, в другой ветке, и очень доволен :)


 
Юрий Зотов ©   (2005-07-12 01:59) [8]

> mmms   (11.07.05 16:06) [7]

> Если для каждого грида писать свои TPopupMenu, то это просто
> ужас какой будет (Гридов в проекте под сотню).

Действительно, будет ужас. Поэтому такого безобразия делать не нужно. Нужно положить на главную форму один (только один!) компонент TPopupMenu и назначить его (стандартным образом!) всем гридам (всем! один и тот же!).

И тогда для всех гридов получим "просмотр перед печатью, сохранить в Excel файл, настройка показа/скрытия всех колонок" и все прочее. И все это - в ОДНОМ меню. Стандартном.


 
mmms   (2005-07-12 15:34) [9]

Юрий Зотов ©   (12.07.05 01:59)
Это согласен, а как узнать, для какого DBGrid надо создать действие? Если TPopupMenu один, то как оперделить, с какого DBGrid его вызвали? У меня же сколько гридов - столько и TPopupMenu, гриды все разные, TPopupMenu тоже разные. При вызове PopupMenu, понятно, с какого грида его вызвали, и понятно над чем совершать действия.


 
Юрий Зотов ©   (2005-07-12 16:29) [10]

> Если TPopupMenu один, то как оперделить, с какого DBGrid его
> вызвали?

PopupComponent.


 
Reindeer Moss Eater ©   (2005-07-25 11:05) [11]

Создай в конструкторе своего компонента свое попап меню с нужными тебе элементами.
Затем переопредели метод loaded, в котором проверяй, было ли назначено пользователем компонента свое попапменю.
Если нет - ничего не делай.
Если да, то добавь пункты своего попап к меню пользователя.

Правда пользователь может назначать свое попапменю в рантайме и эта схема не будет работать.



Страницы: 1 вся ветка

Текущий архив: 2006.01.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.048 c
8-1124134643
Никита
2005-08-15 23:37
2006.01.22
Как залить замкнутый участок в Canvas каким либо цветом


2-1135836643
ezorcist
2005-12-29 09:10
2006.01.22
ListBox с картинками


2-1136539055
mss
2006-01-06 12:17
2006.01.22
Сколько файлов


14-1135445062
Yegorchic
2005-12-24 20:24
2006.01.22
Ваша первая программа


14-1135749047
begin...end
2005-12-28 08:50
2006.01.22
С Днём рождения! 28 декабря