2011-09-01 19 views

Respuesta

4

Delphi XE2 admite la implementación de OSX en un mac. La implementación en un iPhone es apparently pretty easy, pero todavía implica el uso de XCode como una herramienta de implementación final. Dado que Delphi no admite "oficialmente" la implementación en el hardware de iPhone, dudo que hayan incluido ningún componente que sea específico para él.

Descargo de responsabilidad: Acabo de descargar XE2 hace unas horas, y hasta ahora solo he implementado una aplicación mac (y funcionó muy bien). Así que estoy lejos de ser un experto.

Editar: Anders Ohlsson aparentemente ha escrito un componente de acelerómetro para XE2. No lo he intentado, pero here it is.

+0

Curiose el downvote. Si me equivoco sobre esto, me encantaría saber cuál es la forma correcta. Algún tipo de acceso de hardware iOS simulado directo desde Delphi en Windows sería un verdadero placer. – JosephStyons

+0

He incluido el código fuente a continuación y he usado la plantilla para escribir un componente para la brújula/GPS iOS. – Johan

0

Joseph tiene razón. Philip Hess ha estado contribuyendo a los grupos de noticias Delphi iOS, y otra información útil, por ejemplo:

https://forums.embarcadero.com/message.jspa?messageID=390713&tstart=125

Él también tiene esta página, aquí:

http://web.me.com/macpgmr/ObjP/Xcode4/ObjP_Intro.html

que puede ser útil para usted . Actualmente estoy abriéndolo todo para usar los servicios de CoreLocation (entre otros). Definitivamente no es para los débiles de corazón.

0

Hay un componente que lee el acelerómetro en el blog Embarcadero:
http://edn.embarcadero.com/article/41748
Aquí está el enlace de descarga para el componente: http://cc.embarcadero.com/item/28609

Y aquí está el código fuente de Anders Ohlsson:
(He utilizado este a construir un componente para el GPS/Brújula).

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. 
Cuestiones relacionadas