Where in this code should you read what item was clicked...and how (code) ?? J Smith > From: Alain Pastor <apastor@...> > Organization: Pix & Mix > Reply-To: futurebasic@... > Date: Fri, 25 Jul 2003 21:40:04 +0200 > To: futurebasic@... > Subject: Re: [FB] List boxes > > > > Bernie Wylde wrote: >> Dear All, >> >> It appears we can create list boxes in a number of different ways. What >> appears to be the simplest and most straightforward method (to me) is >> described on page 44 of the manual where it recommends creating an >> 'ldes' resource with Resorcerer 2.4 or a template in any resource >> editor. As I'm not about to fork out $256.00 for Resorcerer, can anyone >> get me started on creating a template in say ResEdit? >> >> Alternatively, there's a demo file on the CD, 'simple list in Carbon' >> which eliminates the need for a resource editor. The problem I have with >> this method is that a click on the list box doesn't generate a button >> click event. So, do we instead have to detect mouse clicks and calculate >> the selected cell from mouse position? >> >> Hope I've made this clear. Any help appreciated. >> > > Bernie, > > maybe that one can help: > > > > '~'A > ' Runtime : Rntm Appearance.Incl > ' CPU : Carbon > ' CALL Req'd : Off > '~'B > > /* > With the Appearance Manager came a bazillion of new controls > and among them we can find a control that display lists which > can be easily built with the APPEARANCE BUTTON statement and > the _kControlListBoxProc attribute. > The caveat with that puppy is that no matter what you do > to install a list after this, nothing happens unless you > provide also a valid ldes resource to the procedure that > creates the control in the first place. > To solve the problem, therefore you need to add a ldes > resource to your application resource file. > Or you can use the trick below that allows you to build > listbox controls on the fly. > The program creates a simple temporary ldes resource to trick > the Control Manager then the list can be inserted without > problem. The temporary ldes resource is deleted after > the installation of the list. > by Alain Pastor > with modifications by Robert P. 26 September 2001 > */ > > > #if ndef _appearanceRuntime > compile shutdown "Must be compiled as an Appearance project" > #endif > > > _listBtn = 10 > > begin record ldesRec > dim version as short > dim rows as short > dim column as short > dim cellHeight as short > dim cellWidth as short > dim hasVertScroll as boolean > dim reserved1 as byte > dim hasHorzScroll as boolean > dim reserved2 as byte > dim resID as short > dim hasSizeBox as boolean > dim reserved3 as byte > end record > > clear local mode > local fn GetldesResID( listRectPtr as .rect ) > dim resH as ..ldesRec > dim resID as short > > SetResLoad( _false ) > resH = fn GetResource( _"ldes", 128 ) > long if resH > resID = 128 'ID reserved for resource based list control > xelse > resH = fn NewHandleClear( sizeof( ldesRec ) ) > long if resH > resH..column = 1 > resH..hasVertScroll = 1 > resH..cellWidth = (listRectPtr.right - listRectPtr.left) > resH..cellHeight = 1.4 * usr FontHeight > do > resID = fn Unique1ID(_"ldes") > until resID > 128 > AddResource( resH, _"ldes", resID, "" ) > long if fn ResError == _noErr > ReleaseResource( resH ) > xelse > resID = 0 > DisposeHandle( resH ) > end if > end if > end if > SetResLoad( _true ) > end fn = resID > > > clear local mode > local fn RemoveldesRes( listResID as short ) > dim resH as handle > > resH = fn GetResource( _"ldes", listResID ) > long if resH > RmveResource( resH ) > long if fn ResError = _noErr > DisposeHandle( resH ) > end if > end if > end fn > > > local mode > local fn PutListInButton( list(_maxInt) as str255, btnID as long ) > dim as short i, nbItems > dim as point theCell > dim as handle @ listH > dim as long @ actualSize > > nbItems = val&( list(0) ) '1st str in array = number of items > if nbItems == _nil then exit fn > > def GetButtonData( btnID, _kControlListBoxPart, ¬ > _kControlListBoxListHandleTag, sizeof(listH), listH, actualSize ) > > long if listH > LSetDrawingMode( _zTrue, listH ) > LDelRow( 0, 1, listH ) > theCell.h% = 0 > for i = 1 to nbItems > theCell.v% = fn LAddRow( 1, i, listH ) > LSetCell( @list(i)+1, |@list(i)|, theCell, listH ) > next > > end if > > end fn > > > clear local fn BuildWnd > dim listResID as short > dim r as rect > dim stringArray(20) as str255 > > SetRect( r, 0, 0, 250, 130 ) > window -1, "List Box", @r, _docNoGrow > def SetWindowBackground(_kThemeActiveDialogBackgroundBrush, _zTrue ) > InsetRect(r, 8, 8 ) > listResID = fn GetldesResID( r ) > appearance button _listBtn, _activeBtn,listResID,0,0, ¬ > "", @r,_kControlListBoxProc > if listResID > 128 then fn RemoveldesRes( listResID ) > > stringArray(0) = "9"//number of items > stringArray(1) = "One" > stringArray(2) = "Two" > stringArray(3) = "Three" > stringArray(4) = "Four" > stringArray(5) = "Five" > stringArray(6) = "Six" > stringArray(7) = "Seven" > stringArray(8) = "Height" > stringArray(9) = "Nine" > > fn PutListInButton( stringArray(0), _listBtn ) > window 1 > > end fn > > > local fn DoDialog > dim as long evnt, id > evnt = dialog( 0 ) > id = dialog( evnt ) > > select evnt > case _wndClose > end > case _btnClick : beep > end select > end fn > > on dialog fn DoDialog > menu 1, 0, 1, "File" > menu 1, 1, 1, "Quit/Q" > edit menu 2 > fn BuildWnd > do > handleevents > until _nil > end > > > > -- > To unsubscribe, send ANY message to <futurebasic-unsubscribe@...> >