TweetFollow Us on Twitter

Definition Routines
Volume Number:2
Issue Number:7
Column Tag:Pascal Procedures

Introduction to Definition Routines

By Darryl Lovato, Lovato Programming, Salt Lake City, UT

Introduction

This is the first of a series of articles which will cover Macintosh Definition Routines. I will use TML Pascal for all the programming examples because it is rapidly becoming the most popular Development System on the Mac, and because the new TML linker will allow you to create procedure resources (MDEF's PROC's WDEF's FKEY's ect.) quickly and efficiently.

This month I will cover the issues in common to all the different types of definition routines. In the following months I will cover Menu definition routines (MDEF's), Window definition routines (WDEF's), Control definition routines (CDEF's), List definition routines (LDEF's), and function key routines (FKEY's) in depth.

Defintion routines allow you to create a variation of a standard type of "Object" to better fit your needs. That is, they effect the general appearance and behavior of whatever they define. The pattern selection Menu in MacDraw is a good example of this. Definition routines are usually stored as resources but they may also be set up as routines within your program.

The best way to develop a Definition Routine is to make it a routine in your code, and when its finished, to compile it into a resource which can then be used with any application. The Menu, Window, Contol, and List managers all allow you to use definition routines.

Fig. 1 A non-standard Menu Item

Getting a Handle On Things

When you create a new object (menu, window ect.), you can specify a non-standard definition routine (a routine other than the normal Mac ROM way of doing something) for it to use. There are two ways of doing this.

1. By making the procedure a resource in a seperate file.

An example of this process for a non-standard menu follows. Listing #1 is the code that creates the Menu Definition Resource and listing #2 shows how to use it.

{---------listing fragment #1 the resource def program-------}
{must be compiled with the DeskAcc option checked}
program TheMDEFProc;

{pascal directive to create a MDEf resource}
{---> $C type id [attribute] [name] <---}

{$C 'MENU' 256 4 'TheMDEFRes'}

var { no globals allowed }

  procedure theMDEFProcedure(...);

  begin
    { code to impliment the Menu Def }
  end;

begin {no main program allowed}
end.

{------listing fragment #2 the program that uses the res-----}

program UseTheMenu;

{$L TheMDEFProc} {link the file we created above}
          {it includes the menu def we created}

Two methods can be used to put a handle to your MDEF resource in the MenuProc field of the menu.

(1) In the menu resource, change the menuID field to the resource id of your MDEF. Then,when you call the GetMenu function, the Menu Manager will automatically read the MDEF resource from the resource file, and place a handle to it in the MenuProcField of the menu

(2) If you create the menu (or window) by any means other than reading a resource (by calling NewMenu, for instance), you must get a handle to the MDEF by executing the following code:

 MyMenuHand := NewMenu(100,'menuTitle');
 myProcHdl := GetResource('MDEF',256);
 MyMenuHand^^.menuProc := myProcHdl;

2. By putting the proc in your code and creating a handle to it.

First get a handle to your object, by calling NewMenu or GetNewMenu. Then get a handle to the definition routine, which may be part of your code, and shove it into the MenuProc field of your objects record. An Example of this method follows:

var
 myMenuHdl : MenuHandle;

procedure TheMenuProc(...);
begin
.
.
.
end;
.
.
.
myMenuHdl := GetNewMenu(...);
myMenuHdl^^.menuProc := NewHandle(0);
myMenuHdl^^.menuProc^ := Ptr(@TheMenuProc);

Fig. 2 A non-standard window definition

Things to Come

All of the definition routines are passed a message which tell them what kind of action the are to do. Typical actions are Initialize, Draw, Select, Drag, Size, ect. A brief introduction to the individual definition routines we will cover in the in the next couple of months follow:

Menu Defintion Procedure

The menu definition procedure has the following Pascal definition:

procedure MyMenu(message : integer;
 theMenu : MenuHandle;
 var menuRect : Rect;
 hitPt : Point;
 var whichItem : Integer);

The message parameter tells you what kind of action to take, it may be one of the following values:

mDrawMsg

If the menu definition procedure is passed this value it should draw theMenu inside menuRect.

mChooseMsg

If the menu definition procedure is passed this value it should hilite the item which hitPt is in, unhilite the old item, and return the new item in whichItem.

mSizeMsg

If the menu definition procedure is passed this value it should calculate the width and height of the menu and put the results in theMenu^^.width and theMenu^^.height respectively.

Window Defintion function

The window definition function has the following Pascal definition:

function MyWindow(varCode : integer;
 theWindow : WindowPtr;
 message : integer;
 param : LongInt)
 : LongInt;

The message parameter tells you what kind of action to take, it may be one of the following values:

wDraw

If the window definition function is passed this value it should draw the window frame. Before doing this, however, the routine should check to see if the window frame should show hiliting, if the window is visible, if the window has a go-away box, ect.

wHit

If the window definition function is passed this value it should inspect param, which is the point where the mouse was pressed. Then it should check to see if the point is in one of the windows regions, such as the GoAway region, and return the appropriate result.

wCalcRgns

If the window definition function is passed this value it should calculate the windows current structure and content regions and store the results in the window record.

wNew

If the window definition function is passed this value it should perform any extra initialization and allocation it may require.

wDispose

If the window definition function is passed this value it should perform any additional disposal actions which it may require. This message "Undo's" whatever was done in the wNew routine.

wGrow

If the window definition function is passed this value it should draw a grow image of the window to fit the given rectangle. This operation is called repeatedly when the user drags inside the grow region.

wDrawGIcon

If the window definition function is passed this value it should draw the size box icon in the window.

Control Defintion Function

The control definition function has the following Pascal definition:

function MyControl(varCode : integer;
 theControl : ControlHandle;
 message : integer;
 param : LongInt)
 : LongInt;

The message parameter tells you what kind of action to take, it may be one of the following values:

drawCntl

If the control definition function is passed this value it should draw all or part of theControl.

testCntl

If the control definition function is passed this value it should test where the mouse button was pressed.

calcCRgns

If the control definition function is passed this value it should calculate the control or its indicators regions.

initCntl

If the control definition function is passed this value it should do any extra initialization actions it needs to perform.

dispCntl

If the control definition function is passed this value it should take any additional disposal actions.

posCntl

If the control definition function is passed this value it should reposition the controls indicator, and update it.

thumbCntl

If the control definition function is passed this value it should calculate parameters for dragging indicator.

dragCntl

If the control definition function is passed this value it should drag the control or its indicator.

autoTrack

If the control definition function is passed this value it should execute the control's action procedure.

List Defintion Procedure

The list definition procedure has the following Pascal definition:

procedure MyList(lmessage : integer;
 lSelect : Boolean;
 lRect : Rect;
 lCell : Cell;
 lDataOffset : integer;
 lDataLen : integer;
 lHandle : ListHandle);

The message parameter tells you what kind of action to take, it may be one of the following values:

lInitMsg

If the list definition procedure is passed this value it should do any additional list initialization.

lDrawMsg

If the list definition procedure is passed this value it should draw the cell.

lHiliteMsg

If the list definition procedure is passed this value it should invert the cell's highlite state.

lCloseMsg

If the list definition procedure is passed this value it should take any additional disposal actions.

A Warning From Apple

Apple has stated, "For the convienience of the application's user, remember to conform to the Macintosh User Interface Guidlines as much as possable". I agree totally. So don't make a round menu or a window in the shape of a Apple. (I've already done them both anyway!) [Wow! How about publishing the Apple window? -Ed.]

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

LaunchBar 6.9 - Powerful file/URL/email...
LaunchBar is an award-winning productivity utility that offers an amazingly intuitive and efficient way to search and access any kind of information stored on your computer or on the Web. It provides... Read more
MacFamilyTree 8.2.1 - Create and explore...
MacFamilyTree gives genealogy a facelift: modern, interactive, convenient and fast. Explore your family tree and your family history in a way generations of chroniclers before you would have loved.... Read more
Spotify 1.0.57.474. - Stream music, crea...
Spotify is a streaming music service that gives you on-demand access to millions of songs. Whether you like driving rock, silky R&B, or grandiose classical music, Spotify's massive catalogue puts... Read more
VOX 2.8.26 - Music player that supports...
VOX just sounds better! The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all audio formats you should ever need.... Read more
beaTunes 5.0.1 - Organize your music col...
beaTunes is a full-featured music player and organizational tool for music collections. How well organized is your music library? Are your artists always spelled the same way? Any R.E.M. vs REM?... Read more
LibreOffice 5.3.4.2 - Free, open-source...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
Sparkle Pro 2.2 - $79.99
Sparkle Pro will change your mind if you thought building websites wasn't for you. Sparkle is the intuitive site builder that lets you create sites for your online portfolio, team or band pages, or... Read more
calibre 3.1.1 - Complete e-book library...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital librarian... Read more
calibre 3.1.1 - Complete e-book library...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital librarian... Read more
Sparkle Pro 2.2 - $79.99
Sparkle Pro will change your mind if you thought building websites wasn't for you. Sparkle is the intuitive site builder that lets you create sites for your online portfolio, team or band pages, or... Read more

Latest Forum Discussions

See All

This War of Mine gets a new ending and m...
This War of Mine just got a big new update, featuring free DLC that adds a new ending to the game, among other exciting changes. The update is celebrating the game's two-year release anniversary. Apart from the new ending, which will be quite... | Read more »
Summon eight new heroes in Fire Emblem H...
Nintendo keeps coming at us with Fire Emblem Heroes updates, and it doesn't look like that trend is stopping anytime soon. The folks behind the game have just announced the new War of the Clerics Voting Gauntlet, expected to start next Tuesday. [... | Read more »
The best deals on the App Store this wee...
iOS publishers are pulling out all the stops this week -- there's a huge number of seriously great games at discounted prices this week. Let's not waste any time and get right down to business. [Read more] | Read more »
The House of da Vinci (Games)
The House of da Vinci 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: Enter The House of Da Vinci, a new must-try 3D puzzle adventure game. Solve mechanical puzzles, discover hidden... | Read more »
Solve the disappearance of history’s gre...
Blue Brain Games invites you to indulge in an immersive hands-on 3D puzzle adventure in similar vein to The Room series, with its debut release The House of Da Vinci. Set during the historic period of the Italian Renaissance (when Leonardo himself... | Read more »
Age of Rivals (Games)
Age of Rivals 3.3 Device: iOS Universal Category: Games Price: $.99, Version: 3.3 (iTunes) Description: Deep civilization-building strategy in a fast-paced card game! | Read more »
Panthera Frontier (Games)
Panthera Frontier 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: | Read more »
Angry Birds Evolution beginner's gu...
Angry Birds changes things up a fair bit in its latest iteration, Angry Birds Evolution. The familiar sling-shot physics mechanics are still there, but the game now features team-based gameplay, RPG elements, and a new top-down view. With all of... | Read more »
Sega Forever is for the retro game fans
Sega is launching a new retro games service titled Sega Forever, in a move that's sure to delight games enthusiasts with a bit of nostalgia. Sega's releasing five classic games for free. The titles include Sonic the Hedgehog, Phantasy Star II,... | Read more »
The Little Acre (Games)
The Little Acre 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: | Read more »

Price Scanner via MacPrices.net

ABBYY TextGrabber 6 for iOS Implements Instan...
ABBYY has announced the release of TextGrabber 6.0.0, an important feature update to the company’s productivity app developed for iOS and Android devices. TextGrabber 6.0 now offers Real-Time... Read more
vPhone, First Smartphone That Can’t Be Lost,...
Austin, Texas based Hypori has introduced the vPhone, a virtual smartphone that affords every business user the benefits of separate work and personal phones, conveniently delivered on a single... Read more
Save this weekend with 2016 refurbished MacBo...
Apple has dropped prices on Certified Refurbished 2016 15″ and 13″ MacBook Pros by as much as $590 off original MSRP. An Apple one-year warranty is included with each model, and shipping is free: -... Read more
New 27-inch 3.4GHz iMac on sale for $1699, sa...
MacMall has the new 2017 27″ 3.4GHz iMac (MNE92LL/A) in stock and on sale for $1699 including free shipping. Their price is $100 off MSRP. Read more
Clearance 2016 MacBook Pros available for up...
B&H Photo has clearance 2016 13″ and 15″ MacBook Pros in stock today and on sale for up to $400 off original MSRP. Shipping is free, and B&H charges NY & NJ sales tax only: - 15″ 2.7GHz... Read more
Apple Ranks 9th In comScore Top 50 U.S. Digit...
comScore, Inc. has released its monthly ranking of U.S. online activity at the top digital media properties for May 2017 based on data from comScore Media Metrix Multi-Platform. * Entity has... Read more
10.5-inch iPad Pros available for up to $20 o...
B&H Photo has the new 2017 10.5″ iPad Pros available for up to $20 off MSRP including free shipping plus NY & NJ sales tax only: - 64GB iPad Pro WiFi: $649 - 256GB iPad Pro WiFi: $749 - 512GB... Read more
Three Off-The-Beaten-Track iOS Apps That Dese...
One of the great things about using iPads and iPhones is the vast selection of apps available for most anything you want or need to do. The three outlined in this article have been in my core app... Read more
Apple No. 1 Spot In Gartner Top 100 Vendors i...
Gartner, Inc. has unveiled the top global 100 vendors in IT in 2016 based on their revenue across IT (excluding communication services) and component market segments. In the Gartner Global Top 100:... Read more
Clearance iMacs available for up to $300 off...
B&H Photo has clearance 21″ and 27″ Apple iMacs available starting at $949, each including free shipping plus NY & NJ sales tax only: - 27″ 3.3GHz iMac 5K: $1999 $300 off original MSRP - 27″... Read more

Jobs Board

*Apple* News Product Marketing Mgr., Publish...
…organizational consensus on strategy and vision for publisher tools, authoring, and Apple News Format.Carries this strategy and vision across the organization to Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Security Data Analyst - *Apple* Information...
…data sources need to be collected to allow Information Security to better protect Apple employees and customers from a wide range of threats.Act as the subject matter Read more
Lead *Apple* Solutions Consultant - Apple I...
…integrity, and trust.Success Metrics/Key Performance Indicators:Quantitative* Year over Year growth in Apple Product and Beyond the Box sales in the assigned Point of Read more
*Apple* Solutions Consultant till v%u00E5r...
…ethics, integrity, and trust.Success Metrics/Key Performance Indicators:QuantitativeYear over Year growth in Apple Product and Beyond the Box sales in the assigned Point Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.