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

 
AAPL
$565.32
Apple Inc.
+0.00
GOOG
$603.66
Google Inc.
+0.00
MSFT
$29.07
Microsoft Corpora
+0.00
MacNews Search:
Community Search:
view counter

view counter
view counter
view counter
view counter
dockXtender
view counter
view counter
view counter
view counter

13 Year-Old Releases First App, Mad Pigs
Last month, I reported on a 15 year-old developer releasing his first game (Patrick Balestra and Catch the Airplanes). This month, we found a developer a full two years younger releasing his first game! Jack McGraw, 13 year-old developer, has just released his first app, Mad Pigs. | Read more »
Samplodica Review
Samplodica Review By Angela LaFollette on May 25th, 2012 Our Rating: :: MUSICAL MAYHEMiPhone App - Designed for the iPhone, compatible with the iPad Samplodica is an intuitive musical instrument that is played by whipping the iPhone in the air.   | Read more »
Empire of the Eclipse Review
Empire of the Eclipse Review By Carter Dotson on May 24th, 2012 Our Rating: :: OVERSHADOWINGiPhone App - Designed for the iPhone, compatible with the iPad Empire of the Eclipse is an ambitious strategy MMO that is very deep, and aimed at dedicated players.   | Read more »
Bejeweled HD Review
Bejeweled HD Review By Jennifer Allen on May 24th, 2012 Our Rating: :: ADDICTIVEiPad Only App - Designed for the iPad The iPad version of the ever addictive Match Three title.   Developer: PopCap Price: $3.99 Version Reviewed: 1.2 Device Reviewed On: iPad 2 | Read more »
Facebook Releases New Camera App To Stre...
While not a replacement for Instagram, Facebook Camera is a good first step in this month+ old union of the two companies. Released today, Facebook camera looks to streamline the viewing of photos and the uploading of them. The app allows you to apply simple filters to images, tag people, upload multiple images at once, and post a note about the... | Read more »
Missile Monkey Review
Missile Monkey Review By Lisa Caplan on May 24th, 2012 Our Rating: :: FLYING LOWUniversal App - Designed for iPhone and iPad Missile Monkey is a must miss   Developer: Munsey Clan Games Price: $0.99 Version Reviewed: 1.0 Device Reviewed On: iPad 2 | Read more »
Boomlings Review
Boomlings Review By Lisa Caplan on May 24th, 2012 Our Rating: :: FUN FREEBIEUniversal App - Designed for iPhone and iPad Boomlings is a traditional matching puzzle game, with some explosive twists   | Read more »
Dave vs Cave Review
Dave vs Cave Review By Jason Wadsworth on May 24th, 2012 Our Rating: :: WATCH FOR FALLING ROCKSUniversal App - Designed for iPhone and iPad Kid falls down hole, kid gets trapped in cave, kid fights evil rock monsters to escape.   Developer: Origame64 | Read more »
Python Pocket Power: Python Bytes 3 – Mo...
Python fans are certain to welcome the best bits from the penultimate season of the BBC sketch comedy in a new iPhone app: Python Bytes 3 – Monty Python Series 3. If you have a flair for the obvious, you’ll correctly assume this is third in a series of apps that feature the best skits from the cult-classic, Monty Python’s Flying Circus. | Read more »
Slingshot Racing Review
Slingshot Racing Review By Carter Dotson on May 24th, 2012 Our Rating: :: SWING ME AROUNDUniversal App - Designed for iPhone and iPad Slingshot Racing is a racing game where players must race around the courses by grappling and swinging around the slippery courses.   | Read more »
All contents are Copyright 1984-2010 by Xplain Corporation. All rights reserved. Theme designed by Icreon.