Главная страница
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.47 MB
Время: 0.473 c
1-84392
VISA
2003-06-09 13:45
2003.06.26
Замена цвета картинки в TImageList


14-84568
comintegrator
2003-06-07 08:37
2003.06.26
integer & string


3-83959
kanat
2003-05-29 13:15
2003.06.26
Dbase как работать с NTX


1-84099
Alibaba
2003-06-10 13:24
2003.06.26
TThread


14-84726
neuro
2003-06-05 19:20
2003.06.26
Tcl/Tk, Awk...