PasCocoa
PasCocoa is the project to build object oriented bindings to use Cocoa in Pascal.
Objective-C to Pascal Bindings
Example
<delphi> program simplewindow;
{$mode delphi}
uses
objc, ctypes, FPCMacOSAll, AppKit, Foundation;
const
Str_Panel_Title = 'This is the title'; Str_Panel_Message = 'This is the message';
var
{ classes } pool: NSAutoreleasePool; MainWindow: NSWindow; { strings } CFTitle, CFMessage: CFStringRef; { sizes } MainWindowRect: NSRect;
begin
{ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; } pool := NSAutoreleasePool.Create;
// Creates the application NSApp object NSApp := NSApplication.sharedApplication;
// Creates a simple window MainWindowRect.origin.x := 300.0; MainWindowRect.origin.y := 300.0; MainWindowRect.size.width := 300.0; MainWindowRect.size.height := 500.0;
MainWindow := NSWindow.initWithContentRect(MainWindowRect, NSTitledWindowMask or NSClosableWindowMask or NSMiniaturizableWindowMask or NSResizableWindowMask, NSBackingStoreBuffered, NO); MainWindow.orderFrontRegardless;
// CreateMenu();
{ Enters main message loop }
NSApp.run;
{ [pool release]; } pool.Free;
end. </delphi>
Subversion
svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/bindings/objc objc svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/bindings/pascocoa pascocoa
Implementation Details
The Cocoa headers contain several peculiarities that lead us to need a special structure for the bindings. First, several forward declarations of classes are done in a very unordently way. Pascal only accepts forward declarations of classes if they are all declared on the same type clause, and therefore a special session CLASSES is created on the include file.
The include file has a total of 3 separate sessions: HEADER, CLASSES and IMPLEMENTATION
A tipical include file should have this structure:
<delphi> {%mainunit appkit.pas} {
NSStatusBar.h Application Kit Copyright (c) 1997-2005, Apple Computer, Inc. All rights reserved.
}
{$ifdef HEADER} {$ifndef NSSTATUSBAR_PAS_H} {$define NSSTATUSBAR_PAS_H}
insert constants, records and other interface declarations with the exception of classes
{$endif} {$endif} {$ifdef CLASSES} {$ifndef NSSTATUSBAR_PAS_H} {$define NSSTATUSBAR_PAS_H}
declaration of classes and forward declarations of classes
{$endif} {$endif} {$ifdef IMPLEMENTATION}
insert implementation declarations here. The order is not important on the implementation, so don't use extra ifdefs.
{$endif} </delphi>