Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 6593|回复: 2

Lazarus 使用 Carbon

[复制链接]

该用户从未签到

发表于 2009-9-6 17:53:01 | 显示全部楼层 |阅读模式
FPC 和 Carbon



Carbon 是Mac OS X 和 Classic Mac OS 8.1 或以上可用的程序 API . 它能用来创建完全原生的 Macintosh 程序并有 Aqua 外观. 这份文档提供一份有效的信息关于怎样在Object Pascal 软件中使用这些 API.



Pascal Bindings



Carbon bindings 位于 FPCMacOSAll 单元,  FPC 的一般安装都含有它.


Carbon 手册



如果你不想用LCL组件来创建 Carbon 程序 , 那么你必须用 Carbon API 来实现. 这个小手册将展示怎样使用 CarbonAPI 函数来创建程序并用 XCode Interface Builder 来创建用户界面.



    * 新建一个项目文件夹并在里面新建一个 .pas 文件, 或者你也可以用Lazarus来新建一个项目 (Project->New Project->Custom Application)

    * 保存一个空文件 (对Lazarus是空项目) 然后暂时不管它.



所有的 Mac OS 图形用户界面程序必须作为 包(bundles). 包是文件夹和文件的一种特殊的集合, 它包含运行一个程序所必须的所以信息.



    * 新建一个程序包用刚才那个空 .pas 文件一样的名字. 创建一个包的脚本在这个链接: wiki.lazarus.freepascal.org/XDev_Toolkit 



(如果你正在使用 Lazarus, 你可以方便的用菜单创建它 Project Options -> Create Application Bundle);



为创建一个 GUI 程序, 需要使用 Interface Builder. 这个工具随 XCode 工具提供, 可以在 /Developer/Applications/找到. 创建 GUI 程序不是非要Interface Builder, 但 IB 是最方便的.



    * 打开 Interface Builder



    * 选择模版 Carbon -> Application. 将创建一个 carbon 程序模版, 包含主要的菜单和窗口.



熟悉一下Interface Builder, 它有一个 '组件面板(component palette)' 作为库 和 '对象检查器(object inspector)'作为检查器 (要打开  检查器按 cmd-shift-I 或 从主菜单 Tools->Inspector)



    * 在建立的菜单上添加一个 Static Text object (Label). 添加一个控件可以简单的拖到窗口上. 双击新添加的 Static Text 改变它的标题如 'Hello World';



    * 保存程序模版到项目文件夹, 名为 'main' 文件类型为 nib (3.x or 2.x 版本 for Leopard, .nib 扩展名会自动添加)



    * 复制新建的 main.nib 文件到程序包. yourBundle.app/Contents/Resources/. 资源文件夹是任何 nib 文件被搜索的地方.



如果你使用 Finder 你可以用 'Show Package Content'来进入程序文件夹,  如果你使用控制台 你可以用下面的命令来复制 cp main.nib -r ./yourBundle.app/Contents/Resources/main.nib (yourBundle.app 是你的程序包的名字)



现在, 回到空的 .pas 文件 (或空的项目文件), 它是以前创建的. 写入下面的代码到 .pas



uses

  MacOSAll;

      

var

  err     : OSStatus;

  nibRef  : IBNibRef = nil;

  window  : WindowRef = nil;

   

begin

  err := noErr;

   

  try

    // 创建一个 Nib 引用 通过 nib 文件名 (不要 .nib 扩展名)

    // CreateNibReference 只搜索程序包.

    err := CreateNibReference(CFSTR('main'), nibRef);

    if err <> noErr then  Exit;

            

    // 一旦 nib 引用被创建, 设置菜单栏. "MainMenu" 是菜单栏对象的名字

    // 这个名字在InterfaceBuilder 中创建时设置的.

    err := SetMenuBarFromNib(nibRef, CFSTR('MainMenu'));

    if err <> noErr then Exit;

           

    // 然后创建一个窗口. "MainWindow" 时窗口对象的名字.

    //This name is set in InterfaceBuilder when the nib is created.

    err := CreateWindowFromNib(nibRef, CFSTR('Window'), window);

    if err <> noErr then Exit;

      

  finally

    // 我们不再需要 nib 引用.

    DisposeNibReference(nibRef);

  end;

   

  // 窗口创建时隐藏了因此显示它.

  ShowWindow(window);

   

  // 运行主要的消息循环启动程序.  

  RunApplicationEventLoop;

end.

                           



    * 保存文件.

    * 现在构建它



下面是命令行.记住你要让Free Pascal 知道 MacOSAll 文件的位置 (你可以在 /etc/fpc.cfg 文件中指定路径)



fpc yourMainFile.pas -k-framework -kCarbon



如果没有创建文件链接, 你得创建一个 或复制可执行文件 (每次重新构建程序你都要复制一次可执行文件);



cp youMainFile ./youBundle.app/Contents/MacOS/





If you're using Lazarus, you can simply select Run->Build, you can also launch the application.

评分

参与人数 1威望 +10 收起 理由
猫工 + 10 优秀文章

查看全部评分

回复

使用道具 举报

该用户从未签到

发表于 2009-9-9 20:17:59 | 显示全部楼层
我也要好好研究研究
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-9-12 17:52:49 | 显示全部楼层
引用第1楼zblb1于2009-09-09 20:17发表的  :
我也要好好研究研究
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 21:09 , Processed in 0.035339 second(s), 14 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表