PALM开发教程-第九章 分类和查找 |
| 作者:palmheart 来源:palmheart.net 发布时间:2005-12-21 3:36:55 |
|
在这一章中,我们在Contacts程序中添加分类。分类允许把Contacts分成组,如Business和Personal。你可以分别或统一查看这些组。你还可以为Contacts应用程序添加、删除、或者改变分类名称。你可以把每一条记录分配到一个组。 我们也将在Contacts中添加代码使用Palm OS系统查找(Find)功能在Contacts数据库中查找相关的内容。你可以输入短日期或者人的全名,在存储有不同的字段和格式的数据库中找到匹配的记录。你也可以选中任何一个找到的条目,让其在Contact Detail窗体中显示。 保存工程 在做下一步之前,还是要提醒你这一点。操作步骤如下: 1.运行Windows浏览器; 2.找到工程存放的文件夹; 3.选中文件夹,按CTRL+C来将其复制; 4.选择一个文件夹用来保存副本; 5.按CTRL+V将副本粘贴到备份文件夹中; 6.把项目名重命名为容易记的名字,我把它命名为Contacts CH.8。 分类 如果你想把应用程序放在一个组中,分类正好可以实现。可以给一个应用程序定义15个组,这样多的组对于一般的应用程序已足够了。在我的Palm上,任何一个应用程序的组都不超过6个。 Palm OS做了大量分类的工作。一旦把应用程序信息创建完成,分类管理器(Categories Manager)就会将其保持在那个地方。并且创建出下拉框来管理,允许对分类的创建、 修改和删除。 我们的主要工作是把分类中的记录分离出来并浏览。在这之前,处理记录的方法和以前完全相同。在显示记录之前,检查这条检查是否属于当前的分类。这就会引发滚动条的一些问题。 Contacts.rsrc的内容添加 在Constructor中添加三个分类: ◆在Contact List窗体添加弹出列表框,用来过滤contacts窗体列表。它必须与分类管理器(Category Manager)的要求一致; ◆在Contact Detail窗体中添加弹出列表框,用来选择当前记录所在的分类; ◆创建一个App Info String List资源,定义应用程序中所在的初始分类; Contact List Form的内容添加 现在到了向Contact List窗体中加入资源时候了,让人们来看看我们具体的分类。 1.运行Metrowerks构造器; 2.打开资源文件Contacts.rsrc,它位于项目文件夹中的Src文件夹中; 3.双击打开Contact List窗体; 4.从菜单中选择Window | Catalog,打开Catalog; 5.拖动一个列表框(list)到窗体中; 6.设置列表框属性:Object Identifier=CategoryList,Left Origin=86,Top Origin=1,Width=72,不复选Usable项,因为我们不希望窗体显示的时候把列表也把窗体显示出来,Visible Items=0。作为分类服务的一部分,Palm OS将动态地建立列表(根据我们的要求)。 7.拖动一个弹出触发按纽(Pop-up trigger)到窗体上; 8.将触发器命名为CategoryPopup。Left Origin=160,Top Origin=0,Width=0。不复选Anchor Left,这样使触发器标签文本(从左端的160象素处)和屏幕右侧右对齐。我们将在程序中快速的删除或添加标签中的文字。 9.完成后,Contact List窗体看起来如图9-1。 注意: 你不需要和一般的弹出触发器一样来设置列表的ID,尽管做了也不会有什么不当。你将看到,我们不是调用触发器的ctlSelectEvent事件,而是调用了具体的分类函数。 Contact Detail Form的内容添加 现在我们修改Contact Detail Form,允许人们在分类具体的条目。 10.在Resource Type and Name列表中双击打开Contact Detail List窗体; 11.拖动一个标签到窗体中。设置标签属性:Text为Category,选择粗体。Top Origin=90,选中所有的(按住SHIFT点击)的标签,再选择Arrange | Align Right Edges,使它与其它右对齐的标签对齐; 12.拖动一个列表框控件到窗体中; 13.设置列表框属性:Object Identifier= CategoryList。Left Origin=80,Top Origin=90,Width=80。不复选Usable,因为我们不希望窗体显示的时候列表框就显示。设Visible Items为0。和其它的分类列表框一样,Palm OS将动态建立这个列表; 14.拖动弹出触发器到窗体中; 15.和Contact List窗体类似,把触发器命名为CategoryPopup。Left Origin=80,Top Origin=89,Width=80。和以前一样,你可以保留或者删除标签中的文字; 16.完成后,Contact Detail窗体看起来如图9-2; 17.最后,需要新建一个App Info String List资源来初始化分类名称。在Constructor的Resource Type and Name列表中点击App Info String Lists,并按CTRL-K 新建一个。注意不要创建一个旧的String List; 18.把App Info String List命名为Category Labels,双击打开; 19.在列表的前三个条目中输入:Unfiled,Business和Personal。 20.按12次ENTER键创建16个条目。这将初始化其它分类为空白而不是垃圾。完成后,列表看起来如图9-3。我重申一下:你必须初始化所有16个条目;否则,一些令人费解的事情就会出现。 这就把为支持分类对资源文件所需做的修改完成了。关闭Constuctor并及时保存资源文件。 Contacts.c的修改 为支持分类,在Contacts.c中需要添加四个任务: ◆创建数据结构,以符合Category Manager的要求; ◆支持Contact Detail窗体中分类弹出列表; ◆支持Contact List窗体中的分类弹出列表; ◆Contact List窗体在不同分类时,处理滚动条事件; 初始化分类 分类信息一般要保存在应用程序主数据库的信息模块上。为此,需要在PilotMain()中创建数据库后,新添加一些代码。在函数的顶部先添加一些新的变量: LocalID dbID; // CH.9 Local ID of the database UInt cardNum; // CH.9 Card number LocalID appInfoID; // CH.9 Local ID of the app info block VoidHand hAppInfo; // CH.9 Handle to the app info block AppInfoPtr pAppInfo; // CH.9 Points to the app info block 然后,看一下应用程序的信息块: // CH.9 Get the ID and card number DmOpenDatabaseInfo( contactsDB, &dbID, NULL, NULL, &cardNum, NULL); // CH.9 Get the app info pointer if any DmDatabaseInfo( cardNum, dbID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &appInfoID, NULL, NULL, NULL ); 深入: 程序信息模块(App Info Block) 每个Palm OS数据库都有一个叫app info block特殊区域。你可以在这个区域中保存任何东西。如果已经使用它保存了分类,还可以在分类结构的末尾处插入具体的数据,Palm OS也 |
| [] [返回上一页] [打 印] |
|
文章评论 |
