Difference between revisions of "PasCocoa"
Sekelsenmat (talk | contribs) |
Sekelsenmat (talk | contribs) |
||
Line 84: | Line 84: | ||
{$define NSSTATUSBAR_PAS_H} | {$define NSSTATUSBAR_PAS_H} | ||
− | insert constants, records and other interface declarations with the exception of classes | + | //insert constants, records and other interface declarations with the exception of classes |
{$endif} | {$endif} | ||
Line 92: | Line 92: | ||
{$define NSSTATUSBAR_PAS_H} | {$define NSSTATUSBAR_PAS_H} | ||
− | declaration of classes and forward declarations of classes | + | //declaration of classes and forward declarations of classes |
{$endif} | {$endif} | ||
Line 98: | Line 98: | ||
{$ifdef IMPLEMENTATION} | {$ifdef IMPLEMENTATION} | ||
− | insert implementation declarations here. The order is not important on the implementation, so don't use extra ifdefs. | + | //insert implementation declarations here. The order is not important on the implementation, so don't use extra ifdefs. |
{$endif} | {$endif} | ||
</delphi> | </delphi> |
Revision as of 00:03, 23 February 2008
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>