From: oster@well.sf.ca.us (David Phillip Oster)
Subject: Re: How to write a balloons ?
Organization: Whole Earth 'Lectronic Link
Date: Fri, 1 Jan 1993 04:53:48 GMT

In article <1992Dec31.163417.7035@fcom.cc.utah.edu> Dmitry Boldyrev <dmitry@chemistry.chem.utah.edu> writes:
>Does anyone know how to write a balloons ?
In your .r file add the following:

#include "BalloonTypes.r"

then you give your dialogs a name, even though with the standard dialog
window style the name will not be drawn.

The following resource connects dialog 16128 to hdlg 16128

/* The 'hwin' resource connects the DLOG to the hdlg (by the window name)
 */
resource 'hwin' (16128, "", purgeable) {
	HelpMgrVersion,
	hmDefaultOptions,
	{
	16128, 'hdlg',
	18,
	"Your Dialog Name Here"
	}
};

hdlg 16128 looks like this:


/* The 'hdlg' resource connects dialog items to STR# items.
 */
resource 'hdlg' (16128, "", purgeable) {
	HelpMgrVersion,
	0,	/* start with first item */
	hmDefaultOptions,
	0,	/* balloon def id */
	0,	/* var code, hang right */
	HMSkipItem {},
	{	/* buttons */
		/* [1] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128, 1, 0,0, 0,0, 0,0 },
		/* [2] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128, 2, 0,0, 0,0, 0,0 },
		/* [3] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128, 3, 16131,1, 0,0, 0,0 },
		/* [4] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128, 4, 0,0, 0,0, 0,0 },
		/* [5] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128, 5, 0,0, 0,0, 0,0 },
		/* [6] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128, 6, 0,0, 0,0, 0,0 },
		/* [7] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128, 7, 16131,2, 0,0, 0,0 },
		/* [8] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128, 8, 16131,3, 0,0, 0,0 },
		/* [9] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128, 9, 16131,4, 0,0, 0,0 },
		/* checkbox */ 
		/* [10] */	HMSkipItem {},
		/* menus */
		/* [11] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,11, 16128,11, 16128,11, 16128,11 },
		/* [12] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,12, 16128,12, 16128,12, 16128,12 },
		/* [13] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,13, 16131, 7, 16128,13, 16128,13 },
		/* [14] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,14, 16131, 8, 16128,14, 16128,14 },
		/* [15] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,15, 16128,15, 16128,15, 16128,15 },
		/* [16] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,16, 16131, 9, 16128,16, 16128,16 },
		/* [17] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,17, 16128,17, 16128,17, 16128,17 },
		/* and scrollbar */
		/* [18] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,18, 16128,18, 16128,18, 16128,18 },
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		/* [28] */ HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		HMSkipItem {},
		/* [38] */ HMSkipItem {},
		/* light and dark PICTs */
		/* [39] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,19, 0,0, 0,0, 16128,19 },
		/* [40] */	HMStringResItem {{0,0}, {0,0,0,0}, 16128,20, 0,0, 0,0, 16128,20 },
		HMSkipItem {},
		HMSkipItem {},
		/* [43] */	HMStringResItem {{10, 185}, {0,0,0,0}, 16128,21, 0,0, 0,0, 16128,21 }
	}
};

As you can see, most items just reference the corresponding string in a STR#,
16128. Here is the string data: (Please excuse the spanish, the nonascii
characters, and the long lines. It is part of a shipping product.)

/* The help items referenced in the hdlg resource. Items in this STR# happen to (mostly) coincide
	with items in the original DITL.
 */
