Другие языки программирования и технологии

Вопрос про Free Pascal!!! помогите плз!

У меня есть 2 вопроса:
1. Есть ли такой оператор, который перезапускает программу?
2. Как сделать ссылку на другую программу, к примеру, нажимаешь на кнопку и вылезает совершенно другая программа?
Заранее спс)
Арман Искаков
Арман Искаков
1 187
Если вы пишете программу под Windows, то самый простой и пока ещё не устаревший способ - использовать функцию WinAPI ShellExecute.

Пример.
На форме расположены две кнопки. При нажатии Button1 открывается стандартный Блокнот.
При нажатии на Button2, программа перезапускает сама себя. Точнее, запускается второй экземпляр этой программы, а затем завершает работу первый. (Честное слово, не понимаю, зачем это нужно) .

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, Forms, StdCtrls, ShellAPI, Windows, SysUtils;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
{Запускает блокнот Windows}
ShellExecute(0, 'open', 'notepad.exe', nil, nil, SW_SHOW);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
{Сбрасываете на диск кеши всех открытых для записи файлов}
{Закрываете все открытые программой файлы, потому что запускаемый
второй экземпляр программы может сразу же открывать эти же файлы}
{Освобождаете все динамически выделенные ресурсы}
{Запускаете второй экземпляр программы}
ShellExecute(0, 'open', PChar(ExtractFileName(Application.ExeName)),
  nil, PChar(ExtractFilePath(Application.ExeName)), SW_SHOW);
{Завершаете работу текущего экземпляра программы}
Close;
end;

end.
#1 «A°Y°B°E°K»
#1 «A°Y°B°E°K»
51 590
Лучший ответ
1. Перезапускает? В полном смысле - нет. Можно использовать безусловный переход на начало - но тогда не будут обнуляться переменные; или вызвать програму из себя - но тогда это будет отдельный процесс, к тому же, вызывавший не завершится до конца работы вызванного (хотя есть варианты :) ). А вообще - делай основной цикл и обнуляй переменные, и будет тебе счастье.
2. Есть функции Exec, Shell, FpExec* (вместо звездочки - куча вариантов) , ExecuteProcess и, подозреваю, еще несколько - в зависимости от используемой ОС и требуемой функциональности. Подробности - в гугле.
ты Делфи поставь, там есть. А паскаль ну нет его уже нет
Игорь Романенко В Free Pascal есть и Delphi, и "Turbo Pascal", и пара диалектов Object Pascal, а так же свой вариант Паскаля.