Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Креатим в рантайме, как избавится от ошибки? [D7, 2000, XP, 2003]


TPopupActionBarEx ©   (2008-04-17 08:33:00) 

procedure AMyExecute(Sender: TObject);
procedure AddMenuItem(Menu: TPopupActionBarEx; Action: tAction);
...
procedure AddMenuItem(Menu: TPopupActionBarEx; Action: tAction);
 var MenuItem: tMenuItem;
begin
 MenuItem:= tMenuItem.Create(Menu);
 if (Action = nil)
   then begin
     MenuItem.Action:= nil;
     MenuItem.Caption:= '-';
   end else begin MenuItem.Action:= Action;
 end;
end;

...

procedure TMainForm.GridMenuLoad(Grid:tDBGridEh);
 var i: integer;
   NewAction: tAction;
begin

AddMenuItem(TPopupActionBarEx(Grid.PopupMenu), nil);

 NewAction:= tAction.Create(MainForm);
 NewAction.Category:= Grid.Name;
 NewAction.Tag := 0;
 NewAction.Name:= Grid.Name+inttostr(abs(NewAction.Tag));
 NewAction.Caption   := ADataToOf.Caption;
 //NewAction.ImageIndex:= ADataToOf.ImageIndex; // если эту строку раскоментарить, то ошибка на событии OnPopup
 NewAction.Hint      := Grid.Name;
 NewAction.OnExecute := MainForm.AMyExecute;

 AddMenuItem(TPopupActionBarEx(Grid.PopupMenu), NewAction);
end;


Что сделать, чтобы можно было повесить имидж на создаваемый в рантайме пункт попапменю?

Спасибо.


TPopupActionBarEx   (2008-04-17 09:45:00) [1]


> Сергей М. ©   (17.04.08 09:24) [10]
>
> When creating an action dynamically at runtime, set the
> ActionList property to add the action to an action list
> or action manager.

Супер!
  NewAction.Caption   := ADataToOf.Caption;
  NewAction.ActionList:= ADataToOf.ActionList;
 NewAction.ImageIndex:= ADataToOf.ImageIndex;
 NewAction.OnExecute := MainForm.ADataToOfExecute;

Искренне спасибо!


Сергей М.   (2008-04-17 09:24:00) [2]

When creating an action dynamically at runtime, set the ActionListproperty to add the action to an action list or action manager.


oldman   (2008-04-17 09:22:00) [3]

Так может добавить
NewAction.ImageList:= ADataToOf.ImageList;
???

Вопрос, конечно глупый, но...


TPopupActionBarEx   (2008-04-17 09:18:00) [4]


> А индексы корректные?

Да


oxffff   (2008-04-17 09:15:00) [5]


> TPopupActionBarEx   (17.04.08 09:13) [6]


А индексы корректные?


TPopupActionBarEx   (2008-04-17 09:13:00) [6]


> oxffff ©   (17.04.08 09:10) [4]
>
> А ImageList как заполняется?

Заполнен заранее. Никакого рантайма.


TPopupActionBarEx   (2008-04-17 09:12:00) [7]

Виноват. Пропустил.

type
 TMainForm = class(TForm)
 ...
 ADataToOf: TAction;
 ...
 procedure ADataToOfExecute(Sender: TObject);
 ...
 end;


До процедуры не доходит. На правом клике на гриде ошибка. Если меню создавать без имиджа, либо не в рантайме, то все работает. Процедура отрабатывает нормально.


oxffff   (2008-04-17 09:10:00) [8]

А ImageList как заполняется?


Сергей М.   (2008-04-17 09:00:00) [9]

А кто такое ADataToOf ?
Где и как объявлено и создается ?


TPopupActionBarEx   (2008-04-17 08:45:00) [10]

Не, не секретная, но весьма информативная ;)

---------------------------
Debugger Exception Notification
---------------------------
Project My.exe raised exception class EAccessViolation with message 'Access violation at address 00486CC4 in module 'My.exe'. Read of address 00000064'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help  
---------------------------


Сергей М.   (2008-04-17 08:39:00) [11]


> ошибка


Наверно, секретная)


Наверх

Титульная страница Поиск, карта сайта Написать письмо