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

Вниз

TPopUpMenu & TComponents   Найти похожие ветки 

 
snake1977   (2003-10-29 15:32) [0]

Здравствуйте! подскажите как можно в realTime назначить всем компонентам расположенным на форме, popupmenu.
Я сделал так
procedure TForm1.FormCreate(Sender: TObject);
Var i:Integer;
begin
for i:=0 to Form1.ComponentCount-1 do
Begin
TControl(Form1.Components[i].PopUpMenu:=PopUpMenu1;
End;
end;

но на этапе компиляции выскакивает ошибка
undeclared identifier "PopUpMenu"

:(((


 
Skier ©   (2003-10-29 15:35) [1]

type
THackControl = class(TControl);

//.........................

for i:=0 to Form1.ComponentCount-1 do Begin
if Form1.Components[i] is TControl then
THackControl(Form1.Components[i]).PopUpMenu := PopUpMenu1;
End; //for


 
snake1977   (2003-10-29 15:37) [2]

сработало!!
а почему надо делать еше один класс?? подскажите


 
Skier ©   (2003-10-29 15:38) [3]

>snake1977 (29.10.03 15:37) [2]
чтобы "достучатся" до protected св-ва класса TControl


 
Юрий Зотов ©   (2003-10-29 15:40) [4]

> snake1977

Свойство PopupMenu появляется, начиная только с класса TControl - поэтому для TComponent оно у Вас и не работало. Но у TControl оно объявлено в секции protected, для доступа к которой и нужен класс THackControl.


 
mOOx_ ©   (2003-10-29 15:41) [5]

Это чо, прямо из кода?
TControl(Form1.Components[i].PopUpMenu:=PopUpMenu1
Скобку, во-первых закрой.
А потом. зачем всем? К тому же: глянь ка в исходник ТКонтрол. Там ПопапМеню в протектед объявлено.
Придется, скорее всего, что-то типа
TButton(Form1.Components[i]).PopupMenu...


 
Skier ©   (2003-10-29 15:42) [6]

>mOOx_ © (29.10.03 15:41) [5]
ОЙ !


 
mOOx_ ©   (2003-10-29 15:43) [7]

Сори, постов не было, писал долго :)
Удачи.
ЗЫ: кстати, я тоже просветился. Сенкс :)


 
snake1977   (2003-10-29 15:50) [8]

Спасибо за отклик :)
все понятно теперь :)
толко, возник другой вопрос:
на форме расположено главное меню и соответсвенно в цикле для каждого пункта меню присходит преобразование к классу THackControl и присвоение popupmenu. Я так предпологаю что должно вызываться исключение, так как преобразовать объект класса TmenuItem в объект класса THackControl не возможно , т.к. он не является наследником TControl и у него нет такого свойства как popupmenu. Но оно не вызывается, все проходит на ура :)
Вот и вопрос, а можно ли заставить выскакивать контекстное меню на пункте основного меню формы??


 
Юрий Зотов ©   (2003-10-29 16:00) [9]

> Я так предпологаю что должно вызываться исключение, так как
> преобразовать объект класса TmenuItem в объект класса
> THackControl не возможно , т.к. он не является наследником
> TControl и у него нет такого свойства как popupmenu.

Правильно предполагаете, но здесь не совсем так. Здесь НЕТ преобразования к THackControl (оператор AS), здесь идет ПРЯМОЕ приведение типа.

> Но оно не вызывается, все проходит на ура :)

Потому что вначале стоит проверка:
if Form1.Components[i] is TControl ...

> можно ли заставить выскакивать контекстное меню на пункте
> основного меню формы?

Ручками, обрабатывая сообщения мыши.



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
3-41066
ФРИМЕН
2003-10-23 20:57
2003.11.13
Помогите разобраться с БД


3-41028
Sam Stone
2003-10-15 13:15
2003.11.13
TOracleDataset.Locate


1-41705
mc_duck
2003-11-03 20:06
2003.11.13
Окно с секретом


7-42180
AVGVI
2003-08-13 20:48
2003.11.13
Управление учетными записями в W2K


3-41004
aVast
2003-10-15 16:21
2003.11.13
Как в ячейке DBGrid выделить определенное количество символов?