Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Программа на Delphi должна вызвать Mathcad


Автор: bagira 10.7.2008, 19:26
Здравствуйте! smile Давно не виделись!

Итак, инженеры наши разработали измерительный стенд и составили программу в Mathcad, которая обрабатывает результаты и выдает некие данные. Инженерам удобно - там много всего встроенного - интегралы, решение систем уравнений, и т.д.

Но с измерительным стендом должны в будущем работать лаборанты, рабочие, они совершенно не понимают  Mathcad, им очень неудобно, не нравится и не понятно. В общем, попросили меня переделать - "то же самое, но в удобном для понимания виде".

Я решила немного упростить себе задачу (в связи с ленивостью  smile ) - не переделывать программу целиком, а запускать из Дельфийской программы - Маткадовскую. 

Программка Маткадовская - берет текстовый файл, из него данные, и результаты опять-таки пишет в текстовый файл.
Получается просто - вызвать Маткадовскую из Дельфийской, использовать данные из входного файла, потом взять из выходного - вновь в Дельфи.... но вот проблема - нужно, чтобы при вызове окно было скрыто - не нужно ведь пугать рабочих Маткадом smile

Использую WinExec, вся придуманная хитрая система, вроде, работает, но вот проблема - никак не получается скрыть (минимизировать) окно Маткада.

Есть какие-то способы?

Спасибо за внимание smile
Заранее благодарна smile


Автор: VICTAR 10.7.2008, 19:37
Код

var
  lWnd: HWND;
begin
  lWnd := FindWindow(nil, ЗАГОЛОВОК_ОКНА);
  if lWnd <> 0 then
    ShowWindow(lWnd, SW_MINIMIZE);

Автор: bagira 10.7.2008, 19:50
Цитата(VICTAR @  10.7.2008,  21:37 Найти цитируемый пост)
lWnd := FindWindow(nil, ЗАГОЛОВОК_ОКНА);


Спасибо!
А заголовок окна, как определить заранее?

Автор: VICTAR 10.7.2008, 20:03
Цитата(bagira @  10.7.2008,  19:50 Найти цитируемый пост)
А заголовок окна, как определить заранее? 

Ну как бы посмотреть), хотя наверное не вариант, т.к. заголовок вроде меняется.
Лучше сделать через класс окна(первый параметр). 
Тогда функция примет вид:
lWnd := FindWindow(КЛАСС_ОКНА, nil);

Автор: bagira 10.7.2008, 20:06
VICTAR, спасибо! Попробую smile

Автор: VICTAR 10.7.2008, 20:33
Не за что  smile 

Автор: Coder 11.7.2008, 06:52
VICTAR, но в таком случае заставку пользователи все равно увидят.

Я думаю нужно использовать что-то вроде этого:

Код

procedure Start(S : String);
var
  si: TStartupInfo;
  p:  TProcessInformation;
  procID : HWND;
begin
  FillChar(Si,SizeOf(Si),0);
  with Si do begin
    cb := SizeOf( Si);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_HIDE;
  end;
  Application.Minimize;
  Createprocess(nil,PCHAR(S),nil,nil,false,CREATE_DEFAULT_ERROR_MODE,nil,nil,si,p);
  Waitforsingleobject(p.hProcess,INFINITE);
  Application.Restore;
end;


Играться нужно с этими параметрами:
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_HIDE;

Автор: VICTAR 11.7.2008, 10:18
Мне почему-то показалось, что сторонняя программа изначально уже была запущена.

Автор: Coder 11.7.2008, 10:44
bagira, для разнообразия глянь вот это http://radiomaster.ru/cad/doc/DevRef/Automation.php

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)