Программы вызывающие  “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