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

Вниз

В динамически созданныx меню не работает OnClick   Найти похожие ветки 

 
blackalex   (2002-10-02 11:36) [0]

В динамически созданныx меню не работает OnClick.

Вот Код. SubMenus не реагируют на клики. Когда была версия KOL 1.44 , все работало. Поставил 1.51, перестало. Подскажите что делать.

----------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: PObj);
begin
CreateMainMenu;
CreateSubMenu;
end;

procedure TForm1.CreateMainMenu;
begin
mnuMain := NewMenu( Form , 0, [ "&Edit",
"(",
"&Undo Ctrl+Z",
"-",
"Cu&t Ctrl+X",
"&Copy Ctrl+C",
"&Paste Ctrl+V",
"De&lete",
"-",
"SubMenu", // SubMenues , ID = 8
")",
"" ], mnuMainMenuItemClick );

end;

procedure TForm1.CreateSubMenu ;
var
I: Integer;
SubMenu: PMenu;
begin
mnuMain.ItemSubMenu[8] := 0 ;
SubMenu := NewMenu(Form, 0, [ "" ], NIL);
for I:= 0 to 3 do
SubMenu.AddItem (PChar("SubMenu" + Int2Str(I)), mnuSubMenuItemClick, []);

mnuMain.ItemSubMenu[8] := SubMenu.Handle ;
end;


procedure TForm1.mnuMainMenuItemClick(Sender: PMenu; Item: Integer);
begin
MsgOK ("EditMenu" + Int2Str(Item));
end;

procedure TForm1.mnuSubMenuItemClick(Sender: PMenu; Item: Integer);
begin
MsgOK ("SubMenu" + Int2Str(Item));
end;


 
Vladimir Kladov   (2002-10-07 11:42) [1]

Теперь для каждого пункта меню свой объект. Связывать через Handle недостаточно. Объект, соответствующий пункту, ищется по дереву объектов, а его там просто нет. Надо видимо вообще выкинуть ItemSubMenu[ ] и сделать присваиваемым Items[ ]. Погляжу, как лучше.


 
blackalex   (2002-10-07 18:17) [2]

Привет Владимир,

ошибку я нашел. Это баг в TMenu.Insert. Я тебе пару дней назад писъмо написал. Я сделал следующее.
Добавил в конце функции TMenu.Insert строку FItems.Add (Result) В функтиях TMenu.GetItems и TMenu.IndexOf я сделал проверку
ParentMenu.FItems на NIL , как внизу, и всё заработало


...
if ParentMenu.FItems <> NIL // добавлено
for I := 0 to ParentMenu.FItems.FCount-1 do
begin
Inc( FromIdx );
Result := SearchMenu( ParentMenu.FItems.Items[ I ], FromIdx );
if Result <> nil then Exit;
end;
...
>

Может это и неправилъно. Посмотри пожалуйста

Valerian



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

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

Наверх




Память: 0.45 MB
Время: 0.049 c
1-84207
Tolyan
2003-06-12 18:19
2003.06.26
Сортировка в TOpenDialog


6-84484
Маришка
2003-04-07 16:02
2003.06.26
приложения клиент-сервер


3-83906
Stas
2003-06-03 12:09
2003.06.26
Составной ключ


1-84307
Мыш
2003-06-15 17:55
2003.06.26
встраиваемый плагин


14-84523
Omar2002
2003-06-06 12:03
2003.06.26
Студинт - Пиво





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский