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

Lyn 1.7.2 - Lightweight image browser an...
Lyn is a fast, lightweight image browser and viewer designed for photographers, graphic artists, and Web designers. Featuring an extremely versatile and aesthetically pleasing interface, it delivers... Read more
Lyn 1.7.2 - Lightweight image browser an...
Lyn is a fast, lightweight image browser and viewer designed for photographers, graphic artists, and Web designers. Featuring an extremely versatile and aesthetically pleasing interface, it delivers... Read more
Tunnelblick 3.6.7beta02 - GUI for OpenVP...
Tunnelblick is a free, open source graphic user interface for OpenVPN on OS X. It provides easy control of OpenVPN client and/or server connections. It comes as a ready-to-use application with all... Read more
jAlbum Pro 13.4 - Organize your digital...
jAlbum Pro has all the features you love in jAlbum, but comes with a commercial license. You can create gorgeous custom photo galleries for the Web without writing a line of code! Beginner-friendly... Read more
calibre 2.65.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
jAlbum 13.4 - Create custom photo galler...
With jAlbum, you can create gorgeous custom photo galleries for the Web without writing a line of code! Beginner-friendly, with pro results - Simply drag and drop photos into groups, choose a design... Read more
Backblaze 4.2.0.966 - Online backup serv...
Backblaze is an online backup service designed from the ground-up for the Mac. With unlimited storage available for $5 per month, as well as a free 15-day trial, peace of mind is within reach with... Read more
Backblaze 4.2.0.966 - Online backup serv...
Backblaze is an online backup service designed from the ground-up for the Mac. With unlimited storage available for $5 per month, as well as a free 15-day trial, peace of mind is within reach with... Read more
Tunnelblick 3.6.7beta02 - GUI for OpenVP...
Tunnelblick is a free, open source graphic user interface for OpenVPN on OS X. It provides easy control of OpenVPN client and/or server connections. It comes as a ready-to-use application with all... Read more
calibre 2.65.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

Siralim 2 (RPG / Roguelike) (Games)
Siralim 2 (RPG / Roguelike) 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Siralim 2 is an old-school monster catching RPG. Summon and customize hundreds of creatures to fight for you as... | Read more »
Clean Text (Productivity)
Clean Text 1.0 Device: iOS Universal Category: Productivity Price: $3.99, Version: 1.0 (iTunes) Description: | Read more »
Gemini - A Journey of Two Stars (Games)
Gemini - A Journey of Two Stars 1.0.1 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.1 (iTunes) Description: *** SPECIAL LAUNCH SALE: $2.99 (25% off) *** "A mesmerizing and unexpectedly emotional journey." -- Los... | Read more »
How to get four NFL superstars for your...
Even though you're probably well on your way to building a top notch squad for the new season in Madden NFL Mobile, let's say you could beef it up by adding Rob Gronkowski, Antonio Brown, Von Miller, and Todd Gurley to your roster. That's... | Read more »
Cartoon Network Superstar Soccer: Goal!!...
Cartoon Network Superstar Soccer: Goal!!! – Multiplayer Sports Game Starring Your Favorite Characters 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Become a soccer superstar with your... | Read more »
NFL Huddle: What's new in Topps NFL...
Can you smell that? It's the scent of pigskin in the air, which either means that cliches be damned, pigs are flying in your neck of the woods, or the new NFL season is right around the corner. [Read more] | Read more »
FarmVille: Tropic Escape tips, tricks, a...
Maybe farming is passé in mobile games now. Ah, but farming -- and doing a lot of a other things too -- in an island paradise might be a little different. At least you can work on your tan and sip some pina coladas while tending to your crops. [... | Read more »
Become the King of Avalon in FunPlus’ la...
King Arthur is dead. Considering the legend dates back to the 5th century, it would be surprising if he wasn’t. But in the context of real-time MMO game King of Avalon: Dragon Warfare, Arthur’s death plunges the kingdom into chaos. Evil sorceress... | Read more »
Nightgate (Games)
Nightgate 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: *** Launch Sale: 25% OFF for a limited time! *** In the year 2398, after a great war, a network of intelligent computers known as... | Read more »
3 best fantasy football apps to get you...
Last season didn't go the way you wanted it to in fantasy football. You were super happy following your drafts or auctions, convinced you had outsmarted everyone. You were all set to hustle on the waiver wire, work out some sweet trades, and make... | Read more »

Price Scanner via MacPrices.net

Back To School with OtterBox Essentials
Back to school means back to an environment that is tough on tech. OtterBox has the back to school essentials you need to keep tech safe from drops, bumps, scratches and hallway havoc. Check out the... Read more
VRS Design Releases New iPhone 7 Plus Case Li...
With a device as large and costly as the iPhone 7 Plus, it is primal instinct to protect it from potential damage. According to a study by SquareTrade in 2012, iPhone damages cost Americans roughly $... Read more
MacBook Airs on sale for up to $101 off MSRP
Amazon has 11″ and 13″ MacBook Airs on sale for up to $101 off MSRP for a limited time. Shipping is free: - 11″ 1.6GHz/128GB MacBook Air (model MJVM2LL/A): $798 $101 off MSRP - 11″ 1.6GHz/256GB... Read more
Apple certified refurbished iPad mini 4s avai...
Apple has certified refurbished iPad mini 4s now available for up to $120 off the cost of new models. An Apple one-year warranty is included with each iPad, and shipping is free. The following models... Read more
Apple price trackers, updated continuously
Scan our Apple Price Trackers for the latest information on sales, bundles, and availability on systems from Apple’s authorized internet/catalog resellers. We update the trackers continuously: - 15″... Read more
Global Tablet Shipments Projected to Increase...
Digitimes’ Jim Hsiao reports that global tablet shipments will increase by 16.3 percent sequentially to reach nearly 47 million units in 2016′s third quarter, but that volume will still be down over... Read more
Apple’s 2016 Back to School promotion: Free B...
Purchase a new Mac or iPad using Apple’s Education Store and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free, and... Read more
Apple refurbished iPad Air 2s available start...
Apple has Certified Refurbished iPad Air 2 available starting at $339. Apple’s one-year warranty is included with each model, and shipping is free: - 128GB Wi-Fi iPad Air 2: $499 - 64GB Wi-Fi iPad... Read more
13-inch 2.5GHz MacBook Pro available for $961...
Overstock has the 13″ 2.5GHz MacBook Pro available for $961.63 including free shipping. Their price is $138 off MSRP. Read more
Clearance 12-inch Retina MacBooks, Apple refu...
Apple has Certified Refurbished 2015 12″ Retina MacBooks available starting at $929. Apple will include a standard one-year warranty with each MacBook, and shipping is free. The following... Read more

Jobs Board

SW Engineer *Apple* TV - Apple Inc. (United...
The Apple TV team is looking for excellent software engineers with experience in hardware, media management, media playback, content delivery and a passion for Read more
*Apple* Retail - Multiple Positions Victor,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* /Mac Support Engineer - GFI Digital,...
FI Digital, Inc. is currently seeking candidates for a full time Apple Support Engineer to add to our Maryland Heights, Missouri IT team. Candidates must be dynamic Read more
SW Engineer *Apple* TV - Apple Inc. (United...
The Apple TV team is looking for excellent software engineers with experience in hardware, media management, media playback, content delivery and a passion for Read more
Senior *Apple* Administrator - Pratt Instit...
POSITION SUMMARY: Directs the coordination and standardization of campus-wide Apple systems, including planning, analysis and implementation of Apple -related Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.