Brian Heibert wrote: > Is it possible to create a clickable static text or something > I want to create something that looks and acts like a link that will > do a LaunchURL Carbon does not provide a control with the desired behaviour, but a static text control can be persuaded to become clickable. AFAIK this method has not been demonstrated in FB until now. Below is a ready-to-run example. DoURLClick is called when the user clicks the URL. A defect is that the text does not highlight when pressed. This could probably be fixed by handling additional events (_kEventControlClick, _kEventControlDraw) so as to draw the text in a different colour. A challenge for CarbonEvent experts... Robert P. '--------------------- /* Clickable URL, using the method of Apple's QA1380. Adapted for FB by Robert P. March 2007 */ include "Tlbx HIView.incl" include "Tlbx CoreGraphics.incl" local fn DoURLClick( c as ControlRef ) '~'1 dim as OSStatus ignore dim as Str255 url dim as long @ actual // retrieve the url text from the control ignore = fn GetControlData( c, _kControlEditTextPart, _kControlEditTextTextTag, 255, @url[1], actual ) url[0] = actual // string length // the 'open' command is a handy way to open URLs as well as files open "unix", 222, "open " + url close 222 end fn local fn InstallClickableURLHandler( c as ControlRef ) '~'1 dim as EventTypeSpec myEvents(2) begin globals dim as proc sURLEventUPP // 'static' var end globals myEvents.eventClass(0) = _kEventClassControl myEvents.eventKind(0) = _kEventControlHitTest myEvents.eventClass(1) = _kEventClassControl myEvents.eventKind(1) = _kEventControlHit long if ( sURLEventUPP == 0 ) sURLEventUPP = fn NewEventHandlerUPP( [Proc "ClickableURLHandler" + _FBprocToProcPtrOffset] ) end if end fn = fn InstallEventHandler( fn GetControlEventTarget( c ), sURLEventUPP, 2, @myEvents(0), #0, #0 ) long if 0 "ClickableURLHandler" enterproc fn ClickableURLHandler( nextHandler as EventHandlerCallRef, theEvent as EventRef, userData as ptr ) = OSStatus '~'1 dim as OSStatus result dim as ControlRef @ c dim as HIRect bounds dim as HIPoint pt dim as ControlPartCode @ part result = _eventNotHandledErr call GetEventParameter( theEvent, _kEventParamDirectObject, _typeControlRef, #0, sizeof( c ), #0, @c ) select fn GetEventKind( theEvent ) case _kEventControlHitTest // static text control requires this handler in order to track the mouse call HIViewGetBounds( c, @bounds ) call GetEventParameter( theEvent, _kEventParamMouseLocation, _typeHIPoint, #0, sizeof( pt ), #0, @pt ) part = _kControlNoPart // if mouse over the control, send kControlButtonPart if ( fn CGRectContainsPoint( bounds, pt ) ) then part = _kControlButtonPart call SetEventParameter( theEvent, _kEventParamControlPart, _typeControlPartCode, sizeof( part ), @part ) result = _noErr // here we act on a completed click-and-release, like a button click case _kEventControlHit fn DoURLClick( c ) result = _noErr end select exitproc = result end if local fn MakeClickableURL( btnNum as long, url as Str255, r as ^Rect ) '~'1 dim as ControlFontStyleRec cfs dim as Rect rCopy rCopy = r // make the text control appearance button btnNum,,,,,, @rCopy, _kControlStaticTextProc def SetButtonTextString( btnNum, url ) // set the text blue, underlined cfs.flags = _kControlUseFaceMask _kControlUseForeColorMask cfs.style = _ulineBit% cfs.foreColor.red = 0 cfs.foreColor.green = 0 cfs.foreColor.blue = 0xffff def SetButtonFontStyle( btnNum, cfs ) // install Carbon event handler on the control fn InstallClickableURLHandler( button&( btnNum ) ) end fn dim as Rect r window 1, "Clickable URL" SetRect( r, 20, 15, 390, 35 ) fn MakeClickableURL( 1, "http://developer.apple.com/qa/qa2004/ qa1380.html", r ) do HandleEvents until 0 '---------------------