resource 'STR#' (16129) {{
/*{289}*/		/* [1] */	"Para escanear una imagen como ventana " PRODUCT ", pulse aqu",
/*{290}*/		/* [2] */	"Para dejar este plug-in sin rastreo, haga clic aqu.",
/*{291}*/		/* [3] */	"Para hacer una exploracin rpida que aparece en el cuadro de RpreviaS haga clic aqu. ",
/*{292}*/		/* [4] */	"Para guardar los ajustes en curso en un archivo de ajustes, haga clic aqu.",
/*{293}*/		/* [5] */	"Los globos de ayuda estn conectados. Para encender TayudaU, haga clic aqu. (Para desconectarla, utilice el men ayuda.)",
/*{294}*/		/* [6] */	"Para leer un archivo de ajustes existente, haga clic aqu.",
/*{295}*/		/* [7] */	"Haga clic aqu para cancelar cualquier acercamiento (zooming) de la imagen previsualizada.",
/*{296}*/		/* [8] */	"Pluse esto para acercar la imagen previsualizada. El zoom solo afecta a la imagen previsualizada no a la obtenida por " PRODUCT ".",
/*{297}*/		/* [9] */	"Pluse esto para alejar la imagen previsualizada. El zoom solo afecta a la imagen previsualizada no a la obtenida por " PRODUCT ".",
/*{298}*/		/* [10] */	"Haga clic aqu para seleccionar Alimentacin Automtica de Documento. Si este dispositivo est conectado, al pulsar el botn de Escanear, el escaner se alimentar desde la bandeja de documentos superior.",
/*{299}*/		/* [11] */	"Utilice este men que aparece para fijar el modo del escaner. (Color, Escala gris, Blanco y negro etc.)",
/*{300}*/		/* [12] */	"Utilice este men que aparece para fijar la resolucin del escaner en pixeles por pulgadas.",
/*{301}*/		/* [13] */	"Utilice este men que aparece para fijar el color por omitir. Exploraciones en blanco y negro normalmente suman todos los colores, utilice esto para ignorar un color, por ejemplo lpiz azul.",
/*{302}*/		/* [14] */	"Utilice este men que aparece para fijar la curva del color. Esto permite que el escaner se ajuste para el dispositivo de salida preferido.",
/*{303}*/		/* [15] */	"Utilice este men que aparece para fijar el gamma. Esto permite que el escaner se ajuste para el tipo de original que se est explorando. ",
/*{304}*/		/* [16] */	"Utilice este men que aparece para fijar la nitidez (agudizar). Esto permite que el escaner se ajuste para el tipo de original que se est explorando.",
/*{305}*/		/* [17] */	"Utilice este men que aparece para fijar las unidades que se utilizan para informar del tamao de la exploracin.",
/*{306}*/		/* [18] */	"Utilice esta barra desplazadora para fijar el brillo. Esto permite que el escaner se ajuste para el tipo de original que se est explorando.",
/*{307}*/		/* [19] */	"Haga clic aqu para fijar el brillo a mxima oscuridad.",
/*{308}*/		/* [20] */	"Haga clic aqu para fijar el brillo a mxima claridad.",
/*{309}*/		/* [21] */	"Cuando se pulsa el botn de TPreviaU, una exploracin concisa de baja resolucin aparece aqu, de tal manera que se puede usar el ratn para seleccionar la parte de la imagen que se explorar para " PRODUCT ".",
	/* [22] */  "Pluse esto para seleccionar la unidad de transparencias. Si ya esta seleccionada, cuando pulse el boton de Scan, el scanner ilumunar el original utilizando las lamparasa de la unidad de transparencias"
}};
Menus are analagous. A sample menu, with in-line strings this time:
(the menu just says:
pixels
inches
centimeters)
resource 'hmnu' (16134, purgeable){
	HelpMgrVersion, hmDefaultOptions, 0, 0,
	HMSkipItem { },	/* missing item? */
	{
		HMSkipItem { },	/* title */
		HMStringItem {
			"Shows the size of the selected scan area in pixels.",
			"",	/* can't be dimmed */
			"Shows the size of the selected scan area in pixels.",
			"Shows the size of the selected scan area in pixels."
		},
		HMStringItem {
			"Shows the size of the selected scan area in inches.",
			"",	/* can't be dimmed */
			"Shows the size of the selected scan area in inches.",
			"Shows the size of the selected scan area in inches."
		},
		HMStringItem {
			"Shows the size of the selected scan area in centimeters.",
			"",	/* can't be dimmed */
			"Shows the size of the selected scan area in centimeters.",
			"Shows the size of the selected scan area in centimeters."
		}
	}
};

I recommend using a STR# instead of a StirngItem to reduce the repetion factor.
Check the manual for the meanings of the successive items:
bright, dim, checked, marked  (I think, but check.)

That will get you started.