Lazarus и запуск внешних приложений

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

SuSe user
новенький
Сообщения: 13
Зарегистрирован: 02.10.2011 21:03:08

Lazarus и запуск внешних приложений

Сообщение SuSe user »

Можно ли заставить лазарус выполнять команды линукс? Например: wget -b
SuSe user
новенький
Сообщения: 13
Зарегистрирован: 02.10.2011 21:03:08

Сообщение SuSe user »

Odyssey писал(а):http://www.freepascal.org/docs-html/rtl/unix/fpsystem.html

Всё легче чем я думал. Сейчас хочу создать форму, которая будет выполнять эти команды. По идее, хочу (для начала) что бы пользователь в Edit вписывал команду с ключом, а по нажатию кнопки команда выполнялась. Сперва я сделал так:

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var
  FpS :Longint;
  key :string
begin
  key:= ('Edit1.Text');
  FpS:= FpSystem ('xterm'+ key);
end; 

но ничего не произошло. Затем:

Код: Выделить всё

begin
  FpS:= FpSystem ('xterm');
  key:= ('Edit1.Text');
  FpS:= FpSystem ('xterm'+ key);
end;

в этом случае консоль вызывается но, окно программы становится не активным до тех пор, пока консоль не будет закрыта.
Как реализовывается возможно дописывания ключей из оболочки программы?
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

SuSe user писал(а): key:= ('Edit1.Text');

Кавычки тут на кой ляд? :?
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

SuSe user писал(а):в этом случае консоль вызывается но, окно программы становится не активным до тех пор, пока консоль не будет закрыта.

Чтобы это преодолеть, можно воспользоваться TProcess, выключив опцию poWaitOnExit.
dunin писал(а): > key:= ('Edit1.Text');
Кавычки тут на кой ляд? :?

Да и от скобочек тоже толку нет. Достаточно сделать

Код: Выделить всё

key:= Edit1.Text;

Разве что пробел добавить, чтобы имя программы было отделено от параметров:

Код: Выделить всё

key:= ' ' + Edit1.Text;
SuSe user
новенький
Сообщения: 13
Зарегистрирован: 02.10.2011 21:03:08

Сообщение SuSe user »

Odyssey спасибо. Приду домой, проверю и отпишусь.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Из темы "Компоненты и примеры" перенесено в новую, т.к. к теме топика не относится
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Сообщение leo_bsv »

вот процедура из предыдущей версии модуля uOpenOffice.pas

Код: Выделить всё

// процедура отображения документа разработана только для linux
procedure TOoWriter.ShowDocument;
var exe_path, templ_path, sh: string;
    Proc: TProcess;
begin
  exe_path:=ExtractFilePath(Application.ExeName);

  {$IFDEF Linux}
  templ_path:=exe_path+'template/';
  GenerateDocument(templ_path,'doc','');
  try
    Proc:=TProcess.Create(nil);
    Proc.CommandLine:='ooffice -writer '+templ_path+'doc.odt';
    Proc.Options:=[poWaitOnExit];
    Proc.ShowWindow:=swoShowMaximized;
    Proc.Execute;
  finally
    //удалим временные файлы и папки
    if Proc.WaitOnExit then begin
      Proc.CommandLine:='rm '+templ_path+' -r';
      Proc.Execute;
      Proc.Free;
    end;
  end;
  {$ENDIF}
end;
SuSe user
новенький
Сообщения: 13
Зарегистрирован: 02.10.2011 21:03:08

Сообщение SuSe user »

Для своей курсовой работы написал приложение на лазарусе. Для того что бы показать большую функциональность приложения, хочу сделать так, что бы она запускалась внутри консоли.
Вопрос таков:
как приложение написанное в лазарусе на делфи выполнять в псевдографическом режиме для консоли (а-ля YaST)?
Владимир
постоялец
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Сообщение Владимир »

SuSe user писал(а):Можно ли заставить лазарус выполнять команды линукс? Например: wget -b

Дедовский способ через libc

Код: Выделить всё

uses ...libc
.........
function run:Boolean;
var
p:Pchar;
s:String;
begin
s:='/home/...'; //здесь путь запуска
p:=Pchar(s);
libc.System(p);
end;
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

libc вроде как deprecated , то есть этот модуль больше не поддерживается в fpc
Или я ошибаюсь ?
Владимир
постоялец
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Сообщение Владимир »

Ism писал(а):libc вроде как deprecated , то есть этот модуль больше не поддерживается в fpc

Ну, не знаю, я им пользуюсь - пока без проблем. Конечно, это криво и медленно (может даже неправильно), но в некоторых случаях (например, запуск скрипта) очень даже способствует.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Вот могильная плита

http://wiki.freepascal.org/libc_unit
Владимир
постоялец
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Сообщение Владимир »

Ism писал(а):Вот могильная плита

Что сказать... В Kylih это было, пожалуй, единственным средством запуска чего-нить. Посмотрим. Перестанет работать - перейдем на TProcess. Мой лозунг - работает - не трогай!
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Большинство функций libc перекочевали в модуль Unix с приставкой fp
fpSystem
FpFork

В моем проекте в основном они используются

Для примера

https://code.google.com/p/xroot/source/ ... t/main.pas
Последний раз редактировалось Ism 11.12.2011 18:32:36, всего редактировалось 2 раза.
Ответить