ich habe eine eigene Komponente, die mittels Property Active := True ein externes Programm starten soll. Dieses Programm sollte üblicherweise über den Systempfad zu finden sein. Wie kann ich es erreichen, dass, falls dieses Programm nicht auf dem Rechner vorhanden ist, Lazarus eine Meldung ausgibt, anstatt sich per Zugriffsverletzung zu beenden?
Ich kann mir zwei Lösungen vorstellen, deren Ansatz ich nicht gefunden habe:
1. Die Exception bei Active := True abfangen und per ShowMessage ausgeben (siehe Bsp)
2. Den Systempfad durchsuchen, ob das auszuführende Programm gefunden wird
Bsp (stark vereinfacht):
Code: Alles auswählen
TMyComponent = class(TComponent)
private
FActive: Boolean;
procedure SetActive(AValue: Boolean);
function TryStartTestExcutable: Boolean;
published
property Active: Boolean read FActive write SetActive;
end;
...
procedure TMyComponent.SetActive(AValue: Boolean);
begin
if FActive = AValue then Exit;
FActive := AValue;
if FActive then
FActive := TryStartTestExcutable;
end;
function TMyComponent.TryStartTestExcutable: Boolean;
var
aProcess: TProcess;
begin
Result := False;
try
aProcess := TProcess.Create(nil);
aProcess.Executable := 'TestExecutable.exe';
aProcess.Execute;
Result := True;
except
on e: Exception do
ShowMessage(e.Message);
end;
end;
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
MyComponent: TMyComponent;
begin
MyComponent := TMyComponent.Create(Self);
MyComponent.Active := True;
end;