| Command Bars + FoxPro9
 
 Printed From: Codejock Forums
 Category:  Codejock Products
 Forum Name:  Command Bars
 Forum Description:  Topics Related to Codejock Command Bars
 URL: http://forum.codejock.com/forum_posts.asp?TID=14336
 Printed Date: 31 October 2025 at 9:18am
 Software Version: Web Wiz Forums 12.04 - http://www.webwizforums.com
 
 
 Topic: Command Bars + FoxPro9
 Posted By: gabrielfast
 Subject: Command Bars + FoxPro9
 Date Posted: 19 May 2009 at 10:18am
 
 
        
          | Hello, 
 The CommandBars works in FoxPro9 ?
 How do I leave the menu with FoxPro Ribbon?
 
 Thanks
 |  
 
 Replies:
 Posted By: wlcabral
 Date Posted: 26 May 2009 at 9:45pm
 
 
        
          | Yes, works fine !     (CommandBars, ReportControl, CalendarControl and many others)   Just add the OLE object (xtremeCommandbar)  in your form and start to change the properties (there are many)  :   "thisform.olecontrol1.OBJECT.AnyProperty = AnyValidValue".        There are no help for VFP, so you'll need to spend a lot of time to learn all possibilities...           
 -------------
 wlcabral
 |  
 Posted By: DDTech
 Date Posted: 30 May 2009 at 7:22am
 
 
        
          | Commandbars work perfectly well with VFP9. I am actually thinking about writing tutorials on that topic, but had no time yet.
 
 If You need any help, just contact me or probably better lets communicate via this forum so others can participate.
 
 One thing You should NOT do is to drop the control on Your form and work with this. It works perfectly well, but CodeJock's controls get new component-IDs with every release. Therefore, if You use the ActiveX-Control directly You will stick to the version You once built Your form with. This has pros and cons as most things in life.
 
 So, what You should do is inherit the control once You get a new version and work with that. Also You should add the CommandBars via code as VFP includes the OLE-Code in the form which hampers changes made to the class from getting down to the form - this is so for all ActiveX-Controls.
 
 Create a new Classlib and add one single class to it, the CommandBar-Class, giving it a name that counts for all versions. Mine is called "aCJToolbar" (abstract class CodeJock Toolbar). Don't change anything, simply save it.
 
 all Your applcation specific toolbars (commandbars) now will inherit from this aCJToolbar. So whenever CodeJock comes out with a new version, throw the old Classlib with aCJToolbar away, create a new one with the new Component and You're done.
 
 
 You can now either use aCJToolbar directly or inherit from that.
 
 I prefer to subclass it in code and add application specific code to it. For that purpose I have a "base" class I build all my application-specific code-Jock-classes on.
 
 There is ResizeClient(), an event that is highly useful for us VFP-guys, as it allows resizing our controls according to the position and react to docking and undocking. Only CodeJocks commandbars allow us to do this. I have been working with other toolbars and most of them are designed for VB and simply cover the whole form if You don't do magic and tricks. (ActiveBar worked until they changed to version 2. I made it work with Version 2 too but it has been a pain in the a... ).. .anyway this ResizeClient() fires whenever You even think of touching the toolbar. As you don't want unneccessary re-arranging of Your controls, You might like something like this:
 
 
 
 DEFINE CLASS cCJToolbar as aCJToolbar of CJToolbar.vcx
 _ClientArea = .NULL.
 
 PROCEDURE ResizeClient(tnLeft as Integer, tnTop as Integer, tnRight as Integer, tnBottom as Integer)
 *================================================================*
 *  ResizeClient wird bei jeder Bewegung der Toolbars ausgeführt  *
 *  auch, wenn die Größe der ClientArea sich nicht ändert.        *
 *  Daher hier intern die Area festhalten und mit der neuen       *
 *  Änderung vergleichen.                                         *
 *  Ändert sich etwas am Layout, dann DoResizeClient aufrufen     *
 *================================================================*
 
 DEBUGOUT "ResizeClient", tnLeft, tnTop, tnRight, tnBottom
 
 if ! isNULL(this._oClientArea) ;
 and tnLeft    = this._oClientArea.Left;
 and tnTop     = this._oClientArea.Top;
 and tnRight     = this._oClientArea.Right;
 and tnBottom     = this._oClientArea.Bottom
 *-- nothing
 else
 if isNull(this._oClientArea)
 this._oClientArea = create("EMPTY")
 addProperty(this._oClientArea, "Left", tnLeft)
 addProperty(this._oClientArea, "Top", tnTop)
 addProperty(this._oClientArea, "Right", tnRight)
 addProperty(this._oClientArea, "Bottom", tnBottom)
 
 else
 this._oClientArea.Left    = tnLeft
 this._oClientArea.Top    = tnTop
 this._oClientArea.Right    = tnRight
 this._oClientArea.Bottom= tnBottom
 
 endif
 this.DoResizeClient(tnLeft, tnTop, tnRight, tnBottom)
 endif
 
 ENDPROC
 
 PROCEDURE DoResizeClient(tnLeft as Integer, tnTop as Integer, tnRight as Integer, tnBottom as Integer)
 *-- Hook
 ENDPROC
 
 ENDDEFINE
 
 
 Add a transparent Container to Your form and put all of Your Controls into that Container (mine is called "ClientArea"). Anchor all Your controls to that Container and You're allmost done.
 
 
 in the form's INIT You instantiate the Toolbar and load the configuration (create your toolbar with the designer and save the XCB file
 
 PROCEDURE INIT
 
 ...
 
 _vfp.AutoYield = .F.  && this is important
 
 if ! pemStatus(this,"TB",5)
 this.NewObject("TB", "cCJToolbar", "CJToolbar_Schedule.FXP")
 endif
 
 this.TB_oClientArea = .NULL.
 
 *-- load configuration and design into the Commandbars
 this.TB.LoadDesignerBars("TEMP\PP_SCHEDULE01.XCB")
 
 *-- bind to resizing and dock/undock events.
 bindEvent(this.TB, "DoResizeClient", this, "ONResizeClient", 1)
 
 ....
 
 ENDPROC
 
 PROCEDURE ONResizeClient
 lparameters    tnLeft, tnTop, tnRight, tnBottom
 
 DEBUGOUT "OnResizeClient",tnLeft, tnTop, tnRight, tnBottom
 
 this.ClientArea.Move( tnLeft, tnTop, tnRight-tnLeft, tnBottom-tnTop)
 
 ENDPROC
 
 
 
 
 Hope that helps as a startup.
 
 
 regards
 
 Frank
 
 
 
 
 
 
 
 
 |  
 
 |