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

A beginner's guide to Spellbinders
Spellbinderslooks a heck of a lot like Clash Royale, but has an entirely different pace to it. As such, it can be difficult to adjust to. Just in case you've been playing way too much Clash Royale (and who hasn't), we've put together a bunch of... | Read more »
Camping With Grandpa (Education)
Camping With Grandpa 1.0 Device: iOS Universal Category: Education Price: $2.99, Version: 1.0 (iTunes) Description: | Read more »
Black Hole Joyrider (Games)
Black Hole Joyrider 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Guide your spacecraft through the gravity well of a powerful black hole using only your retro-thrusters and dwindling fuel... | Read more »
My Koi (Games)
My Koi 1.0 Device: iOS iPhone Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: My Koi is a beautiful and relaxing fish pond app. Customise and name each fish. Feed them daily. Watch them grow. Collect new fish.... | Read more »
Never Gone (Games)
Never Gone 1.0.2 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.2 (iTunes) Description: ###IMPPORTANT### Never Gone's HD art resources require devices with more than 1GB RAM, so please note that iPhone 4/4s, iPad 2/... | Read more »
INKS. (Games)
INKS. 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: From the makers of BAFTA-winning Lumino City comes INKS. INKS updates pinball for a new generation. It combines the joy of pinball with... | Read more »
How to maximise your profits in Bakery B...
Running a bakery can be an expensive venture. You’ll need to continuously upgrade your oven, your kitchen supplies, and even your ingredients to keep customers happy. Most of these renovations in Bakery Blitz cost a pretty penny, but we have a few... | Read more »
How to manage your time in Bakery Blitz
It can be tricky, especially when you risk burning your kitchen to the ground if you forget a cake in the oven, so make sure to use these time management tricks to keep your bakery running smoothly. Don’t collect the money right away [Read more] | Read more »
Model 15 (Music)
Model 15 1.0 Device: iOS iPhone Category: Music Price: $29.99, Version: 1.0 (iTunes) Description: The Moog Model 15 App is the first Moog modular synthesizer and synthesis educational tool created exclusively for iPad, iPhone and... | Read more »
How to deal with wind in Angry Birds Act...
Angry Birds Action! is a physics-based puzzler in which you're tasked with dragging and launching birds around an obstacle-littered field to achieve a set objective. It's simple enough at first, but when wind gets introduced things can get pretty... | Read more »

Price Scanner via MacPrices.net

Hybrid Tablets Meet Rising Demand for a Singl...
Rising demand for a new breed of hybrid tablets — 2 in 1 devices that function as either a laptop or a tablet — is shaking up the tablet market and contributing to a shift in the way owners are... Read more
Bausch + Lomb and IBM Collaborate on iPhone...
Global eye health company Bausch + Lomb, and IBM on Thursday announced a collaboration to develop the first app of its kind for iPhone and iPad for surgeons who perform cataract surgery. The... Read more
Apple & SAP Partner to Deliver New iOS Ap...
Apple and Walldorf, Germany based SAP have announced a partnership to revolutionize the mobile work experience for enterprise customers of all sizes, combining powerful native apps for iPhone and... Read more
New 12-inch 1.1GHz Rose Gold Retina MacBook o...
B&H Photo has the new 2016 12″ 1.1GHz/256GB Rose Gold Retina MacBook (sku MMGL2LL/A) on sale for $1199 including free shipping plus NY tax only. Their price is $100 off MSRP, and it’s the lowest... Read more
12-inch 128GB iPad Pros on sale for up to $10...
B&H Photo has 12″ 128GB WiFi iPad Pros on sale for up to $100 off MSRP, each including free shipping. B&H charges sales tax in NY only: - 12″ Space Gray 128GB WiFi iPad Pro: $899 $50 off MSRP... Read more
Global Tablet Sales Slump Continues, iPad’s F...
Another miserable showing for the global slate tablet category in calendar Q1/16, with global tablet shipments falling another 1ten percent to 46.5 million units during the according to Strategy... Read more
Revel Systems to Showcase iPad POS Platform w...
Revel Systems, specialists in iPad Point of Sale management solution for brick-and-mortar retail, food businesses and more, today announced that it will showcase its innovative iPad Point of Sale... Read more
13-inch 2.5GHz MacBook Pro on sale for $999,...
B&H Photo has the 13″ 2.5GHz MacBook Pro on sale for $999 including free shipping plus NY sales tax only. Their price is $100 off MSRP. Read more
Apple refurbished 2015 iMacs available for up...
Apple now has a full line of Certified Refurbished 2015 21″ & 27″ iMacs available for up to $350 off MSRP. Apple’s one-year warranty is standard, and shipping is free. The following models are... Read more
Indian Smartphone Market Grows Annually by 12...
India’s smartphone market grew by 12 percent year-over-year, with 24.4 million units shipping in Q1 2016. The top five vendors stayed the same, with Samsung in the lead, followed by Micromax, Intex... Read more

Jobs Board

*Apple* Support Technician II - Worldventure...
…global, fast growing member based travel company, is currently sourcing for an Apple Support Technician II to be based in our Plano headquarters. WorldVentures is Read more
*Apple* Retail - Multiple Positions (US) - A...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Restaurant Manager (Neighborhood Captain) - A...
…in every aspect of daily operation. WHY YOU'LL LIKE IT: You'll be the Big Apple . You'll solve problems. You'll get to show your ability to handle the stress and Read more
Automotive Sales Consultant - Apple Ford Linc...
…you. The best candidates are smart, technologically savvy and are customer focused. Apple Ford Lincoln Apple Valley is different, because: $30,000 annual salary Read more
Restaurant Manager (Neighborhood Captain) - A...
…in every aspect of daily operation. WHY YOU'LL LIKE IT: You'll be the Big Apple . You'll solve problems. You'll get to show your ability to handle the stress and Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.