Форум: "Основная";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизВ DLL не работает ActionManager Найти похожие ветки
← →
GRF (2004-01-22 21:38) [0]Доброго времени суток. В DLL не работают кнопки "Вырезать", "Копировать" и т.д. Действия к ним заданы в ActionManager. Пока это был exe-шник, то все работало. В чем может быть причина?
← →
GRF (2004-01-24 00:52) [1]Может быть, я некорректно задал вопрос? Но, честно говоря, мне пока что-то более конкретное в голову не приходит. Единственное, что могу пояснить, так это, что "не работают кнопки" - просто не работают, т.е. ошибок не выдают, не ругаются и т.д., а ведут себя так, будто им ничего не назначено.
← →
GRF (2004-01-27 20:06) [2]Может быть заставить работать стандартные действия из ActionList, ActionManager в DLL вообще невозможно? Потому что на других форумах мне тоже толком ничего не ответили.
← →
Mystic (2004-01-27 20:29) [3]Самое простое --- вместо DLL использовать пакеты.
← →
GRF (2004-01-27 20:37) [4]К сожалению ничего не знаю о пакетах.
Дело в том что пишу я под AutoCAD. Что бы связать AutoCAD и Delphi использую ObjectARX для MVS C++. В DLL всего одна экспортируемая функция как раз для этой связи. Я не Бог весть какой делфер, а в C++ вообще ноль. Действую по примеру (т.е. по бумажке). Поэтому не зная что такое пакеты я врядли что-то здесь смогу изменить.
Но все же, возвращаясь к началу, неужели это действительно так сложно заставить работать стандартные действия в DLL? Честно говоря не ожидал, что проблема выскочит именно здесь.
← →
just me (2004-01-27 20:47) [5]Не в стандартных действиях дело, а в том, что в DLL и основной программе один и тот же класс суть разные классы. Выходов 2: 1. упомянутые выше пакеты; 2. сборка программы и DLL с run-time packages
← →
GRF (2004-01-27 20:59) [6]Не могу с Вами спорить, т.к. не владею вопросом, но все-таки ведь если назначить кнопкам любые другие действия кроме стандартных (хоть даже и через тотже ActionList, ActionManager), то все прекрасно работает.
← →
GRF (2004-01-27 21:05) [7]Да и еще. Ведь основная программа делает доступной экспортируемую функцию из DLL в AutoCAD. А эта функция делает Form1.Create (ну плюс еще Show, Free) и все.
Также я вызывал DLL-форму и из программы на Delphi (чтобы лично для себя отсечь сомнения в том, что это из-за C++, AutoCADа и т.д.) и там тоже стандартные действия не работают.
← →
GRF (2004-01-30 21:40) [8]На других форумах пытались найти выход и кое-что мне помогли. К примеру, можно в лоб назначать событиям типа EditCut1.OnUpdate обработчики TForm1.ActionUpdate(Sender : TObject). Вот примерный код такого обработчика:
procedure TForm1.ActionUpdate(Sender: TObject);
begin
if ActiveControl is TCustomEdit then
TAction(Sender).UpdateTarget(ActiveControl)
else
TAction(Sender).Enabled := False;
end;
После этого нужные кнопки приходят в движение, но есть одно НО.
Если работа ведется с TMemo, то все нормально.
Если же со StringGrid, то здесь хуже: не ловится начало редактирования ячейки, то есть кнопки молчат (к примеру в буфере что-то есть, а кнопка все равно потушена). Обновление происходит только после нажатия в ячейке правой кнопкой, а затем тамже левой. Что это такое я не знаю.
Как мне объяснили, это происходит потому что у StringGrid TInplaceEdit находится в приватной секции и как-то там недоступен и еще что-то про потомство от TCustomEdit. За последнее предложение не ручаюсь - сказал как понял.
Может кто знает как достучаться до TInplaceEdit или вообще как выйти из ситуации с таблицей.
← →
Maxud (2004-01-31 15:10) [9]Передавай в DLL Screen и все будет работать.
← →
GRF (2004-01-31 16:27) [10]Screen пробовал. Кнопки не реагируют на изменение св-ва Enabled у Memo и StringGrid.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c