Добрый день. Сегодня я попытаюсь познакомить вас с одним из главных преимуществ среды разработки Lazarus: создание кроссплатформенных приложений. Чтобы создавать кроссплатформенные приложения, мы должны писать код который сможет работать как среде Windows, так и в Linux(например), т.е. мы должны избежать использование тех процедур и функций которые жестко привязаны к определенной ОС.
Приведу пример: Для того чтобы запустить выполнение программы(Возьмем за основу калькулятор) в Windows, мы можем использовать след. код:
uses ShellApi; procedure TForm1.Button1Click(Sender: TObject); begin ShellExecute(0,nil, PChar('calc.exe'),nil,nil,1); end;
Данный код будет работать только для Windows, не только потому что в Linux за калькулятор отвечает другое приложение, но и потому что библиотека ShellApi доступна только из Windows.
В Linux же для того чтобы вызвать калькулятор нам потребуется выполнить следующую команду:
uses Unix; procedure TForm1.Button1Click(Sender: TObject); begin fpSystem('kcalc'); end;
Данный код так же можно выполнить только в ОС Linux.
Есть процедуры и функции которые могут работать в любой ОС, т.е. кросплатформенные. Для запуска приложений например, нам поможет следующая процедура: TProcess или RunCommand.
Но возникает вопрос, как запустить тот же калькулятор если в разных ОС его выполняет разные приложения? Для этого нам поможет использование директивы «{$IFDEF}» и «{$ENDIF}».
Пример взятый с wiki:
{...} AProcess:TProcess.Create(nil) {$IFDEF WIN32} AProcess.CommandLine := 'calc.exe'; //Windows калькулятор {$ENDIF} {$IFDEF LINUX} AProcess.CommandLine := 'kcalc'; //KDE калькулятор {$ENDIF} AProcess.Execute; //как альтернативу, вы можете использовать AProcess.Active:=True {...}
Теперь при компиляции вашего приложения под определенную ОС выбранную в параметрах проекта, компилятор будет использовать свой блок кода.