Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Установить PopupMenu нескольким компонентам, Разного класса... 
V
    Опции темы
Gnusss
Дата 22.3.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



Привет всем.

Столкнулся с такой проблемой:
Есть у меня несколько компонентов (например Self.Components), из всем (например) задать PopupMenu.
Но проблема в том что все контролы разных классов, а сделать вот так:
Код

 for I:= 0 to Self.ControlCount-1 do
  Self.Controls[I].PopupMenu:= PopupMenu1;

Нельзя т.к. свойство PopupMenu у класса TControl находится в секции protected.

Сделать вот так:
Код

 for I:= 0 to Self.ControlCount-1 do
  if Self.Controls[I] is TEdit then
   TEdit(Self.Controls[I]).PopupMenu:= PopupMenu1
  else
   if Self.Controls[I] is TButton then
    TButton(Self.Controls[I]).PopupMenu:= PopupMenu1
   else
    ...

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

Заранее благодарю за ответ.

PM MAIL   Вверх
VICTAR
Дата 22.3.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



А какие конкретно компоненты?
PM MAIL   Вверх
Gnusss
Дата 22.3.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



Разные, есть и стандартные есть и те которые я делал сам.
PM MAIL   Вверх
aktuba
Дата 22.3.2007, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Как вариант - выводи popup-menu сам, т.е. перехватывай нажатие правой кнопки на форме и выводи меню...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Snowy
Дата 22.3.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Колдуй баба, колдуй дед smile
В модуле TypInfo есть такая процедурка:
Код
  procedure SetObjectProp(Instance: TObject; const PropName: string; Value: TObject);

Пример, как юзать:
Код

  SetObjectProp(Sender, 'PopupMenu', PopupMenu1);
где Sender - любой объект ибн компонент.
Но! Если у него нет проперти PopupMenu, словишь исключение.
Не забудь в try except заключить.
Не забудь в uses добавить TypInfo;
PM MAIL   Вверх
Rennigth
Дата 22.3.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Код

  uses TypInfo

  for i := 0 to ControlCount - 1 do
     SetObjectProp(Controls[i], 'PopupMenu', PopupMenu1);


Добавлено @ 18:31 
Блин, не усьпел  smile

Добавлено @ 18:35 
Цитата(Snowy @  22.3.2007,  18:29 Найти цитируемый пост)
Но! Если у него нет проперти PopupMenu, словишь исключение.
Не забудь в try except заключить.


А можно же и проверить на существование. Как-нить так:
Код

  function PropertyExist(AControl: TControl, const APropName: string): Boolean;
  begin
    Result := Assigned(GetPropInfo(AControl, APropName));
  end;



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Gnusss
Дата 23.3.2007, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0682 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.