04.12.2014, 10:18 | #1 |
Участник
|
Как запустить внешний процесс в окне AX2009
Всем доброго времени суток!
Коллеги может кто подскажет, есть такая задача запустить excel внутри рабочей области Axapta... Ну например отобразить excel на форме или в новом окне системы. Главное чтобы процесс запускался не во внешнем окне а как бы "внутри Axapta". Понимаю звучит абсурдно, но все же может кто подскажет? |
|
04.12.2014, 10:38 | #2 |
Участник
|
Использовать на форме ActiveX и Microsoft Office Web Components в нём.
__________________
Дмитрий |
|
04.12.2014, 10:49 | #3 |
Участник
|
Дело в том что Microsoft Office Web Components не подходит, потому как половина форматирования документа не отображается... у меня стоит OWC11 и я пытался использовать конкретно spreadSheet. А может есть OWC поновее, у которого более широкий набор функций? Я искал... Потратил пару дней на поиск но ничего так и не нашел... Ну конечно есть и другие компоненты ActiveX, но они все платные... А покупать в слепую не хочется, вдруг не подойдет...
|
|
08.12.2014, 13:34 | #4 |
Участник
|
всем доброго времени суток! Пытаясь решить вышеизложенную проблему, нашел статью в которой описано что можно подменить окно используя библиотеку USER32.dll метод setParent. Попытался написать джоб
X++: static void arn_dzu_createOleObj(Args _args) { Microsoft.Office.Interop.Excel.Workbook wb; Microsoft.Office.Interop.Excel.Workbooks wbs; Microsoft.Office.Interop.Excel.ApplicationClass acExcel; DLL _dll = new DLL("user32.dll"); DLLFunction dllFunction = new DLLFunction(_dll,"SetParent"), dllFunc; int iWindow,wind; FormRun formRun; Form form = new Form(); Args args = new Args(); System.Reflection.Missing mising ; object oMissing = mising; str fileName = "C:\\1234.xls"; ; new InteropPermission(InteropKind::ClrInterop).assert(); //dllFunc = new DLLFunction(_dll,"FindWindow"); acExcel = new Microsoft.Office.Interop.Excel.ApplicationClass(); iWindow = WinApi::findWindow("XLMAIN",""); form.addDesign('Design'); args.object(form); form.design().width(1000); form.design().height(1000); formRun = classFactory.formRunClass(args); formRun.init(); formRun.design().caption('excel'); wind = any2int(formRun.form().design().handle()); dllFunction.arg(Types::Integer,Types::Integer); dllFunction.returns(); dllFunction.call(iWindow,wind); wbs = acExcel.get_Workbooks(); // wb = wbs.Open(fileName,oMissing,false,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing); wb = wbs.Add(filename); acExcel.set_Visible(true); acExcel.set_UserControl(true); formrun.run(); formRun.wait(); CodeAccessPermission::revertAssert(); } |
|
08.12.2014, 13:53 | #5 |
Участник
|
Если вы так пытаетесь получить виндовый хэндл окна, то не правильно. FormRun.hWnd() его возвращает
__________________
Axapta v.3.0 sp5 kr2 |
|
08.12.2014, 17:18 | #6 |
Участник
|
Попробуйте вот такой подход:
http://www.codeproject.com/Articles/...Form-Applicati |
|
08.12.2014, 17:23 | #7 |
Участник
|
Из той же оперы:
http://www.codeproject.com/Articles/...in-an-MDI-Form |
|
|
|