Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c