Wed, 06 Apr 2005
Progress bar

from palm-dev e-mail list, credit goes to Logan Shaw

typedef struct
{
    RectangleType bounds;
    WinHandle savedbits;
} ProgBar;

void OpenProgressBar (ProgBar *progbar)
{
    UInt16 savebitserror;

    progbar->savedbits = WinSaveBits (& progbar->bounds, & savebitserror);
    WinEraseRectangle (& progbar->bounds, 0);
}

void CloseProgressBar (ProgBar *progbar)
{
    if (progbar->savedbits)
    {
        WinRestoreBits (
	        progbar->bounds.topLeft.x, progbar->bounds.topLeft.y,
	        progbar->savedbits);
    }
    else
    {
	/* maybe should enqueue a frmUpdateEvent instead, maybe not */
        WinEraseRectangle (& progbar->bounds, 0);
    }
}

void UpdateProgressBar (ProgBar *progbar, Int32 numerator, Int32 denominator)
{
    RectangleType fillrect;

    RctCopyRectangle (& progbar->bounds, & fillrect);
    fillrect.extent.x = progbar->bounds.extent.x * numerator / denominator;

    WinDrawRectangle (& fillrect, 0);
}

void TestProgressBar ()
{
    Int32 i;
    const Int32 max = 25;
    ProgBar progbar;

    progbar.bounds.topLeft.x = 20;
    progbar.bounds.topLeft.y = 70;
    progbar.extent.x = 120;
    progbar.extent.y = 20;

    OpenProgressBar (& progbar);
    for (i = 0; i <= max; i++)
    {
        UpdateProgressBar (& progbar, i, max);
        SysTaskDelay (SysTicksPerSecond() / 5);
    }
    CloseProgressBar (& progbar);
}


(posted at 01:43 | filed under programming/palmbits | link)    (comments | add new)
Mon, 28 Mar 2005
Preferences

Preferences structure definition

typedef struct {
	int skeletonData;
} Prefs;

Prefs prefs;

Open preferences

void startApp() {
	Int16 prefSize = sizeof(Prefs);
	if ((PrefGetAppPreferences (AppCreator, 
			 		1000, // pref database id
			 		&prefs, 
			 		&prefSize, 
		 	 		true) // saved during Hotsync
		== noPreferenceFound) 
		|| (prefSize != sizeof(Prefs))) {
					// default initialization, since discovered 
					// Prefs was missing or old.
		prefs.skeletonData=1;
	}
}

Write preferences

void stopApp() {
	PrefSetAppPreferences (AppCreator, 
				1000,	// pref database id
				1, 	// version of pref database
				&prefs, 
				sizeof(Prefs), 
				true);	// saved during hotsync
}

(posted at 20:50 | filed under programming/palmbits | link)    (comments | add new)
Using libraries

Load and initializing the library

#include 
int MathLibRef = -1;
...
// is library already loaded?
err = SysLibFind("MathLib", &MathLibRef);
if (err != 0) {
	// negative, load
	err = SysLibLoad('libr', 'MthL', &MathLibRef);
	if (err == 0) {
		err = MathLibOpen (MathLibRef, 1);
	}
}

Closing library

if (MathLibRef != -1) {
	Err err;
	UInt16 usecount;
	err = MathLibClose (MathLibRef, &usecount);
	if (usecount == 0) {
		SysLibRemove (MathLibRef);
	}
}

(posted at 20:40 | filed under programming/palmbits | link)    (comments | add new)
Sat, 11 Sep 2004
Click on the field opens built-in keypad
I'm using it for easy data writing.
static Boolean frmMain_myField_OnfldEnter(EventPtr event)
{
    SysKeyboardDialog(kbdAlpha);
    return true;
}

(posted at 11:06 | filed under programming/palmbits | link)    (comments | add new)
Tue, 07 Sep 2004
Direct video memory access
UInt32       *ptrScreen = BmpGetBits(WinGetBitmap(WinGetDisplayWindow()));
// 8bits/color, 320x320 display.. fill entire display with black
UInt32       count = 320*320

while(count--) { ptrScreen[count] = 0; }

* since OS3.5

is neccessary to evalute number of colors used and desired resolution. Buffer is by rows from upper. 16bit (65535) means 2bytes per pixel, 256 means 1byte etc...

for PalmOS<3.5 use the following:

WindowType  *winP;
winP = WinGetWindowHandle( win );
ptr = winP->displayAddrV20;

(posted at 09:21 | filed under programming/palmbits | link)    (comments | add new)
Fri, 06 Aug 2004
Displaying an alert window

resource - .h file:

#define CustomAlert 1000

resource - .rcp file:

ALERT ID CustomAlert
BEGIN
  TITLE "custom alert"
  MESSAGE "^1\n^2\n^3"
  BUTTONS "OK"
END

code:

    Char alertMsg[64];
    StrPrintF(alertMsg, "Your value is %d", yourValue);
    FrmCustomAlert(CustomAlert, alertMsg, "", "");

do NOT pass NULL value as param in FrmCustomAlert - always use "".


(posted at 12:10 | filed under programming/palmbits | link)    (comments | add new)
Wed, 04 Aug 2004
Changing graphics mode
Boolean SetScreenColorDepth(int depth)
{
    UInt16 reqDepth=depth;
    Err err = WinScreenMode(winScreenModeSet,NULL,NULL,&reqDepth,NULL);
    return !err;
}

Boolean RestoreScreenColorDepth(void)
{
    Err err = WinScreenMode(winScreenModeSetToDefaults,NULL,NULL,NULL,NULL);
    return !err;
}

You must set color depth before any window is created. Check error codes for unsupported modes.


(posted at 15:35 | filed under programming/palmbits | link)    (comments | add new)