Difference between revisions of "iPhone Laz Extension"
From Lazarus wiki
Jump to navigationJump to searchm (→Hello World) |
|||
Line 39: | Line 39: | ||
=== How to use === | === How to use === | ||
+ | |||
+ | === Hello World === | ||
+ | |||
+ | The sample requires a objective-p compiler (fpc 2.5.1 or higher) with cocoaint packages compiled for iPhone | ||
+ | |||
+ | program project1; | ||
+ | |||
+ | {$mode objfpc}{$H+} | ||
+ | {$modeswitch objectivec1} | ||
+ | {$linkframework UIKit} | ||
+ | |||
+ | uses | ||
+ | iPhoneAll, CGContext, CGGeometry, CFString; | ||
+ | |||
+ | type | ||
+ | TAppDelegate = objcclass(NSObject) | ||
+ | procedure applicationDidFinishLaunching(application: UIApplication); message 'applicationDidFinishLaunching:'; | ||
+ | end; | ||
+ | |||
+ | TMyWindow = objcclass(UIWindow) | ||
+ | public | ||
+ | procedure drawRect(c: CGRect); override; | ||
+ | end; | ||
+ | |||
+ | const | ||
+ | helloworld = 'Hello world'; | ||
+ | |||
+ | // window paint method | ||
+ | procedure TMyWindow.drawRect(c: CGRect); | ||
+ | var | ||
+ | cg : CGContextRef; | ||
+ | begin | ||
+ | // getting current context | ||
+ | cg:=UIGraphicsGetCurrentContext; | ||
+ | // setting back ground color | ||
+ | CGContextSetRGBFillColor(cg, 0, 0, 0.5, 1); | ||
+ | CGContextFillRect(cg, c); | ||
+ | |||
+ | // rotating up-side down context | ||
+ | CGContextTranslateCTM(cg, 0, c.size.height); | ||
+ | CGContextScaleCTM(cg, 1, -1); | ||
+ | |||
+ | // setting text color | ||
+ | CGContextSetRGBFillColor(cg, 1, 1, 0, 1); | ||
+ | CGContextSetRGBStrokeColor(cg, 1, 1, 0, 1); | ||
+ | // setting font (must set any) | ||
+ | CGContextSelectFont(cg, 'Helvetica', 30, kCGEncodingMacRoman); | ||
+ | // rendering text | ||
+ | CGContextShowTextAtPoint(cg, 0, c.size.height-50, helloworld, length(helloworld)); | ||
+ | end; | ||
+ | |||
+ | var | ||
+ | mainwindow : TMyWindow; | ||
+ | |||
+ | { TAppDelegate } | ||
+ | |||
+ | procedure TAppDelegate.applicationDidFinishLaunching(application: UIApplication); | ||
+ | begin | ||
+ | // application has initialized, now we can create the main window | ||
+ | mainwindow:=TMyWindow(TMyWindow.alloc); | ||
+ | // initialize window in Objective-C style | ||
+ | mainwindow := TMyWindow(mainwindow.initWithFrame (UIScreen.mainScreen.bounds)); | ||
+ | // activate and show the window | ||
+ | mainwindow.makeKeyAndVisible; | ||
+ | end; | ||
+ | |||
+ | function NSStr(const s: string): NSString; | ||
+ | begin | ||
+ | // converting string to NSString (CFStringRef and NSString are interchangable) | ||
+ | Result:=NSString( CFStr(PChar(s))); | ||
+ | end; | ||
+ | |||
+ | var | ||
+ | pool : NSAutoreleasePool; | ||
+ | begin | ||
+ | // initialize foundation memory manger (aka autorelease pool) | ||
+ | pool := NSAutoreleasePool.alloc.init; | ||
+ | // launching main application loop | ||
+ | ExitCode:=UIApplicationMain(argc, argv, nil, NSSTR('TAppDelegate')); | ||
+ | // according to docs the UIApplicationMain never returns, | ||
+ | // but still the code present in the Obj-C main.m files | ||
+ | pool.release; | ||
+ | end. |
Revision as of 23:07, 4 January 2010
About
iPhone Laz extension is Lazarus IDE extension that's designed to simplify iPhone applications development.
Author
Dmitry 'skalogryz' Boyarintsev
License
modified LGPL (same as the FPC RTL and the Lazarus LCL). You can contact the author if the modified LGPL doesn't work with your project licensing.
Download
The latest stable release can be found on todo: link to the lazarus-ccr sf download location.
Change Log
- Version 0.5 05 Jan 2010
Dependencies / System Requirements
- Lazarus 0.9.29 (SVN trunk) or higher
- Mac OS X 10.5 (Intel) + XCode 3.1 or higher
- Mac OS X 10.6 + XCode or higher (untested)
- FPC 2.5.1 (or higher) with Objective-P syntax is recommended to use.
- Since Apple doesn't provide any tools for development on other than OS X system, the package cannot (should not) be installed and used on Windows or Linux.
Status: Stable / Alpha
Issues:
- The project, using iPhoneAll unit, compiled for the simulator must use Smart Linking switch (-XX)
- Then application title is changed (in Project options) a string is added to the main file
Application.Title:='MyApp';
It must be deleted manually
- XCode sometimes fails to debug the application on iDevice, though it's loaded successfully
- todo:
Installation
- Get the package source via svn or download from Sourceforge
- Open and install the package
How to use
Hello World
The sample requires a objective-p compiler (fpc 2.5.1 or higher) with cocoaint packages compiled for iPhone
program project1; {$mode objfpc}{$H+} {$modeswitch objectivec1} {$linkframework UIKit} uses iPhoneAll, CGContext, CGGeometry, CFString; type TAppDelegate = objcclass(NSObject) procedure applicationDidFinishLaunching(application: UIApplication); message 'applicationDidFinishLaunching:'; end; TMyWindow = objcclass(UIWindow) public procedure drawRect(c: CGRect); override; end; const helloworld = 'Hello world'; // window paint method procedure TMyWindow.drawRect(c: CGRect); var cg : CGContextRef; begin // getting current context cg:=UIGraphicsGetCurrentContext; // setting back ground color CGContextSetRGBFillColor(cg, 0, 0, 0.5, 1); CGContextFillRect(cg, c); // rotating up-side down context CGContextTranslateCTM(cg, 0, c.size.height); CGContextScaleCTM(cg, 1, -1); // setting text color CGContextSetRGBFillColor(cg, 1, 1, 0, 1); CGContextSetRGBStrokeColor(cg, 1, 1, 0, 1); // setting font (must set any) CGContextSelectFont(cg, 'Helvetica', 30, kCGEncodingMacRoman); // rendering text CGContextShowTextAtPoint(cg, 0, c.size.height-50, helloworld, length(helloworld)); end; var mainwindow : TMyWindow; { TAppDelegate } procedure TAppDelegate.applicationDidFinishLaunching(application: UIApplication); begin // application has initialized, now we can create the main window mainwindow:=TMyWindow(TMyWindow.alloc); // initialize window in Objective-C style mainwindow := TMyWindow(mainwindow.initWithFrame (UIScreen.mainScreen.bounds)); // activate and show the window mainwindow.makeKeyAndVisible; end; function NSStr(const s: string): NSString; begin // converting string to NSString (CFStringRef and NSString are interchangable) Result:=NSString( CFStr(PChar(s))); end; var pool : NSAutoreleasePool; begin // initialize foundation memory manger (aka autorelease pool) pool := NSAutoreleasePool.alloc.init; // launching main application loop ExitCode:=UIApplicationMain(argc, argv, nil, NSSTR('TAppDelegate')); // according to docs the UIApplicationMain never returns, // but still the code present in the Obj-C main.m files pool.release; end.