Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.018 c
15-1207032765
Bober_crazy
2008-04-01 10:52
2008.05.18
1 апреля или правда?


2-1208929981
Джек874585
2008-04-23 09:53
2008.05.18
Юникод в Delphi


2-1208602147
Алексей К.
2008-04-19 14:49
2008.05.18
Чтение параметров из INI-файла


3-1197439688
Flok
2007-12-12 09:08
2008.05.18
выборка случайных неповтоярющихся значиений из базы данных


15-1207077875
Rycar
2008-04-01 23:24
2008.05.18
Вопрос




   Наверх