Native iOS Control Delphi XE4

Used in the Delphi Firemonkey Platform is very large, and is well organized. Of course Button, alone Firemonkey, and written.However, under certain circumstances in the OS the Native Control, because you will inevitably need to use a different API, about how to use the Native Control to learn.

//
//  XE4 & iOS Button Example
//
//   http://blog.naver.com/simonsayz
//
// Ref.
//   SampleNiblessApp  :  http://rvelthuis.de/zips/sampleniblessapp.7z
//   CCR.NSAlertHelper :  http://code.google.com/p/delphi-foundations/
//   Delegate Example  :  http://blogs.embarcadero.com/teamj/2013/05/09/3817/
//   XE2, Free Pascal  :  http://blog.naver.com/simonsayz/120162838290
//   Source to Html    :  http://www.duketown.com/marcel/hyperdelphi.shtml
//
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
  FMX.Platform.iOS, FMX.Layouts, FMX.Memo,
  //
  System.TypInfo,
  Macapi.ObjectiveC,
  Macapi.ObjCRuntime,
  iOSapi.CocoaTypes,
  iOSapi.foundation,
  iOSapi.uikit,
  iOSapi.CoreGraphics;

type
  //
  IBtnDelegate = interface(NSObject)
   procedure BtnPressed; cdecl;
  end;
  //
  TBtnDelegate = class(TOCLocal)
  Private
   Finx   : Integer;
   FMemo  : TMemo;
  Public
   constructor Create( inx : integer; memo : TMemo );
   function  GetObjectiveCClass : PTypeInfo; override;
   procedure BtnPressed; cdecl;
  end;
  //
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
  public
   BtnDelegate : TBtnDelegate;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

Constructor TBtnDelegate.Create ( inx : integer; memo : TMemo );
 begin
  inherited Create;
  Self.Finx  := 10;
  Self.Fmemo := Memo;
 end;

function  TBtnDelegate.GetObjectiveCClass : PTypeInfo;
 begin
  Result := TypeInfo(IBtnDelegate);
 end;

//
procedure TBtnDelegate.BtnPressed;
 begin
  inc(Finx);
  FMemo.Lines.add('iOS Btn Pressed '+IntToStr(Finx));
 end;

//
procedure TForm1.Button1Click(Sender: TObject);
 Var
  Btn         : UIButton;
begin
 //
 Memo1.Lines.Add('FMX Btn Pressed');
 //
 Btn := TUIButton.Wrap( TUIButton.OCClass.buttonWithType(UIButtonTypeRoundedRect) );
 //
 Btn.setFrame ( CGRectMake(40,130,240,100) );
 Btn.setTitle (NSStr('iOS UIButton Pressed'),UIControlStateNormal);
 //
 BtnDelegate := TBtnDelegate.Create(10,Memo1);
 //
 Btn.addTarget( BtnDelegate.GetObjectID,       // target
                sel_getUid('BtnPressed'),      // action
                UIControlEventTouchDown);      // event
 //
 WindowHandleToPlatform(Self.Handle).View.addSubview(Btn);  //亮点啊!!!cnsoft mark

end;

end.
posted @ 2013-05-17 00:06  小糊涂的超级blog  阅读(567)  评论(0编辑  收藏  举报