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

Вниз

Креатим в рантайме, как избавится от ошибки?   Найти похожие ветки 

 
TPopupActionBarEx   (2008-04-17 08:33) [0]

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;


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

Спасибо.


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


> ошибка


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


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

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

---------------------------
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 09:00) [3]

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


 
oxffff ©   (2008-04-17 09:10) [4]

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


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

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

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


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


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


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

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


 
oxffff ©   (2008-04-17 09:15) [7]


> TPopupActionBarEx   (17.04.08 09:13) [6]


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


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


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

Да


 
oldman ©   (2008-04-17 09:22) [9]

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

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


 
Сергей М. ©   (2008-04-17 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.


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


> Сергей М. ©   (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;

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



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

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

Наверх




Память: 0.49 MB
Время: 0.024 c
2-1208504247
sql
2008-04-18 11:37
2008.05.18
MS SQL 2000


15-1207309630
Zvr@b
2008-04-04 15:47
2008.05.18
Правила составления ТЗ для программистов


2-1208278528
Mag
2008-04-15 20:55
2008.05.18
Создал две динамических объекта и не могу к ним обратиться, как?


11-1189391943
Grademax
2007-09-10 06:39
2008.05.18
Обработка клавиш Up, Down в ListEdit е


2-1208350865
papa_roarch
2008-04-16 17:01
2008.05.18
Правый или левый клик?