Главная страница
    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.46 MB
Время: 0.035 c
1-41308
SergeyVMM
2003-10-31 10:57
2003.11.13
Ресурсы


7-42186
Василий
2003-08-28 14:16
2003.11.13
Как получить данные через USB порт


3-40938
@lex
2003-10-17 11:06
2003.11.13
Кто-нибудь пробовал запустить скрипт describe в Delphi


1-41566
Andrew1_1
2003-10-26 21:32
2003.11.13
2 вопроса про DLL


1-41240
Doctor Deejay
2003-11-01 10:38
2003.11.13
ComboBox Больше! Еще больше!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский