You've already forked lazarus-ccr
67 lines
2.0 KiB
ObjectPascal
67 lines
2.0 KiB
ObjectPascal
![]() |
{
|
||
|
cocoamsgbox.pas
|
||
|
|
||
|
This example shows how to use the objective-c runtime headers to call
|
||
|
initialization and finalization code for an objective-c class (in this case
|
||
|
NSAutoreleasePool), and also shows a message box using minimal AppKit
|
||
|
bindings to demonstrate that this can be used to build Cocoa applications.
|
||
|
|
||
|
Compilation of this example requires the following options:
|
||
|
-k-framework -kcocoa -k-lobjc
|
||
|
|
||
|
This example project is released under public domain
|
||
|
|
||
|
AUTHORS: Felipe Monteiro de Carvalho
|
||
|
}
|
||
|
program cocoamsgbox;
|
||
|
|
||
|
{$mode objfpc}{$H+}
|
||
|
|
||
|
uses
|
||
|
objc, ctypes, FPCMacOSAll;
|
||
|
|
||
|
{ Very limited appkit bindings, just to run this example independently
|
||
|
of the Cocoa bindings }
|
||
|
|
||
|
{ From AppKit/NSApplication.inc }
|
||
|
function NSApplicationLoad(): CBOOL; cdecl; external;
|
||
|
|
||
|
{ from AppKit/NSPanel.inc }
|
||
|
function NSRunAlertPanel(title, msg, defaultButton, alternateButton, otherButton: CFStringRef; others: array of const): cint; cdecl; external;
|
||
|
|
||
|
const
|
||
|
Str_NSAutoreleasePool = 'NSAutoreleasePool';
|
||
|
Str_alloc = 'alloc';
|
||
|
Str_init = 'init';
|
||
|
Str_release = 'release';
|
||
|
Str_Panel_Title = 'This is the title';
|
||
|
Str_Panel_Message = 'This is the message';
|
||
|
var
|
||
|
{ classes }
|
||
|
NSAutoreleasePoolId: objc.id;
|
||
|
{ objects }
|
||
|
allocbuf, pool: objc.id;
|
||
|
{ strings }
|
||
|
CFTitle, CFMessage: CFStringRef;
|
||
|
begin
|
||
|
{ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; }
|
||
|
NSAutoreleasePoolId := objc_getClass(PChar(Str_NSAutoreleasePool));
|
||
|
allocbuf := objc_msgSend(NSAutoreleasePoolId, sel_registerName(PChar(Str_alloc)), []);
|
||
|
pool := objc_msgSend(allocbuf, sel_registerName(PChar(Str_init)), []);
|
||
|
|
||
|
NSApplicationLoad();
|
||
|
|
||
|
CFTitle := CFStringCreateWithCString(nil, PChar(Str_Panel_Title), kCFStringEncodingUTF8);
|
||
|
CFMessage := CFStringCreateWithCString(nil, PChar(Str_Panel_Message), kCFStringEncodingUTF8);
|
||
|
|
||
|
{ uses a default "OK" button and no alternate buttons }
|
||
|
NSRunAlertPanel(CFTitle, CFMessage, nil, nil, nil, []);
|
||
|
|
||
|
CFRelease(CFTitle);
|
||
|
CFRelease(CFMessage);
|
||
|
|
||
|
{ [pool release]; }
|
||
|
objc_msgSend(pool, sel_registerName(PChar(Str_release)), []);
|
||
|
end.
|
||
|
|