Das Beispiel hat ja schon einige Schwachpunkte im Bezug auf Rückmeldungen im Fehlerfall.
Ich kommentiere mal den Sourcecode:
Delphi-Quellcode:
procedure TGyroscopeForm.Form3DCreate(Sender: TObject);
begin
{ attempt to get and activate the sensor manager }
FSensorManager := TSensorManager.Current;
FSensorManager.Activate;
{ attempt to get an orientation sensor }
FSensors := TSensorManager.Current.GetSensorsByCategory(TSensorCategory.Orientation);
if Length(FSensors) = 0 then
begin
Label1.Text := 'Gyro not found'; // gut, aber die Meldung sollte sein: "no sensors available"
Exit; { no sensors available }
end;
if not (FSensors[0] is TCustomOrientationSensor) then
begin
// schlecht - hier fehlt die Rückmeldung an den User
Label1.Text := 'no orientation sensor is available'; // neu hinzu
Exit; { no orientation sensor is available }
end;
{ start the sensor if it is not started }
if not TCustomOrientationSensor(FSensors[0]).Started then
begin
TCustomOrientationSensor(FSensors[0]).Start;
// sollte der Sensor aus irgendeinem Grund schon gestartet sein
// dann wird der Timer nicht gestartet
// die folgende Zeile sollte daher ausserhalb der if-Anweisung verschoben werden
Timer1.Enabled := True;
end
end;