Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
ВнизКреатим в рантайме, как избавится от ошибки? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.052 c