unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
Buttons, Process, AsyncProcess, SynEdit;
type
{ TForm1 }
TForm1 = class(TForm)
CheckBox1: TCheckBox;
Edit1: TEdit;
Edit2: TEdit;
ImageList1: TImageList;
SpeedButton1: TSpeedButton;
SynEdit1: TSynEdit;
procedure SpeedButton1Click(Sender: TObject);
private
TailwindProcess: TAsyncProcess;
procedure StartTailwindWatch;
procedure StopTailwindWatch;
procedure OnTailwindProcessTerminate(Sender: TObject);
procedure OnTailwindProcessOutput(Sender: TObject);
public
end;
var
Form1: TForm1;
FRuning: Boolean;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
FRuning := not FRuning;
if FRuning then
StartTailwindWatch
else
StopTailwindWatch;
SpeedButton1.ImageIndex := Ord(FRuning);
end;
procedure TForm1.StartTailwindWatch;
begin
if Assigned(TailwindProcess) then
Exit; // Zapobiega wielokrotnemu uruchomieniu
if not FileExists('tailwindcss-windows-x64.exe') then
begin
ShowMessage('Plik tailwindcss-windows-x64.exe nie został znaleziony!');
Exit;
end;
TailwindProcess := TAsyncProcess.Create(nil);
try
TailwindProcess.Executable := 'tailwindcss-windows-x64.exe';
TailwindProcess.Parameters.Add('-i');
TailwindProcess.Parameters.Add('style.css');
TailwindProcess.Parameters.Add('-o');
TailwindProcess.Parameters.Add('output.css');
TailwindProcess.Parameters.Add('--watch');
if CheckBox1.Checked then
begin
TailwindProcess.Parameters.Add('-m');
end;
TailwindProcess.Options := [poUsePipes, poNoConsole, poNewConsole];
// Set event handler for when the process terminates
TailwindProcess.OnTerminate := @OnTailwindProcessTerminate;
TailwindProcess.OnReadData := @OnTailwindProcessOutput;
TailwindProcess.Execute;
except
on E: Exception do
begin
ShowMessage('Błąd uruchamiania Tailwind CSS: ' + E.Message);
FreeAndNil(TailwindProcess);
end;
end;
end;
procedure TForm1.StopTailwindWatch;
begin
if Assigned(TailwindProcess) then
begin
TailwindProcess.Terminate(0);
FreeAndNil(TailwindProcess);
end;
end;
procedure TForm1.OnTailwindProcessTerminate(Sender: TObject);
begin
ShowMessage('Tailwind CSS process zakończył działanie.');
FreeAndNil(TailwindProcess);
SpeedButton1.ImageIndex := 0;
FRuning := False;
end;
procedure TForm1.OnTailwindProcessOutput(Sender: TObject);
var
OutputString, ErrorString: string;
begin
OutputString := '';
ErrorString := '';
// Read standard output
if TailwindProcess.Output.NumBytesAvailable > 0 then
begin
SetLength(OutputString, TailwindProcess.Output.NumBytesAvailable);
TailwindProcess.Output.Read(OutputString[1], Length(OutputString));
SynEdit1.Lines.Add(OutputString);
end;
// Read standard error
if TailwindProcess.Stderr.NumBytesAvailable > 0 then
begin
SetLength(ErrorString, TailwindProcess.Stderr.NumBytesAvailable);
TailwindProcess.Stderr.Read(ErrorString[1], Length(ErrorString));
SynEdit1.Lines.Add(ErrorString);
end;
end;
end.