TweetFollow Us on Twitter

Dec 96 Tips
Volume Number:12
Issue Number:12
Column Tag:Tips & Tidbits

Tips & Tidbits

by Steve Sisak

For a program I recently wrote, I wanted to do user input checking for a dialog box as they were typing into an EditText field. I wrote a routine to figure out what the contents of a specific EditText box will be if the current event is allowed to be processed. I then called the routine from my custom dialog event process, and analyzed the results. That way, I could easily decide if the user’s action would produce valid results, or if I needed to abort the current event.

IsDlgControl is a simple check for control characters we always want to process. DivineNewItemString is the routine that does all the work. PStrCopy is a little routine for copying Pascal strings - I’m sure that other people have better ways of doing this.

// some control key constants.
#define kEnterKey3
#define kBackspace 8
#define kTab9
#define kReturnKey 13
#define kEscapeKey 27
#define kLeftKey 28
#define kRightKey29
#define kUpKey   30
#define kDownKey 31
#define kDelete  0xFF

/* IsDlgControl
 * Returns true if c is a special control key (say an arrow key, or escape).
 * Otherwise returns false. */
Boolean IsDlgControl(char c)
{
 if ((c >= kEscapeKey) && (c <= kDownKey)) return true;
 if ((c == kReturnKey) || (c == kEnterKey) || (c == kDelete)
 || (c == kBackspace) || (c == kTab)) return true;
 return false;
 }

/* PStrCpy
 * A little routine to copy Pascal strings. Provided for those people who don’t
 * already use BlockMove() to do this for them ...  */
void PStrCpy(Str255 s, const Str255 t)
{
 short i;

 for (i=0; i<=s[0]; i++) {
 s[i]=t[i];
 }

/* DivineNewItemString
 * Given a DialogPtr, EventPtr and an item number for the active EditText DLOG
 * Item, it returns what the string will be if the current event is processed.
 * It should be called from a custom dialog event proc. */
void DivineNewItemString (DialogPtr d, EventRecord *e, short item, Str255
output)
{
 short  *TEScrpLength = (short *)0x0AB0;
 DialogRecord    *dr;
 TEHandle teh;
 char   c;
 Str255 input, text;
 short  selStart, selEnd;
 short  i;
 short  outStrIdx=0;
 short  iType;
 Handle iHandle;
 Rect   iRect;
    // get the text string
 GetDItem(d,item,&iType,&iHandle,&iRect);
 GetIText(iHandle,text);  // Set the input string
 c = (e->message & charCodeMask);
 if (IsDlgControl(c)) {  
    // if it’s a control char, return the item’s text.
 PStrCpy(output,text);
 return;
 } else if (e->modifiers & cmdKey) {
 if  ((c == ‘v’) || (c == ‘V’)) {
    // if pasting, get the pasted string.
 (void)TEFromScrap();
 HLock(iHandle);
 iHandle = TEScrapHandle();
 for (i=0; i< *TEScrpLength; i++) {
 input[i+1]=((unsigned char *)(*iHandle))[i];
 }
 input[0]=*TEScrpLength;
 HUnlock(iHandle);
 } else { // if any other command stroke ä
 PStrCpy(output,text);
 return;
 }
 } else { // else, set the input string equal to the new character
    // else, set the input string equal to the new character
 input[0]=1;
 input[1]=(unsigned char) c;
 }
    // get the selection point from the TERec
 dr = (DialogRecord *)d;
 teh = dr->textH;
 selStart=(*teh)->selStart;
 selEnd=(*teh)->selEnd;
    // generate output string: copy the first bit of text
 for (i=1; i<=selStart; i++) {
 output[++outStrIdx]=text[i];
 }
    //   copy the input string
 for (i=1; i<=input[0]; i++) {
 output[++outStrIdx]=input[i];
 }
    // copy the last part of text
 for (i=selEnd+1; i<=text[0]; i++) {
 output[++outStrIdx]=text[i];
 } // lastly, set the length
 output[0] = outStrIdx;
 }

Michael Trent

mtrent@msn.fullfeed.com

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

Combo Quest (Games)
Combo Quest 1.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0 (iTunes) Description: Combo Quest is an epic, time tap role-playing adventure. In this unique masterpiece, you are a knight on a heroic quest to retrieve... | Read more »
Hero Emblems (Games)
Hero Emblems 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: ** 25% OFF for a limited time to celebrate the release ** ** Note for iPhone 6 user: If it doesn't run fullscreen on your device... | Read more »
Puzzle Blitz (Games)
Puzzle Blitz 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Puzzle Blitz is a frantic puzzle solving race against the clock! Solve as many puzzles as you can, before time runs out! You have... | Read more »
Sky Patrol (Games)
Sky Patrol 1.0.1 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.1 (iTunes) Description: 'Strategic Twist On The Classic Shooter Genre' - Indie Game Mag... | Read more »
The Princess Bride - The Official Game...
The Princess Bride - The Official Game 1.1 Device: iOS Universal Category: Games Price: $3.99, Version: 1.1 (iTunes) Description: An epic game based on the beloved classic movie? Inconceivable! Play the world of The Princess Bride... | Read more »
Frozen Synapse (Games)
Frozen Synapse 1.0 Device: iOS iPhone Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Frozen Synapse is a multi-award-winning tactical game. (Full cross-play with desktop and tablet versions) 9/10 Edge 9/10 Eurogamer... | Read more »
Space Marshals (Games)
Space Marshals 1.0.1 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.1 (iTunes) Description: ### IMPORTANT ### Please note that iPhone 4 is not supported. Space Marshals is a Sci-fi Wild West adventure taking place... | Read more »
Battle Slimes (Games)
Battle Slimes 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: BATTLE SLIMES is a fun local multiplayer game. Control speedy & bouncy slime blobs as you compete with friends and family.... | Read more »
Spectrum - 3D Avenue (Games)
Spectrum - 3D Avenue 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: "Spectrum is a pretty cool take on twitchy/reaction-based gameplay with enough complexity and style to stand out from the... | Read more »
Drop Wizard (Games)
Drop Wizard 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Bring back the joy of arcade games! Drop Wizard is an action arcade game where you play as Teo, a wizard on a quest to save his... | Read more »

Price Scanner via MacPrices.net

Apple’s M4 Mac minis on sale for record-low p...
B&H Photo has M4 and M4 Pro Mac minis in stock and on sale right now for up to $150 off Apple’s MSRP, each including free 1-2 day shipping to most US addresses. Prices start at only $469: – M4... Read more
Deal Alert! Mac Studio with M4 Max CPU on sal...
B&H Photo has the standard-configuration Mac Studio model with Apple’s M4 Max CPU in stock today and on sale for $300 off MSRP, now $1699 (10-Core CPU and 32GB RAM/512GB SSD). B&H also... Read more

Jobs Board

All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.