Внешние приложения
Программы вызывающие “Rahmen_DS“ как расчётный модуль
Люди имеющие опыт в программировании знают, что запущенное приложение (я работаю с Windows) может вызвать на исполнение любой исполняемый файл с передачей ему *если предусмотрено) необходимой для работы информацнии. Помимо этого, запущенные приложения могут обмениваться сообщениями. В нашем случае для вызова Rahmen_DS внешняя программа создаёт в каталоге "D:\...\Программа\ServiceFiles\AAA.mpo(mpor)" файл данных конструкции "AAA.mpo" и вызывает его на исполнение используя, например, такой код
" s = 'D:\...\Программа\Rahmen_DS.exe ';
z = 'D:\...\Программа\ServiceFiles\AAA.mpo §-';
z:= z+InttoStr(Application.MainForm.Handle)+'-62-64-1'; // 1 - шаг
ShellExecute(Application.handle,'open', PChar('"'+s+'"'), PChar('"'+z+'"'), '', SW_SHOW);"
и ждёт ответа.
Получив такую команду, содержащую в строке параметра символ "§" , Rahmen_DS стартует без создания "оконных объектов", выполняет ТРИ расчёта конструкции записанной в файле "AAA.mpo" с частотами ω = 62, 63 и 64 рад/сек, возвращает по адресу "Application.MainForm.Handle" результаты в виде текстовой таблицы и закрывается. Для возврата используется функция "SendString(W_hWnD, M_F.Text)" где W_hwnd = Application.MainForm.Handle, а M_F.Text - содержимое объекта типа TMemo использованного для хранения таблицы решений программой Rahmen_DS.
Вызывающая программа, получив ожидаемый ответ, выполняет необходимую обработку и представление результатов расчёта. Приведу текст функций использованных для получения ответа в том виде какой обеспечивает функциональность (Сообщения направленные на Hwnd-адрес система автоматически передаётся его владельцу).
procedure TWW.WmCopyData(var Message: TMessage); // Принимает ответное сообщения
function DecodeData(Msg: TMessage): string; // Раскодирует присланный ответ
var // подготавливает его для записи
Data: COPYDATASTRUCT; // в TMemo
begin
Data:= PCopyDataStruct (Msg.LParam)^;
Result:= PChar(Data.lpData);
SetLength(Result,Data.cbData);
end;
begin
w_1.M_M.Text:= DecodeData(Message); // и Записывает его в M_M (TMemo)
Message.Result:= 1; //
Application.ProcessMessages; // Убирает накопившиеся Message (полезно)
Ergebnisse; // Переводит текст в массивы данных
pT.Hide; // Индикатор ожидания ответа
end;
В заключение, я хочу привести две программы использующие «Rahmen_DS“ как расчётный модуль. Обе программы являются эскизными проектами. Первая уже использовалась для подготовки ряда докладов в своей специфической области. Вторая - предложение специалистам в области проектирования судов интересующимся вопросами влияния на качку корабля установленного на плавающем объекте массивного нестандартного, в том числе амортизированного оборудования на ранних стадиях проектирования. Обе программы находятся в каталоге „...\Ознакомительные примеры\". К Сожалению, полноценного тестирования они не проходили и могут содержать недоделки и незамеченные огрехи.
Created with the Personal Edition of HelpNDoc: Make Help Documentation a Breeze with a Help Authoring Tool