RbBFBlokProjPSIVStrn2005.01 ACnmStrnAChpStrnACsvStrnVer1Strn0 Ver2Strn0 Ver3Strn1 RelsStrnNnRlStrnRegnStrn0 SVerStrnLVerStrnIVerStrnDVewInt gÿprTpInt DLanInt CLanInt DEncInt BflgInt IconGrupEndGInt MacCStrnBMacStrnMy App (Classic)BCarStrnMy Application BCMOStrnMy Application BSizInt @BMSzInt BSzSStrn4096BMSSStrn2048MDIcStrnBWinStrnMy Application.exe BMDIInt BL86Strn MyApplication PadnPadnÐ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjl{?ÿNameStrnApp ContInt paswStrnbClsInt SuprStrn Application bNtrInt bApOInt CompStrnPDefGrup$nameStrnMenuBar PValInt AnßÿEndGInt CnstGrupœEncoInt nameStrnkFileQuitShortcut typeInt defnStrnflagInt CInsGrup0pltfInt langInt defnStrnCmd+Q EndGInt EndGInt CnstGrupàEncoInt nameStrn kFileQuit typeInt defnStrnQuitflagInt CInsGrup0pltfInt langInt defnStrnE&xit EndGInt CInsGrup0pltfInt langInt defnStrnE&xit EndGInt EndGInt CnstGrupäEncoInt nameStrn kEditClear typeInt defnStrnClear flagInt CInsGrup0 pltfInt langInt defnStrn&Delete EndGInt CInsGrup0 pltfInt langInt defnStrn&Delete EndGInt EndGInt PadnPadn€********************************************************************************************************************************BlokpVewgÿNameStrnWindow1 ContInt paswStrnbClsInt SuprStrnWindow bNtrInt CompStrnPropGrupˆ EncoInt declStrn mX As Integer flagInt sorcGrup8 EncoInt srclStrn mX As Integer srclStrnEndGInt EndGInt PropGrupˆ EncoInt declStrn mY As Integer flagInt sorcGrup8EncoInt srclStrn mY As Integer srclStrnEndGInt EndGInt PDefGrup0nameStrnMenuBar PValStrn 1097785343 EndGInt PDefGrup(nameStrn MacProcID PValInt EndGInt PDefGrup4nameStrn BalloonHelp EncoInt PValStrnEndGInt PDefGrup4nameStrnMaximizeButton PValStrnFalse EndGInt PDefGrup,nameStrn LiveResize PValStrnTrueEndGInt PDefGrup,nameStrn Resizeable PValStrnTrueEndGInt PDefGrup,nameStrn CloseButton PValStrnTrueEndGInt PDefGrup0nameStrnMenuBarVisible PValStrnTrueEndGInt PDefGrup0nameStrn FullScreen PValStrnFalse EndGInt PDefGrup(nameStrnVisible PValStrnTrueEndGInt PDefGrup8nameStrnTitle EncoInt PValStrnUntitledEndGInt PDefGrup$nameStrnBackdropPValStrnEndGInt PDefGrup(nameStrn BackColor PValInt ÿÿÿEndGInt PDefGrup0nameStrn HasBackColorPValStrnFalse EndGInt PDefGrup0nameStrn Composite PValStrnFalse EndGInt PDefGrup$nameStrnFrame PValInt EndGInt PDefGrup(nameStrn MaxHeight PValInt }EndGInt PDefGrup$ nameStrnMaxWidthPValInt }EndGInt PDefGrup(!nameStrn MinHeight PValInt @EndGInt !PDefGrup$"nameStrnMinWidthPValInt @EndGInt "PDefGrup$#nameStrnHeight PValInt ,EndGInt #PDefGrup$$nameStrnWidth PValInt ,EndGInt $PDefGrup(%nameStrn Placement PValInt EndGInt %CBhvGrupP&SuprStrnDoubleBufferCanvas HInsGrupè'nameStrn MouseDrag CompStrnsorcGrup¨(EncoInt srclStrn)Sub MouseDrag(X As Integer, Y As Integer) srclStrnmX = x srclStrnmY = y srclStrnsrclStrn me.Redraw srclStrnEnd Sub EndGInt (EndGInt 'HInsGrup )nameStrn MouseDown CompStrnsorcGrupà*EncoInt srclStrn9Function MouseDown(X As Integer, Y As Integer) As Boolean srclStrnmX = x srclStrnmY = y srclStrnsrclStrn me.Redraw srclStrnsrclStrn return true srclStrn End FunctionEndGInt *EndGInt )HInsGrupÜ+nameStrnPaint CompStrnsorcGrup ,EncoInt srclStrnSub Paint(g as Graphics)srclStrn"g.ForeColor = HSV( rnd, rnd, rnd ) srclStrng.FillRect( mX, mY, 25, 25 )srclStrnEnd Sub EndGInt ,EndGInt +EndGInt &CtrlGrup`-cclsStrnDoubleBufferCanvas nameStrnDoubleBufferCanvas PDefGrup8.nameStrn InitialParent EncoInt PValStrnEndGInt .PDefGrup0/nameStrnEraseBackground PValStrnTrueEndGInt /PDefGrup(0nameStrn AcceptTabs PValStrnEndGInt 0PDefGrup(1nameStrn AcceptFocus PValStrnEndGInt 1PDefGrup$2nameStrnBackdropPValStrnEndGInt 2PDefGrup,3nameStrn UseFocusRingPValStrnTrueEndGInt 3PDefGrup(4nameStrnEnabled PValStrnTrueEndGInt 4PDefGrup05nameStrnAutoDeactivate PValStrnTrueEndGInt 5PDefGrup06nameStrnHelpTag EncoInt PValStrnEndGInt 6PDefGrup(7nameStrnVisible PValStrnTrueEndGInt 7PDefGrup,8nameStrn TabPanelIndex PValInt EndGInt 8PDefGrup,9nameStrn LockBottom PValStrnTrueEndGInt 9PDefGrup,:nameStrn LockRight PValStrnTrueEndGInt :PDefGrup(;nameStrnLockTop PValStrnTrueEndGInt ;PDefGrup(nameStrnWidth PValInt EndGInt >PDefGrup ?nameStrnTop PValInt EndGInt ?PDefGrup @nameStrnLeftPValInt EndGInt @PDefGrup8AnameStrn ControlOrderEncoInt PValStrn0 EndGInt APDefGrupDBnameStrnSuper EncoInt PValStrnDoubleBufferCanvas EndGInt BPDefGrup$CnameStrnIndex PValInt €EndGInt CPDefGrup4DnameStrnNameEncoInt PValStrnCanvas1 EndGInt DCBixInt EndGInt -PadnPadnL************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpMnuAnßÿ NameStrnMenuBar1ContInt paswStrnMItmGruppEspmuInt nameStrnFileMenutextStrn&File indxInt €scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupÐFspmuInt nameStrnFileQuittextStrn#App.kFileQuit indxInt €scutStrn#App.kFileQuitShortcut MiSKStrn#App.kFileQuitShortcut maEnInt EncoInt flagInt SuprStrn QuitMenuItemEndGInt FEndGInt EMItmGrup\GspmuInt nameStrnEditMenutextStrn&Edit indxInt €scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrup¬HspmuInt nameStrnEditUndotextStrn&Undo indxInt €scutStrnCmd+Z MiSKStrnZ MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt HMItmGrupŒIspmuInt nameStrn UntitledMenu1 textStrn- indxInt €scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt IMItmGrup¨JspmuInt nameStrnEditCut textStrnCu&tindxInt €scutStrnCmd+X MiSKStrnX MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt JMItmGrup¬KspmuInt nameStrnEditCopytextStrn&Copy indxInt €scutStrnCmd+C MiSKStrnC MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt KMItmGrup°LspmuInt nameStrn EditPaste textStrn&Paste indxInt €scutStrnCmd+V MiSKStrnV MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt LMItmGrup”MspmuInt nameStrn EditClear textStrn#App.kEditClear indxInt €scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MMItmGrupŒNspmuInt nameStrn UntitledMenu0 textStrn- indxInt €scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt NMItmGrup¸OspmuInt nameStrn EditSelectAll textStrn Select &All indxInt €scutStrnCmd+A MiSKStrnA MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt OEndGInt GPadnPadn¬****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj7¨?ÿ NameStrnDoubleBufferCanvas ContInt paswStrnbClsInt SuprStrnCanvas bNtrInt CompStrnHInsGrupôPnameStrnPaint CompStrnsorcGrup¸QEncoInt srclStrnSub Paint(g As Graphics)srclStrn5// We're going to implement the paint event ourselves srclStrn7// so that we can automatically do the double buffering srclStrnsrclStrnif mDoubleBuffer then srclStrn/// Check our back buffer to make sure we've got srclStrn// one that we can draw to srclStrnCheckBackBuffer srclStrnsrclStrn"// Erase the back buffer ourselves srclStrn*mBackBuffer.Graphics.ForeColor = FillColor srclStrn:mBackBuffer.Graphics.FillRect( 0, 0, me.Width, me.Height ) srclStrnsrclStrn-// Set the background color to be black, like srclStrn// a normal canvas would be srclStrn)mBackBuffer.Graphics.ForeColor = &c000000 srclStrnsrclStrn/// Now call the user's paint event, but pass in srclStrn// our back buffer srclStrnPaint( mBackBuffer.Graphics ) srclStrnsrclStrn0// Now we can draw the back buffer to the screensrclStrn7g.DrawPicture( mBackBuffer, 0, 0, me.Width, me.Height ) srclStrnelsesrclStrn8// We're not double buffering, so just pass the GraphicssrclStrn'// object on to the user's Paint event. srclStrn Paint( g ) srclStrnend if srclStrnEnd Sub EndGInt QEndGInt PHInsGrupRnameStrnOpenCompStrnsorcGrupäSEncoInt srclStrn Sub Open() srclStrn4// Check to see whether the user is on a system thatsrclStrn// requires double bufferingsrclStrn#if TargetWin32 srclStrn.// On Windows, we always want to double buffer srclStrnmDoubleBuffer = truesrclStrn#elseif TargetMacOS srclStrn.// We only want to double buffer on the Mac if srclStrn-// we're running on OS 9. OS X automatically srclStrn// double buffers for ussrclStrndim vers as Integer srclStrn&if System.Gestalt( "sysv", vers ) then srclStrnmDoubleBuffer = vers < &h1000 srclStrnend if srclStrn#endif srclStrnsrclStrnif mDoubleBuffer then srclStrn7// We don't want the background to be erased every time srclStrn9// since we're doing our own buffering. This would cause srclStrn// a lot of flickering. srclStrnme.EraseBackground = false srclStrnend if srclStrnsrclStrn// Call the user's Open event srclStrnOpensrclStrnEnd Sub EndGInt SEndGInt RMethGrup(TnameStrnCheckBackBuffer CompStrnsorcGrup¨UEncoInt srclStrnSub CheckBackBuffer() srclStrn:// We want to make sure our back buffer is the proper size srclStrn// and ready for drawing to srclStrnsrclStrndim create as Boolean srclStrnsrclStrn=// If we don't have a back buffer, then we need to create one srclStrn)// If our size has gotten larger than our srclStrn0// back buffer, then we need to create a new onesrclStrniif mBackBuffer = nil or me.Width > mBackBuffer.Width or me.Height > mBackBuffer.Height then create = true srclStrnsrclStrnif create then srclStrn4mBackBuffer = new Picture( me.Width, me.Height, 32 )srclStrnend if srclStrnEnd Sub EndGInt UEncoInt AlasStrnflagInt !parmStrnrsltStrnEndGInt TMethGrupðVnameStrnGraphicsCompStrnsorcGruppWEncoInt srclStrnFunction Graphics() As Graphics srclStrn-// We're going to be mean and tell users that srclStrn4// there *is* no Graphics object. This forces userssrclStrn:// to use the class correctly. However, it's also a total srclStrn6// hack since we're shadowing a property of the Canvas srclStrn4// class. This causes a problem since we can't callsrclStrn0// super.PropertyName to return the Canvas' truesrclStrn:// Graphics handle in the case we're not double buffering. srclStrnif mDoubleBuffer then srclStrn return nil srclStrnend if srclStrn End FunctionEndGInt WEncoInt AlasStrnflagInt parmStrnrsltStrnGraphicsEndGInt VMethGrupÜXnameStrnRedraw CompStrnsorcGrupdYEncoInt srclStrn Sub Redraw()srclStrn?// We force the user to call Redraw instead of Refresh because srclStrn=// we don't want the user to be able to accidentally cause an srclStrn—ÿNameStrnimage001ContInt paswStrnpathStrn