2011-09-01 9 views

risposta

4

Delphi XE2 supporta la distribuzione su OSX su un Mac. La distribuzione su un iPhone è apparently pretty easy, ma implica ancora l'utilizzo di XCode come strumento di distribuzione finale. Dal momento che Delphi non supporta "ufficialmente" la distribuzione su hardware iPhone, dubito che abbiano incluso tutti i componenti specifici.

Disclaimer: Ho appena scaricato XE2 poche ore fa e ho distribuito un'applicazione mac finora (e ha funzionato magnificamente). Quindi sono lontano da un esperto.

Modifica: Anders Ohlsson ha apparentemente scritto un componente accelerometro per XE2. Non l'ho provato, ma here it is.

+0

Curioso per il downvote. Se mi sbaglio, mi piacerebbe sapere qual è la via giusta. Una sorta di accesso hardware iOS simulato diretto da Delphi su Windows sarebbe una vera sorpresa. – JosephStyons

+0

Ho incluso il codice sorgente qui sotto e ho usato il modello per scrivere un componente per la bussola/GPS iOS. – Johan

0

C'è una componente che legge l'accelerometro sul blog Embarcadero:
http://edn.embarcadero.com/article/41748
Ecco il link per scaricare il componente: http://cc.embarcadero.com/item/28609

Ed ecco il codice sorgente da Anders Ohlsson:
(io ho usato questo per costruire un componente per il GPS/bussola).

unit Accelerometer; 

{$IFDEF FPC} 
{$mode objfpc}{$H+} 
{$modeswitch objectivec1} 
{$ENDIF} 

interface 

uses 
    SysUtils, Classes, FMX_Types 
{$IFDEF FPC} 
    , iPhoneAll 
{$ENDIF} 
    ; 

type 
    TAccelerateEvent = procedure(x,y : Double) of object; 

    TiOSAccelerometer = class(TFmxObject) 
    private 
    FOnAccelerate: TAccelerateEvent; 
    { Private declarations } 
    protected 
    { Protected declarations } 
    public 
    { Public declarations } 
    constructor Create(AOwner: TComponent); override; 
    published 
    { Published declarations } 
    property OnAccelerate: TAccelerateEvent read FOnAccelerate write FOnAccelerate; 
    end; 

{$IFDEF FPC} 
const 
    kAccelerometerFrequency = 100.0; // Hz 
{$ENDIF} 

{$IFDEF FPC} 
type 
    UIAcceleration = objcclass external (NSObject) 
    public 
    function timestamp: NSTimeInterval; message 'timestamp'; 
    function x: UIAccelerationValue; message 'x'; 
    function y: UIAccelerationValue; message 'y'; 
    function z: UIAccelerationValue; message 'z'; 
    end; 
{$ENDIF} 

{$IFDEF FPC} 
type 
    AccDelegate = objcclass(NSObject) 
    procedure accelerometer_didAccelerate(accelerometer: UIAccelerometer; acceleration: UIAcceleration); message 'accelerometer:didAccelerate:'; 
    end; 
{$ENDIF} 

{$IFDEF FPC} 
var 
    AccDelegatVar: AccDelegate; 
{$ENDIF} 

var 
    MyAccelerometer: TiOSAccelerometer; 

procedure Register; 

implementation 

{$IFDEF FPC} 
procedure AccDelegate.accelerometer_didAccelerate(accelerometer: UIAccelerometer; acceleration: UIAcceleration); 
begin 
    if Assigned(MyAccelerometer) then 
    if Assigned(MyAccelerometer.FOnAccelerate) then 
     MyAccelerometer.FOnAccelerate(acceleration.x,acceleration.y); 
end; 
{$ENDIF} 

constructor TiOSAccelerometer.Create(AOwner: TComponent); 
begin 
    inherited; 
    {$IFDEF FPC} 
    UIAccelerometer.sharedAccelerometer.setUpdateInterval(1.0/kAccelerometerFrequency); 
    AccDelegatVar := AccDelegate.alloc; 
    UIAccelerometer.sharedAccelerometer.setDelegate(AccDelegatVar); 
    {$ENDIF} 
end; 

procedure Register; 
begin 
    RegisterComponents('iOS', [TiOSAccelerometer]); 
end; 

end.