Wiki Home

VFP Version 10 Wish List


Namespace: VFP

See also: VFP Getting Your Wishes

Note::: The focus of the next version of VFP, Sedna, is to leverage new Microsoft technologies, such as Vista (Longhorn), Whidbey (VS 2005), SQL 2005, and other new tools. The VFP 9 root binaries will not be changed unless absolutely necessary. If you think along those lines, you can suggest some really cool stuff that might actually get done! -- John Koziol

IDE (Integrated Development Environment)


Project Manager


Visual Editor

Search / Replace

Document View Window

When clicking a procedure name of a .prg in the Document View Window (DV)?:


Code References Tool

  • Add ability to automatically check out files when doing search & replace.
  • Option to find all children/instances of a class dropped on a container (same functionality as fndchlds.app which is a public domain class browser add-in). Want to find all instances of iAddOnlyTextBox, but not based on the object name: implicit ADD OBJECT txtMyField AS iAddOnlyTextBox

    Intellisense

    • When typing characters, display a dynamic list of matching Abbrev in FoxCode. (Thierry Nivelet [2005.07.18])
    • Preserve case of PEMs read in prg classes (no Upper()). (Thierry Nivelet [2005.07.18 06:31:11 AM EST] )
    • VFP names can be up to 128 characters. FoxCode expanded field is C(26). Please change to C(128) (Thierry Nivelet [2005.07.18]).
    • Make sure all available classes and collections pop-up in intellisense; e.g. project, files, file, etc. and classes in set('Procedure') and set('ClassLib') in the format "MyClass OF (justfname(classLibrary))".
    • Let the intellisense loads every reference from the code being edited, including references of those references. Even further, if you define -in a form's LOAD code- an object from a .PRG class definition, the intellisense -in its actual stage- cannot resolve the object's props/methods in other code snippets of the same form, say, in the INIT code you cannot get assisted with objects created in the LOAD one.
    • Typing "this." in .prg should trigger intellisense. (Thierry Nivelet [2005.09.02])

    Programming


    Language Enhancements

    • Add a TimeOut [nSeconds] clause to DISPLAY ... commands
    • File commands and functions: state clearly if work or not with files included in a .app / .exe (some do, others don't). Even better, make them all work with included files. (Thierry Nivelet [2005.12.05] ) - that's not good, working with excluded files is very useful at times (?edyshor [2006.06.27])
    • Recognize the following syntax when builing type library [Thierry Nivelet [2005.11.08] ]
      FUNCTION cTextLoc(;  && Localise un texte (appelée à l'exécution par la page ASP)
        tnTextID as Number; && Identifiant du texte
        ) AS Character
      


    • VAL(cExpression, nDecimalPlaces) and remove reliance on SET DECIMALS
    • CREATE FORMSET is colored in command window and is executed without error. Would be nice to get a formset not only a form :-(
    • Give us the missing .MemberClass and .MemberClassLibrary properties for formsets

    • Allow SET ASSERTS TO fileName to direct ASSERTS to a file at run time in a .exe instead of ignoring them.
    • Allow aCopy() on Combo Box and List Box List property.
    • Allow nesting in TEXT ... ENDTEXT.
    • Add an Obfuscator when creating .EXE's .APP's and .DLL's to protect the developers code, or make it hard to see/understand it when using Decompilators.
    • Control over dynamic code execution A VFP setting (SET, SYS(), _system variable, or FOX API) to temporarily disable eval(), execscript(), and/or o expansion and/or to limit the code path to files internally bound within an APP or EXE file (an enhanced version of sys(2450)?). This feature would be used to prevent malicious code injection.
    • Extend 8192 statement limit This becomes an issue when you create a view on a table that has a large number of fields (near the 255 limit perhaps and/or using semi-long field names) and you create a local view on that table. When a TABLEUPDATE() is issued, you can get a "SQL Statement Too Long" error because the internally generated UPDATE statement exceeds the 8192 limit due to how the WHERE clause is set up.
      In practice, the "unlimited" joins in VFP 9 have the same limitation as VFP 8 because of the statement limit.

    • Variable Declaration -- Add an "option explicit" type feature so that the VFP compiler can be more strongly typed if desired. (See Data Typing In VFP) This would result in "safer" code. (Wouldn't this also require a new VARIANT data type? - Colin Nicholls)
    • Native Support for Regular Expressions
    • Support CallBack addresses that can be hooked into VFP procedure/function/methods.
    • -- using more than one main thread in a Visual FoxPro Application. This can help developers to create applications that executes in more that one process. [This is definitely something Sedna could/should do. -- Stuart Dunkeld]
      *-- Creating a new Thread from the "Thread" Class
      myThread = NewObject("Thread")
      
      *-- Assigning a Priotity
      myThread.Priority = «ThreadPriotityOption»
      
      *-- Starting the Thread
      myThread.Begin(«Procedure»,«Program»)
      
      *-- Waiting to complete the
      DO WHILE !myThread.IsComplete
          *-- Wait that complete the Thread
          *-- (Visual FoxPro runs normally)
          myThread.Sleep(«TimeToWait»)
      ENDDO
      
      *-- Endding the Thread
      myThread.End()
      
      
      *-- Managing the Visual FoxPro process:
      Application.Thread.Priotity = -1 && less
      


      Thread Priotity Option
      The priorities values can be:
      2 Highest
      1 Above Normal
      0 Normal && Default
      -1 Below Normal
      -2 Lowest

      Procedure
      The procedure or Function that needs be executed by the Thread. For Example:

      *--
      
      DO BeginThread
      
      *--
      
      PROCEDURE BeginThread()
      
      *-- Creates a new Thread and Start the
      *-- procedure GetSalesFromEcuador.
      thDlanorOk = NewObject("Thread")
      
      thDlanorOk.Begin("GetSalesFromEcuador")
      
      DO WHILE !thDlanorOk.IsComplete
          thDlanorOk.Sleep()
      ENDDO
      
      thDlanorOk.End() &&Ends the new Thread
      ENDPROC
      
      PROCEDURE GetSalesFromEcuador()
          *-- Gets the Sales from Database on Ecuador
          *-- using for Example, a FoxPro Web Service.
      ENDPROC && On Complete the procedure property IsComplete, change to .T.
      


      Program
      The program where is located the Procedure or function to be executed.

      Time To Wait
      Determines the time in that Visual FoxPro stop the execution for the Main Thread waiting the custom Thread. If the value for TimeToWait is not included, the programs use the default value: 0.

      ( Ronald Ramirez Moran [2005.09.15] )

    • Support for Interfaces -- I'm talking about DEFINE INTERFACE ... ENDDEFINE and IMPLEMENTS. The real stuff, not the COM kludges...
    • New base classes for menu, menu pad, menu bar, and menu popup with PEMS which wrap current menu functionality - jp
    • SERIALIZE/DESERIALIZE For transporting/persisting objects/classes/structures
    • The ability to return a cursor from a procedure. This would allow a view to be created from a procedure that, for example, has a series of CASE statements in it to determine what SELECT statement to run. You can do this with remote data (CREATE SQL VIEW myView CONNECTION myConnection AS EXEC myStoredProc), but you can't with local data.

      This indeed is a serious missing currently In VFP. How do I get a cursor from one data session to another quick and easy? With arrays you'll have to set up the structe at two sides. CURSORTOXML and XMLTOCURSOR is way and way to slow with large data. Please give us a way of just pass cursors around real easy. BTW, I don't care if this is going to be a VFP only solution. - Walter Meester

      Even if there was a simple COPY CURSOR TO it would allow nicely encapsulated data session objects to return data in cursor form, rather than relying on converting the data to another format to pass it across a data boundary and then converting it back. We've written our own version of this using temporary tables rather than passing XML between sessions. Even going to disk, it is usually more than twice as fast and in all my tests it has always been faster by some amount. - Rob Spencer

    • Better API Support
      • Native support for C headers for creating structures
      • Object handle properties on everything without having to use api

    • Bells aka ??CHR(7) An easier way to program music apps
      Set bells on
      Set Bell1 sound to WMA
      Set Bell2 sound to WMA (Or WAV or MP3)
      
      ?? Chr(7,Bell1)
      ?? Chr(7,Bell2)


      I write media(radio) apps and this small improvement would allow me to play one tune and as tune1 is ending, tune2 could be overlaid onto tune1 to create a crossfade.

      Once it's playing music, it would be nice to push the sound out the port of the developer's choice.

    • Ftype() to compliment Fcount(), Field() Afield(). Ftype() would return numeric,character,memo etcetera, perhaps as a reference number. Perhaps enhance FIELD() instead: FIELD( idx, alias, flag=2 ) - wgcs
    • Native Web methods for HTTP_GET/POST, Request and Response Objects, sending/receiving email and FTP
    • User Defined Events! Isn't it about time developers can define events??? (Example? -- John Koziol)
      Are you serious? Whats ambigious about that request? Fire up VB 6 - Theres a great example of user defined event definition. At any rate, how about this... KevinMarois
      I'm not sure if I'm right. Is the OLEPUBLIC-thing the Key? MyEvent is a callback? If not I don't understand the difference between a call with this.myEvent and RAISE EVENT.

      DEFINE CLASS MyClass AS Session OLEPUBLIC
      
        PUBLIC PROCEDURE MyProc
      
          LOCAL nCancel AS Integer
          nCancel = 0
      
          RAISE EVENT MyEvent(@nCancel)
      
          IF nCancel # 0
           ** Cancelled
          ENDIF
      
        ENDPROC
      
        PUBLIC EVENT MyEvent(nCancel)
        ENDPROC
      
      ENDDEFINE
      

      Do you mean the ability to define OLE events? -- Peter Crabtree

    • STRCONVERT Support for urlencoding/decoding + MIME encoding/decoding
    • Complete Dockable Form Support Add properties to provide additional control over docking. A bitwise that would turn off specific docking behaviors would be best. We should be able to control where a form (or toolbar) can be docked, if forms can be docked within a form and if a form can be undocked. The height and width properties for a form should also not be readonly after a form has been docked.

      At the very least, give us a way to prevent users from un-docking a form, for example, by letting us hide the title bar while the form is docked, or disabling the title bar's right-click menu. But I wouldn't necessarily want to prevent users from changing the height or width. -- Mike Lewis

    • Page Frame enhancements A selection of tab shapes for pageframes. Also, horizontal text for those tabs when they are on the left or right side.
    • Page enhancements Have the ability to add a picture to the page tab along with the caption.
    • Native Zip methods
    • Scan comand with "Alias":
      scan all in mytable
           ? mytable.test
      endscan
      

    • ADDOBJECT enhancement - Add a parameter to the ADDOBJECT Method or add a new method so that we can add objects specifying the classlib - like NEWOBJECT().
    • Better GOMONTH() Add an optional third parameter to specify which day of the month you want the result to reflect. If day 31 is specified, then the result is the last day of the month.
      Also GOMONTH irrespects argument data type, no matter if argument is DATE or DATETIME always returns a DATE data type, so if you use GOMONTH with a datetime field additional stuff is needed to add back the timepart.
    • Static class method -- easier to re-use/convert design done in other oo language -- David Fung
    • Expression(eExpression): The inverse of Evaluate(), it should take an expression of any type, and return a string that would evaluate back to the value of the expression. That is, for any expression x, x = eval(expr(x)). The return value would have the proper punctuation to denote datatype (quotes for char, braces or Date Time() for date and time, .t./.f. for logical, nothing for numeric). The punctuation makes this different from transform(). It should not lose numbers (so ignore SET DECIMALS). - cfk
    • Enhanced AT() function: It would be usefull to have an extra 'nStartPos' parameter for the AT() function, like this: AT(cSearchExpression, cExpressionSearched [, nOccurrence [, nStartPos]]) It's main use is in string processing (parsing,etc), when in every loop you need to find a sub-string starting from the last encountered one. It's better than specifying a 'nOccurrence' because it simply starts on 'nStartPos' and there is no need to re-search the entire string, like when you use 'nOccurrence'.
      -- Fernando D Bozzo

    • Add curvature property to rectangular control(s), Text Box and the like. Nasib Kalsi
    • Add pictureval to control(s) where possible, as is in image control. Such that the program can create the graphics file in memory and assign it to the controls, without first writing to the hard disk. Nasib Kalsi

    VFP Engine Improvements

    • lookup(): add cAlias parameter < > The use of an Alias is supported in ReturnField and SearchedField of LookUp(), but this feature is not documented. -- Guus Endeveld
    • Export to newer version of Excel -- Update Export To command (as well as Save To command) to be able to export to a more recent version of Excel. Right now it only exports to Excel 5, and when open by a modern version of Excel, Excel will prompt to convert it to the newer format which sometimes confuses my clients. Although using Excel automation can do the job, but there are cases where using Excel Automation is an overkill or simply impossible, e.g. Excel is not installed. -- David Fung
    • Copy to myfile.xls sheet 5 - so you can export to an existing file by creating a new sheet.
    • COPY TO TYPE XLS MEMO - add the ability to output memo field content without having to use the much slower Excel automation method. -- df -- Thierry Nivelet shares this wish
    • APPEND FROM TYPE CSV MEMO - add the ability to read memo field content out of a CSV file (or any other file format) -- df
    • Increase Member Data size -- 8k is way too small. I don't even understand why the limit was necessary, because the description are stored in a memo file. You can go as much as you want. Member Data needs re-engineering totally - apart from the 8k limit it can't be used for development work intended for deployment in earlier VFP versions, as they have a 254 char property limit which breaks the code in a big way - ba
    • Also, please increase the size of the Abbrev field in the FOXCODE table from its current 24 characters (this would allow for longer property names in global Member Data)
    • Office XP/2003 style menu effects -- Enhance menu capabilities to enable construction of menu pads, popups and bars visually consistent with Office XP/2003 visual menu effects, i.e. gradiated image left border on popups, no borders on menu bar graphics, menu bar with border, gradiated system menu bar fading to right, etc. - mmg Allow this to be extended through the use of custom renderers and owner drawing.
    • Ability to set .Picture for entire toolbar background -- Ability to set .Picture for entire toolbar background (without a border) to achieve toolbars with gradiated backgrounds (consistent with look and feel of Office XP/2003 toolbar backgrounds). - mmg
    • XMLAdapter Enhancements ApplyToDiffGram() should be made to work for local and remote views without the need for an attachment to a Cursor Adapter. Performance needs to dramatically improve with respect to LoadXML() and ToCursor() on large XML result sets - if this is a result of an XML DOM Parser limitation, it needs to be overcome. A table in the table collection should be able to be referenced by it's alias (i.e. oXMLAD.Table("myTable")). jp
    • Enumerators
      Define Enum WindowState
          Normal    = 0
          Minimized = 1
          Maximized = 2
      EndDefine
      
      Thisform.WindowState = WindowState.Maximized
      


      You can replicate this functionality with an Empty class as of VFP 8 -- John Koziol
      For a cleaner language. I know I can. (What you are really asking for is STATIC class members. -- Colin Nicholls)
      Yes and No. I am asking for simplicity:
      #DEFINE WindowState_Normal    0  && old way / ugly
      #DEFINE WindowState_Minimized 1
      #DEFINE WindowState_Maximized 2
      or
      #DEFINE WindowState.Normal    0  && just a const with prefix/namespace / ugly too
      #DEFINE WindowState.Minimized 1
      #DEFINE WindowState.Maximized 2
      or
      Define Static Class WindowState  && Static class member / kinda ugly but necessary
          Static Const Normal    = 0
          Static Const Minimized = 1
          Static Const Maximized = 2
      EndDefine
      or
      Define Enum WindowState          && Beautifully and clearly defined Enum. Winner
          Normal    = 0
          Minimized = 1
          Maximized = 2
      EndDefine
      

      I root for the last one.
    • Booleans Once and for all, make TRUE and FALSE keywords of the language.
      Nothing uglier than .T. and .F.

      Once there, make INKEY() codes also keywords like K_ESC for 27.
      Enums will fit perfectly here too:
      Key.Escape
      Key.Backspace
      Key.Enter
      and so on
    • SYS Functions Give all SYS() functions a System.Descriptive name
      System.TempFolder()
      System.UniqueName()
      * Note: now that we have namespaces ;-)


    • DEFINE STRUCTURE
      There is an Empty class. -- John Koziol
      For a cleaner language. I know there is.


      I don't understand what "cleaner" means. Different languages are different languages. Is "bonjour" "cleaner" than "Good day"? They both mean the same thing. Theres a way to do virtually any thing in any language. We just have to learn that language's idioms.

      I've seen VFP code that interacts with C-whatever by creating a string variable full of spaces and positioning several terms at precise points within that string of spaces, then passing that variable to the C-whatever program, which reads the string as a structure. It didn't look that difficult to me, and certainly no more work to create than some several-dozen-line block of code that mimics a table--which is what a struct is.

      If people want to program in C or Java, then program in C or Java. When you program in VFP, use that language as it was intended. Please stop trying to morph VFP into something that it's not.

      -- Ken Dibble

      Here is what "cleaner" means to me:

      Instead of:
      Dimension colors[3]
      colors[1] = "Red"
      colors[2] = "Green"
      colors[3] = "Blue"

      Do:
      colors = Array("red","Green","Blue")

      or

      Instead of:
      person = New Object("Empty")
      Add Property(person,"Name","Britney")
      Add Property(person,"Age",22)
      Add Property(person,"DOBirth",{^2001/01/01})

      Do:
      person = Struct(Name="Britney",Age=22,Birthday={^2001/01/01})

      I understand everybody has a different concept of what "cleaner" means.
      I was just stating my very own. You have the right to disagree.

      --- George Nava

      Hmm.

      This does not seem to be OO in any sense. Not that I'm an OO purist, though for some that might be objection enough. But I'm having trouble thinking of why it would be useful to be able to create such a complex thing on the fly. Surely a cursor would be easier and faster to interact with in most cases if you really needed that kind of data to persist for very long.

      What is the scope of your struct? If it's local, why isn't this adequate:
      LOCAL Name, Age, Birthday
      
      Name = "Britney"
      Age = 22
      Birthday = {^2001/01/01}
      

      If it's not local, why do you not want to encapsulate it? If it needs to persist in any sense or be generic, why is it not more useful to do this, once, in a file somewhere:
      DEFINE CLASS Person AS Custom
           Name = ""
           Age = 0
           Birthday = {}
      
           PROCEDURE Init
                LPARAMETERS cName, nAge, dBirthday
      
                WITH THIS
                     .Name = cName
                     .Age = nAge
                     .Birthday = dBirthday
                ENDWITH
           ENDPROC
      ENDEFINE
      

      And then, whenever you need it:
      oPerson = CREATEOBJECT("Person","Britney",22,{^2001/01/01})
      

      Here you have a neat package that can be passed from one procedure to another, is as easy to read information out of as a struct, can be modified (subclassed) to include additional data items on the fly, and to which you can easily attach a Set() method to automate its collection of data.

      or
      CREATE CURSOR Persons ( ;
           Name C(20), ;
           Age N(3), ;
           Birthday D )
      

      And then when you need it:
      INSERT INTO Persons (Name,Age,Birthday) ;
      VALUES ("Britney",22,(^2001/01/01})
      

      The latter is not much harder than creating a struct and has the great advantage of being sortable, query-able and accessible from anywhere in your program.

      VFP is as powerful as many other languages--if used correctly.

      (I won't argue, by the way, that it wouldn't be useful to have a "more empty" baseclass than Custom, but "less empty" than Empty--because we need that Init() functionality. In fact, I also won't argue that it wouldn't be nice to be able to create our own base classes from scratch and pick and choose VFP native functionality to add to them using something like the C# "Implements" concept. OTOH, the significance of the extra "weight" of something like Custom is really quite negligible in most situations. I've got code that constantly creates and destroys some quite large and complex Custom-based objects without any noticeable performance degradation.)

      (And, while we're at it, I also won't argue against inline declaration/assignments--ie. "LOCAL foo = 'bar', grotz = 30, felch = {^1492/10/12}"--either.)

      You're right, of course. It's mostly a matter of personal coding style. I think the gist of my message about this stuff is: Please, while adding enhancements, do not dilute the power of the language's xbase roots, do not weaken its truly unique and intuitive OO features, and especially do not take steps that would lead, in future versions, to deprecating these things and relegating them to "included for backward compatibility" status, purely to satisfy what are, in my opinion, largely stylistic fads in programming and not truly performance-enhancing features.

      -- Ken Dibble

      Define Structure Person
          Name="Britney"
          Age = 20
          Hired={2004/01/01}
          isActive=True
      EndDefine
      ? Person.Name
      If Person.isActive Then...
      

      OR
    • DEFINE CLASS AS EMPTY
      Define Class Person [As Empty] // assume empty if no class specified
          Name="Britney"
          Age=20
          Hired={2004/01/01}
          isActive=True
      EndDefine
      

      For lightweight objects

    • ARRAYS and STRUCTS Inline definitions of arrays and structs
      colors = Array("red","white","blue")
      person = Struct(name="Britney",age=20,isActive=True)
      
      * or
      
      colors = NewArray("red","white","blue")
      person = NewStruct(name="Britney",age=20,isActive=True)
      
      ? colors[1], person.name
      
      


      and revisions for
      LOCAL lcColor = "blue"
      i.e. able to create and assign initial value to a local variable at the same time.

      and allow for aArray(0)
      SET ARRAYBASE TO 0|1 && with local scope, would be very interesting
      or
      Dimension myArray[9] Base 0 && ugly, I know

    • Since backwards-compatability seems to always be a huge priority for the Fox team, improving Arrays to be zero-based is a non-trivial task to achive in an elegant manner, so why not just add a new kind of memory variable that just does it right, but is still accessable like an array? Call it a "list" type, let's say. One which is always passed by reference (copies would result only from list slicing), which uses zero-based indexing, and provide ListToArray() and ArrayToList() functions. -- Peter Crabtree

    • Python-like list slicing on strings and lists - myString[3:-1] is far cleaner than Substr(myString, 4, Len(myString) - 4), and I don't even want to consider how many lines myString[3::-1] would take in VFP. -- Peter Crabtree
      There's an off-by-one-error: Substr(myString, 4, Len(myString) - 3)
      substr(myString, 4) will do the same.

      That's not an error, and this is an example of why I want list slicing - the current system makes off-by-one errors so very easy. Substr(myString, 4, Len(myString) - 4) is exactly what I meant - that is, return the string, beginning from the fourth character, minus the last character. This is just an example, of course, but I very, very often find that I have to do similar things. A simpler example would be:
      Left(myString, Len(myString) - 1)
      vs.
      myString[:-1] -- Peter Crabtree

    • Data type classes Take a cue from DotNetOffsite link to http://gotdotnet.com and Java and provide intrinsic classes for the various data types. This could also be an avenue for using strong typing in VFP without breaking backwards compatibility. The DotNetOffsite link to http://gotdotnet.com object model could be used as a guideline, and class methods could make use of existing VFP functionality where possible. This not only brings a modern element to the language, but makes it easier to use for other developers that aren't familiar with VFP. -- Joel Leach
      Local loMyString as StringObject
      
      loMyString = CreateObject("StringObject")  && not sure if this is required
      loMyString = "This is my text."
      
      loMyString.ToUpper()  && calls Upper()
      loMyString.PadRight() && calls PadR()
      loMyString.Replace()  && calls StrTran() or applicable function
      
      loMyString = 10       && fails at compile time/runtime
      


      Sorry, what why would VFP want to take a cue from .NET and Java with respect to data handling. Data handling is the weak point of those languages. The strength of VFP is it's cursor technology and all that revolves (e.g. data binding) around it. .NET and Java need to take cues from VFP.

      Perhaps I wasn't very clear, but my suggestion has nothing to do with the data/cursor handling. Rather, I'm talking about adding native classes for variable data types, not fields in tables. VFP has always kept up to date with its language, and I think this would be a valuable improvement that other modern languagues enjoy. FWIW, I agree that VFP's data handling is superior, and my understanding is that the DotNetOffsite link to http://gotdotnet.com teams are taking some cues from VFP in this regard. -- Joel Leach

      No way, Jose (or Joel as the case may be). While that stuff works great in .Net, I can't see doing that in VFP without major problems for legacy applications. Not to mention it would require immense and risky changes to the VFP engine. -- John Koziol

    • Typed properties Provide a way to associate a property with a class definition using either a language construct or Member Data. Currently, there is no way to get IntelliSense from a property that is an object. IOW, typing This.oMyObject. doesn't trigger IntelliSense. -- Joel Leach
    • Ability to create objects and call procedure/functions which its vcx/prg file already added into active project manager without the need of SET PROCEDURE / SET PATH TO in VFP IDE. It would make debugging in design mode easier.
    • Ability to create a class without a class library and without SET CLASSLIB TO. A .PRG can be called directly without SET PROCEDURE TO. I should be able to oObject = Create Object("someclass.vic") where the .vic (visual class as opposed to visual class library) has the same structure as a .vcx, BUT does not support containing multiple classes. That would let the existing designers work. This would reduce the arbitrary grouping of classes into classlibraries. It would mean a particular exe would only contain the classes (and their parent classes) that are used, as opposed to containing also unused classes! -- Mike Yearwood
    • SET CPUHog ON | OFF | nPercentCPUUseAllowed ok so a better name is in order, but I think this one states the problem better... VFP needs to have a SET or sys() call that can be made to allow VFP to cooperate with other running tasks on a machine. There are two classic examples of where VFP's performance-at-all-costs mentality makes VFP fall flat. Long running SQL-SELECT executions and while waiting for long running synchronous SQLExec() results. When these operations happen on a fat-client VFP app or from inside a COM object used on a web server little other work can be accomplished on the box. TaskMan shows the VFP program as non-responding, which has probably caused more than a few needless End Task kills of the app. VFP needs a mode to give up CPU cycles and respond to Windows messages while these long running commands are executing. Losing a couple of percent execution speed on a SQL statement is an acceptable tradeoff if it means that a whole website will not go non-responsive or that a user can switch over to Word and be more productive while a VFP task is cranking away in the background. Currently we have a work around for
      this fault by using a second machine which takes report query requests from a queue and processes them in an offline manner. -- ?df


    Program Editor Enhancements


    • Text editor allows to define column blocks for copying, cuting and pasting, like WS in the old foxbase days. In many ocasions, is necesary to cut or copy a block of columns (instead of lines, like today's most editors do) and there is no way to do it. Back in the old days of FoxBase, we used to use WS as a text editor, using (Ugh!) the WS dot commands to define column blocks for copying or cutting; many years after, I think it's an usefull ability for a programer's text editor. CarlosMarrero.
      I agree. It's my understanding that the Visual Studio editor allows for this. Russell Campbell

      What about a shortcut (CTRL+D?) for duplicating a part of a line, a complete line or a block of text?. Sebastián Menéndez

    • A "back" button. This would take you back to the previous method or PRG file that you edited, pretty much like the Back button in a web browser. Imagine you are editing a method, then you move on to editing another method, then realise that you need to go back to the one you were just working in (or the one before that). A simple Back button would be easier than navigating the drop-down in the method editor. (Yes, I know we have bookmarks, but what I have in mind would be mucn simpler.) Mike Lewis
      Have you tried Document View? -- John Koziol
      • Yes, I use the Document View all the time. But my idea is for a button that would move back (and another one to move forward [as per Joel Leach, below]) across all PRGs, forms and classes in the current session. IOW, you would navigate according to the order in which you visited the edit windows, not the positions of the functions, methods or whatever within their respective files. Mike Lewis.

      I agree. I was going to add this one, so I'm glad to see it is already here. Add a forward button while you're at it. -- Joel Leach

      I third that. And, again, I think this is a feature in the Visual Studio editor. Way back, I worked in the Microsoft Basic 7.1 Professional Development System. One thing you could do was have the cursor on a keyword (without it being highlighted) and you could press F1 and it would figure out what word you were on and give you help on that. Similarly, I think it could also take you to that function with a press of another F key. That would also be helpful in VFP. Sure, something like Click or Refresh would be an issue - maybe it could show a picklist - but lots of times I'm wanting to go to a specific method I wrote that only will appear once, so the editor could navigate straight to it. Russell Campbell

      I would rather prefer to have a docked/tabbed code editor for PRG-based code (more like VS.Net). Having a simpler way to switch from PRG to PRG together with the Document View will be enough IMHO. Martin Salias


    • Visual Designers for .PRG based source files. This would give us the ability to more fully take advantage of source code control systems - Sharing, merging, branching etc...
      You might want to try scx2prg, it takes all the methods from a SCX file and puts them in a PRG file.
      http://www.portalfox.com/modules.php?op=modload&name=News&file=article&sid=93&mode=nested&order=0&thold=0
      Unfortunately it's very limited, and it doesn't provide the reverse (prg2scx) where you would replace the code in the scx with the methods in the PRG. If anyone wants to design one, we'd be very grateful.
      -- Rick Garcia.

      All the above is true, but the VB6 style of IDE is much more satisfactory. I have never taken to SCXs and code only in PRG files which I find far more maintainable in the long run. If I find a useful SCX I use scx2prg immediately and dump the original. (My VFP app is 10 yrs old this year.) -- John Burton
    • Program Editor Events
    • Custom syntax highlighting rules/table -- Allow keyword table used for syntax highlighting to be customized for customer specific keywords and mini-languages. Provide hooks into parser rules used for color coding similar to hooks into existing Intellisense system. -- mmg
    • Member Data -- Needs a complete rethink - see Engine enhancements below
    • NON-VISUAL CONTROLS Yep, at the bottom of the form designer like VS.NET IDE
    • Persistent bookmarks, even after closing VFP.
    • VS.NET like editor - expand/collapse code, (IF...ENDIF, FOR...NEXT), show current class and method while navigating .PRG based source file. --Document view is almost there, isn't it? - Martin Salias
    • Make intellisense work with class defined in PRG in the same project. --It works with everything in the search path. You have to declare things AS xx OF xx.PRG - Martin Salias
    • Ability to do COM automation after added COM type library reference to intellisese manager like VB/VS.NET. Or, at least tell us what is the relavant class definition string such as "word.application" for MS Word, "excel.application" for MS Excel, "Source Safe" for VSS and etc.
    • Emulator for mobile devices (see Deployment)
    • RSS to the task pane -- I built one into the IDE, I'll post it somewhere.
    • UI Alignment Guides -- Whidbey-style guides for aligning controls in the form/class designer. -- Joel Leach
    • Split screen editing or multiple windows into the same procedure/method.

    Better Debugging and Error Reporting

    • Better debugging to expose *why* applications crash. I have several clients with "legacy" apps that can reproduce a C5 crash with a repeatable series of steps inside of their application, but I have never been able to duplicate in a simplified setting. I'd love debugging hooks that could expose where object references are failing to clean up, or what exactly a crash means. Many crashes occur because of index or table corruption, but developers can only solve this by packing all tables, dropping and recreating all indexes and views, or deleting a resource file. A diagnostic error code that would tell you what the problem was would be great. Crashes that report "internal table structure error" or "bad index" would help immensely! -- tr Note: Yag points two blog entries from Calvin Hsia that describe debugging VFP in Visual Studio:
    • Edit and Continue support. Instead of the "fix" feature which doesn't really work when you're knee deep in debugging. Edit and Continue would be incredibly helpful.
    • Be able to traverse VFP collections in the Watch window. - jp
    • Have the 'Type' column (3rd column) anchored to the right side of the Watch Window, so no matter how we resize it it stays put on the right. As it is (VFP 9.0) it does not persist, going past the right edge of the window (invisible), and furthermore when reopening the Watch Window, it does not remember (persist) the previous position, and goes back to being beyond the right edge.
    • Break Points on Empty methods This would let you step into the inherited code from the parent class without having to first put a DODEFAULT() in the subclass so you can set a breakpoint.
    • Runtime DEBUGOUT Can do this now. Get DBGVIEW from www.sysinternals.com. In your code DECLARE OutputDebugStringA in WIN32API as MyDebugout string. Whenever you want a message: MyDebugout(msg). Can send messages between machines also - see DBGVIEW doc.
    • Make sure no error can bypass a user defined error handling routine.
    • Don't open the USE dialog if SET TALK is OFF and a dbf cannot be opened. Raise an error instead. Make SYS( 2335, 0 ) available in .exe apps too. Not only automation servers need to
      run 24/7. Are you looking for SET TABLEPROMPT OFF in VFP9?
    • Allow VFP COM Server debugging together with Visual Studio. I envision two possible scenarios.
      1. Start VFP and "run" the COM Server. This should also startup the client application (which has to be specified somewhere). The client application which could be a VB
        ,VC++ or C# application could potentially be started within the Visual Studio
        environment (or at least later be attached to the client process) so that the
        client code also can be debugged). You can then set break
        points using the VFP debugger and when the client calls your procedure/function it
        breaks and eureka all your variables can be watched and you can step nice and easily
        through your COM server code.
      2. Start the Visual Studio environment with your client application (again VB, VC++ or a C# application a possibility). Start the debugging inside Visual Studio.
        Somehow you should be able to see
        the VFP code and be able to set breakpoints in your procedures/functions. Whether
        you manually have to open VFP and the right project files or whether Visual Studio
        will be able to debug into it is up to the implementation. Likely it needs to
        do some clever process interaction, just in the same manner as Visual Studio
        can debug directly into .dll's.

      Under all circumstances this would make a boost in productivity of debugging VFP
      COM Servers.


    Data

    Local data

    • Renumbering for autoincrement fields
    • Blow Away The 2GB dbf file size Limit! -- don't waste your time with this. Just make SQL-server access built in so I can say
      open data mysqlserverdb
      and then let me use sqlsv tables like vfp tables. with use, select, etc. - PAC
    • Rather than wasting time trying to re-write the VFP core code to change the 2Gb limit , why not implement automatic, and transparent, table partitioning. We would need some rules (surrogate PKs, max records per table, Vertical or Horizontal partition and so on) but it is not hard to do and would allow us to 'access' data sets that exceeded 2Gb while still working within the limit for a single file -- Andy Kramek
      I agree. AFAIK Pervasive (former BTrieve) made it's way into the 21st century using this technique.

      IMHO breaking the 2 gig limit is a non starter. Why? We really need a DBCC command like the one in SQL Server. It does so much and is definitely needed when using large data sets. If paritioning is used, DBCC would be a must have. -- Val Matison

    • I think there could be a problem with the maximum file size in operating systems. I'm afraid in FAT16-32 the limit will be imposed by the operating systems (4GB minus 1 byte), so the advantage we can obtain is a two-fold one, not further. I'm afraid too that the limit imposed in DBFs lies in internal pointers (32 bits became exhausted soon) and some other engine design trade-offs that are still inside the VFP core. In NTFS this limit is too high (in practice, almost infinite), granted, but I think a better approach would be (I suggested this in a local newsgroup many years ago) to implement a sort of logical table, as a unit of several regular DBFs chained together, a trick used by almost every conceivable RDBMS. The engine will open all the tables grouped in the logical one. This, of course, must be available only from inside a DBC container, we can ensure integrity and other thigs. The indexing could remain standard (provided it is compressed at a 6:1 ratio most of the times), but it can take advantage of the logical grouping too, when you add a record in the second partition of a set of three, the altered index is only the second one. This of course has potential issues, like the mechanism to verify against duplications of a single primary key across such huge set of separated tables, but I'm think we can always get a workaround. In order to prevent inconsistencies and tampering with an already congestioned DBF header, perhaps a DBX extension (DB extended) can be added, these files could be marked as read-only whenever VFP is not explicitly opening it, in order to prevent accidental erasure of data, etc. One DBX is the logical descriptor for a set of DBPs files (database partitions) You can edit the pieces of physical DBPs by issuing USE mitable1.dbp and you're done (they're in essence DBF tables). When you issue USE mitable.dbx you're getting a single, huge table. I guess we cannot deviate too much from the stablished arquitecture, but if we extend it from the "container" side (not the DBF side) perhaps
      we can break the 2GB limit size without getting into a major engine refactoring. -- Carlos Pérez 1-SEPT-2005

    • Look at using the Cursor Adapter where you can standardize data access to SQL Server or native data. -- John Koziol
    • Give us native access to mdb files too so that we can migrate people from Access - Geoff Franklin
    • Allow Recycling of OLD Memo Data Blocks -- Allow the deleted datablocks in the memo file to be re-used so as to do away with having to use "pack" or "pack memo", which by nature opens the tables exclusively which is a real pain for 24/7 systems
      Perhaps create 'compound tables' where several .DBF files of the same structure could be treated as a single table (internally performing automatic JOINs)
    • Full Indexing of Memo and/or rushmore enable Memos Ability to index all words of a memo field or a text field, so that queries that include : field like '%word%' or 'word'$field can be rushmore optimizable ... Now that would be a good idea indeed...
    • A good idea is to make to make the local database engine pluggable by third party drivers, like other xbase dialects: clipper, VisualObjects, XBase++, Flagship, harbour, so you can continue to use the local database model (different from the SQLServer model), to access your data, without the some of the limitations of the native dbf engine, like the 2GB limit (Eg. local driver based on ExtendedSys Advantage Database).
    • Blow Away The 254 Field per DBF Limit - Even that old dog dBase has long been able to open and edit DBFs with 2048 fields. If they can do it, Microsoft should be able to. Stop telling us "Oh you shouldn't have more than 254 fields; break it into related tables." Tell that the scientists at JPL, where the XBase language started with mainframe program called Retrieve (Jeb Long) and Vulcan for microcomputers (Wayne Ratliff). Yes, there can be more than 254 qualities of an astronomical body. Tell that to financial planners. Yes there can be more than 254 attributes of an investor's portfolio. The 254 field barrier has been with us since FoxBase and much too long. With this, also blow away the maximum width of a record.
    • Unicode Data Type
    • XML Data Type
    • Free up CPU cycle during SQL query. Don't eat up 100% CPU usage.
    • Wouldn't it be nice if index tag names could be the same lenghth as the field name, rather than being restricted to 10 characters. What a pain that is! #fb# This gets my vote, too - can't believe I never thought to suggest it before -- Randy Jean
    • Better support collection and XML data source for cursoradapter - Ability to work like native cursor, made changes and commit using TABLEUPDATE().
    • REPLACE FROM NAME [object] - You can GATHER FROM NAME [object] but this restricts you to the current alias. Alternatively add an IN [alias] clause to SCATTER and GATHER. Maybe a LOCATE IN [alias] too! (Oh, now you're dreaming!) -- Rob Spencer
    • Support for character fields longer than 255 chars (CA-Clipper compatible) - for example if you have CA-Clipper DBF with C(400) field, VFP opens it without any error!, but some fields after that long field are not correctly displayed - they are just "hidden" for VFP and values are not usable inside VFP

    Resurrect the ODBC driver

    • Bring back the ODBC driver. Many windows packages, like ScanSoft's OmniForm, allow connection to ODBC data sources, not OLEDb ones. Return the VFP ODBC driver to the "Desktop Database" drivers available through MDAC and shipped with the operating system, Office, or other tools.

    Data Explorer

    • Improve the "Copy Results" button. This just copies the data to the clipboard in text format as columns separated by spaces. It would be nice to also be able to copy to a VFP table or cursor.
    • Add more properties to the bottom panel while opening the treeview to see tables fields. Currently (VFP9.0) it shows Column name, Data type and Default.
      Should also indicate, at least, the description (comments) field, if it is a key field and if it has and index or takes part in an index.
    • Syntax highlighting for edit Select Commands and Stored Procedures in Window "Run Query" -- Miguel Herbias

    Web Development

    VFP Web Forms

    • Ken Levy wants "stategic" recommendations, well here is one.


    Deployment

    General Deployment

    • Distributable Spellchecker
    • Small footprint runtime for mobile devices (Pocket PC, smart clients, etc.) An arguable business case for Microsoft is that these portable VFP apps would drive Pocket PC sales! - ?wgcs
    • Linux and MAC runtimes -- Simon White

    Runtime Deployment

    • How would you all feel about having an "auto update" option for your runtime deployment? (one that you didn't have to build & host yourself). Of course, this would need to be optional and possibly just for service packs, etc. (not full version updates) This might make VFP more attractive in the "enterprise" and position it alongside .NET and J2EE which both have auto-update for their "runtime". (.NET via Windows Update) This is something that VB got for "free" by being a .NET language now. The Auto Update idea is a superb idea. I would like to be able to host the updates wherever I choose. GM

    Language



    Report Enhancement

    • True OOP Report Designer Please -- like at Form Designer
    • Report Preview clickable, to call another report -- More end-user friendly, especially for management level. Ex. First report show up Summary Report of Sales, they just need to click on certain line, than the report will popup Detail Sales Report of clicked information.
    • Report Designer Zoom Levels (design mode) -- so that you can zoom in on areas of the report that need greater attention.
    • Real Orphan & Widow control
    • Full Justify option -- like in Microsoft Word full paragraph alignment (i.e. both right and left sides)
    • _SUMMARY Report Variable/Flag -- Report listeners can't determine if a report is being run with the SUMMARY key word.

    Documentation

    • Better support in MSDN I am tired of finding examples for VB and C# and not for VFP in MSDN. Someone at MS needs a wakeup call on this one.
    • Remember the beginners More easy to understand and remarked code examples. Easier language in the help file. This might help VFP neophites to make VFP their development platform of choice. As it is, Help seems to be written so that you need to find a third party vendor who will show you what you want to know, but for more money. In some cases, much more than the cost of VFP.
    • Illustrations in the help file! A picture is worth a thousand words. A block of code as an example of building controls on a form is of low value in a product with so many strong visual design tools. (If you're new to the product, even the smallest of hints as to what a control looks like would speed the learning curve....) Randy Bosma
    • More Cross References at the Bottom of help file pages


    Add ons

    • Upgrade the Treeview control to make it easier to use like the one in .NET -- David Fung
    • Better/Extensible Source Control Integration
      • Build Offline - With VSS integration enabled, you can build source that isn't checked out (ie the source is read-only). However, if you open the project without your network, VSS integration fails (which is OK since you don't have acess to the library) but you then can't build, as the files are read-only. How does that make sense?
      • Option to allow better change tracking - If you build a form, class library, etc. the database files get updated. If you check for differences using VSS integration there aren't any. If you fetch latest, the files get updated. Why? Assuming that these updates are to allow for partial build support, please give us the option to sacrifice that for cleaner control of what has actually been updated. Partial builds lead to bloat anyway so for production we only do full builds.
      • Project Hooks - They never update in VSS since they are always open.
      • Ability to view what source provider/library is in use - The value in the options dialogue seems to only be the default value used when joining source control.
      • Integrated to non VS.NET specific feature in MS Visual Studio Team System. Ex. Visual Studio 2005 Team System: Enterprise-Class Source Control and Work Item Tracking. Even though it is not ready yet, but it would be good if it could be integrated in future.
      • Allow editing of menus while still read-only.
      • Allow difference comparison from the check-in selection screen. This is where you enter the comments that are stored against a change, so it would be good to see exactly what you changed!
    • VFP 10 should "blow the lid off blowing the lid off"! Rob Spencer

    Misc - Ideas not yet categorized herein

    • New controls Make a list of all controls available in VS.NET and implement them ALL in VFP10 as part of the language and not as activeX. Tree View, Rich Text, Web Browser, FileWatcher, etc.
    • Menu designer Allow interactive menu design right on the form like VS.NET
    • New XP Style Icons / BMPs the current ones are old enough to vote - jp
    • Image transparency support
      I can't implement a suite of XP-style icons on command buttons without editing out the lighter pixels that are supposed to feather the edges of icons with transparency - you get a halo effect around such icons when placed on a button or form otherwise. At the moment transparency is ignored in Picture properties. Support for images is even worse in menu bars - there is no equivalent of the Disabled Picture property (see comments on OO menus). Further, the ancient ActiveX Image List control that we seem to still have can only take GIFs, BMPs and JPGs. A PDF thumbnail looks awful as a GIF or JPG - PNG is the correct format for an image elements of this kind. GDI+ image support is great but the job is only half done at the moment. --- John Burton (on commandbuttons - and not only - you can put an image control, it suports transparecy.. check this! I'm no
      shure about previous versions but in vfp9 it works :) - edyshor [2006.06.27])

    • Namespaces
      Define Enum Colors In Namespace System
      * yadda yadda
      Define Enum FillStyle In Namespace Fox
      
      * yadda yadda
      Define Class Country In Namespace World
      * yadda yadda
      
      Thisform.BackColor = System.Colors.Black
      Thisform.Fill = Fox.FillStyle.Transparent
      oUSA = NewObject("World.Country")
      


      AND/OR

      Namespace System
          Define Enum Colors
          * yadda yadda
          EndDefine
      EndNamespace
      
      Namespace Fox
          Define Enum FillStyle
          * yadda yadda
          EndDefine
      EndNamespace
      
      Namespace World
          Define Class Country
          * yadda yadda
          EndDefine
      EndNamespace
      
      Thisform.BackColor = System.Colors.Black
      Thisform.Fill = Fox.FillStyle.Transparent
      oUSA = NewObject("World.Country")
      


    • Make it part of .Net. This could be done by setting a switch in VFP, like SET DOTNET ON.
      Once this is set, the & Macro would no longer be recognized and various other behaviors would change or be eliminated to achieve compatibility with .Net. It can't be impossible.
      Most of what has been asked for above would be easier if VFP were .Net compatible.
      Dot Net
      It is not such a bad idea to make it part of .NET now that they are working on a dynamic language for the CLR, this would be the perfect candidate. The right time to drop the fox and rename it so all the licensing and backward compatibility problems go away.Start from scratch with the philosophy of the fox and 20 years of experience handling data. Use all the framework dynamically from the new fox. Keep the syntax simple and non-obtrusive. Implement some features planned for Comega. Make it server-side ready, web enabled too. It can't go wrong. The best ever!

      It continues to amaze me that 'we' see Microsoft as a poor poor entity that just has to squeeze as much money as possible for anything it does"! I know it is a "business". I know business runs on profit. But Microsoft has other objectives, one of which is keeping Linux at bay. Now the big boys can easily afford all the licensing $$$ implied in Microsoft's typical product offerings. But Microsoft can also surely see that it can do a better job of keeping Linux out of places if it also offers a product that does not burst the purse of small/medium businesses. There are, after all (though who knows for how long) far far more small/medium businesses out there than there are biggies. Surely Microsoft can see that some $$$ for the OS and for VFP.NET and for Office 200X and for other related products is a much better business proposition than NO $$$! So lets get off this 'go ahead Microsoft and charge the hell out of a VFP.NET' wagon and put it back in the barn. -- Jim Nelson

      Yeah baby. I'm also tired of this VFP/.NET crap. If you want to learn .NET then learn it. We are talking about a VFP 10 Wish List - NOT .NET. Actually, I think that MS is concerned about the acceptance of .NET. All my clients are interested in Java, not .NET. Maybe that's why MS is, once again, trying to force technologies on us - after all, a lot of jobs at MS are at stake.


      I have a need to put a large map image in a 1024,768 form. Because of detail loss, I cannot have the map image reduced to fit the area so there is a need for a user to be able to scroll vertically and horizontally to find an area on the map. Also, in the app, when a user clicks on the map image the x,y coords are recorded in a table and a small graphic pops up on the form at those coordinates.

      As it is, if I scroll off the area and then back, the graphic is erased. That is not good. I would like it to remain. Also, the coordinates would have to relate to the image size and not the portion of the image that is visible.

      Zooming in and out on the map/image might be a solution, but a much wider and deeper, or unlimited maximum form size might be ideal.

      FWIW, this can be accomplished right now using the Web Browser control. You can add the graphics easily with a bit of DHTML coding. -- df
      Designtime events for formbuilder and classbuilder
      Now that the example is set (with the new reportbuilder possibilities) that events can occur at designtime it would be nice to have the same feature for the formbuilder and classbuilder.
      MENUS! - Object Oriented already. This IS an OOP language, isn't it??
      Improve menu support
      The MODIFY MENU dialog needs a complete overhaul. The basic design hasn't changed since FoxPro 1.0 or so.
      Given a menu popup name, there's no way to determine via code things like MOVER, MULTISELECT, SHORTCUT, etc.
      Given a menu bar name, there's no way to test for PICTURE, PICTRES, BEFORE, AFTER, FONT, STYLE, KEY, COLOR SCHEME, COLOR, MRU or INVERT.
      Given a menu name, there's no way to determine the status of STYLE, KEY, FONT, MESSAGE, COLOR SCHEME, NOMARGIN or COLOR.
      Menus
      • Because menus aren't OO things, events don't fire when they open and close etc. I would like to detect a menu open in order to close popups that may be open elsewhere.
      • The behaviour of PICTUREs in menu bars is antique. I have a large set of XP-style true color 16x16 BMP files to use across my app on buttons etc. On a button I can use the Disabled Picture property to specify a greyscale image. A menu bar can't do this and disabled pictures just look like blobs, even if .MSK copies are available. (Actually I don't want to use BMPs but images with transparency - see topic on images.)
      John Burton
      Tab Order
      • Two buttons in toolbar: Tab by numbers AND Tab by list (no need to go to tools/options) In fact, this is in VFP 9.0 (well, not two different buttons, but one button leading to the two choices, which is almost as good).
      • Tab by numbers: CTRL-Click allows you to continue from the clicked number instead of starting from 1. God, I hate that!

      Aligning Leaders
      Give us a Leaders function in the Format dialog box for report fields. User would specify either a single character (typically, a period) or a character string (such as space-dot or space-space-dot, etc.) as the defined repeating string.

      With Leaders checked and a character specified for a field, any printed text in the field would be followed by a string of leaders extending to the width limit of the field, with perfect alignment from the right limit of the field. Example:

      Cash in banks ........................

      Yes, PADR() can produce this result, but only if fixed-space fonts are used. Many apps use proportionally spaced fonts, and in that case, PADR() produces imperfect/inconsistent alignment when multiple lines are involved.

      I realize there is another technique for obtaining perfect right alignment: Superimposing one field on another, with the bottom field set to the expression REPLICATE(' .', 100) to generate the leader string, and the top field (containing the data expression) set to Opaque. But this technique has two drawbacks: (1) Although right alignment is indeed perfect, there are often problems with the left portion of the leader string. Since the zone of opacity of the top field ends exactly with the last pixel of the text, the initial leader dot sometimes prints so near to the end of the text string that the last character of the text looks strange, almost like a foreign-language letter. There needs to be a narrow zone of additional opacity following the end of the text to prevent this problem. (2) The double-field piggyback technique is very tedious and exacting, especially if there are numerous fields on a report. It takes a lot of work to achieve a simple result. It shouldn't be this hard. (In my good old DOS
      Word Perfect you could do this with two quick keystrokes).

      Some width calculations would have to be built into this function to make it work correctly, so that regardless of what proportional font was used, the leader character(s) would always be perfectly aligned from right to left of the leader string; varying space would be inserted between the end of the text string and the beginning of the leaders so as fill each line completely--i.e., make it a full-justification line. --Jerry Call

      This would be possible on reports now with an extension to the report handler and on screens with an intelligent base class. The second superimposed field could be automatically generated with the number of dots adjusted to avoid the cropping problem described above. Once this base work was done, it would simply be a matter of setting the special directive on the report field or picking the correct base class for a screen element. -- Rob Spencer

      Remove Image Control Size Restriction or Otherwise Improve It
      The image control currently throws a "too large or corrupt" error when trying to display images larger than 9,999 pixels in either direction. This is only after VFP churns on it for a number of minutes and eats up vast quantities of RAM (sometimes 10's of MB), even if the size in KB of the image is relatively small. To reproduce this, take a TIFF file for instance that is 10,000+ pixels (such as 10,500 X 10,500) and set it as the picture property of the image control. Also, even when using a TIFF image of a currently supported size, the system resources (mainly RAM) consumed are excessive and the time to open the image is quite long. Using an ActiveX control in place of the image control is not really workable in cases where other VFP visual objects need to be placed on top of it, as ActiveX controls always manage to come first in the zorder no matter what (maybe this could be fixed as well?). Anything that could be done about this would be greatly appreciated. -- Craig SBoyd

      Image Control : add a Control Source property to easily display in grid lines without a General Field (Thierry Nivelet [2006.03.27] )

      Make forms resizeable in the form designer for borderstyle # 3
      I design most forms to be not sizeable and find it annoying that you can't resize forms in the designer when they are set to not sizeable (ie borderstyle # 3). Maybe I'm petty but it has bugged me for years ! - Jamie Osborn

      Set the border property in your base form class init event instead of at design time. (You can also add a 'DontChangeBorder' property to override). This approach is also useful for controlling grid column resizing, moving, etc. Been using it since 3.0. - RushStrong

      Form Properties form postion should be in the properties layout, so that we get more than centered and upper left. (Yes I know it can be done in code, but properties is the issue here)

      Don't ask me to key in parameter value when I want to drag and drop fields from DE onto myform. I just want its structure but not the value. Parameter is meaningless here.
      VFP for VFP
    • More control over the IDE from VFP code. I want to be able to automate building a class. Right now it can be done, but it is very fragile.
    • Hooks and more hooks. I want hooks everywhere. I want my code to run every time the debugger goes to a new line. I want my code to run every time a break point is checked. I want my code to run every time a new class is created. I want code to run every time a SELECT-sql command is executed.
    • Programmatic control over the IDE. If it can be done with the keyboard or mouse, I want to be able to do it from a PRG. And not by stuffing the keyboard ? I want clean, object based, easy to follow, easy to debug code.
      There are ways to do it. Visual Test, for example, uses ActiveAccessibility names and PEMs to automate UI testing. There are other tools that can fire off clicks and keystrokes via the AA model, too. Just look 'em up. Also, something that works well is a Timer class added to the _Screen object. Have the timer wait XX seconds and then fire off your KEYB script. This works great and only has problems with modal system dialogs. -- John Koziol


      Extend this concept so that VFP developers have similar tools.
      "The trick is that we had many more tools to ferret out weaknesses in the core code of VFP for the VFP 9 release than ever before." -- John Koziol, Software Design Engineer/Test, Microsoft Visual FoxPro Team
      The tools I am referring to require, for the most part, wouldn't help our customers because they require the VFP source code to spot problems. -- John Koziol that's why I said "extend...similar". I want some testing things that are both "in the box" and well integrated into VFP. One of the things I love about VFP is the debugger - of course I could use WAIT WINDOW all over the place and I wouldn't need it, right? right...... 1/2 of this is to make bug reports to MS easier. Instead of "Do this, click here, look there..." or "run this convoluted prg that stuffs the keyboard but is hard to understand", I would like "run this prg that is very easy to see what is going on." - ?cfk

      Perhaps create a set of Fox Unit tests that work basic VFP functionality. There is a problem with this: currently there isn't a good way to test many of VFP's features in this manner. The ER is to remove that probem. An excellent idea that I think someone is already working on in the community. We use several thousand basic VFP tests. -- John Koziol
      Please give us container objects with Scrollbars! - Vassilis
      That'd be nice, but I'd much rather simply have a scrollbar object, rather than having to roll my own ActiveX control to get appropriate Windows theming. I can easily roll my own scrollable container in VFP, compared to the hassle of my own ActiveX control scrollbar (and having to roll my own scrollable container anyway). -- Peter Crabtree
      XP theme support for activeX objects (Example I want to use Microsoft forms frame control) -- Metin Emre
      Enable SQL Server 2005 to run FoxPro code as a stored procedure, or VB wins.
      Dumb question: can't SQL Server 2000 run a compiled DLL now? What is it you are looking for? Running straight VFP code? That won't work as VFP is not managed code (.NET CLR).
      Raising activeX events from FoxPro.
      Better multiple monitor IDE support. VFP9 (and previous) can be extended across two monitors and Class Browser and Editor windows can be opened on either monitor, but always within VFP's desktop (_screen). Unlike the debugger windows (trace, view, call stack) that can 'float' outside of the IDE there is no way to do that with projects and editor. ** Tip - try using something like following: ACTIVATE WINDOW "Project Manager - MyProject" IN MACDESKTOP **

      When an SDI form is tested (run) from within the IDE, VFP reverts to one monitor only (instead of the previous span). Sometimes it picks one monitor, sometimes the other. It's probably a Windows issue. When the test form is ended, VFP sometimes reverts to the expanded view across monitors, but not always.

      Part of this may be Windows. What Windows version are you running? I was running dual monitors under Win2k and had similar issues as you describe above. I just upgraded to XP and the dual monitor support a lot better.
      That said, the issue of dockable vs. non-dockable components is a separate one and is probably an IDE issue. -- Randy Jean
      Running XP SP2 but it should have decent support under XP - Win2000 - Win2003
      Ability to Completely turn off scroll bars in List Box Control -- Simon White
      Scroll Event for List Box Control -- Simon White
      There is no MRU list for the BUILD command. If you have a project open, Intellisense will complete the typing for you, but if you have no project open, you don't get anything. There should be an MRU list for the BUILD command. I often don't have the project open while programming and I may switch back and forth between projects. An MRU list would be a nice addition. Russell Campbell
      Add a native control for hierarchical data. Add a native treeview (like in .Net) or extend the functionality of the grid control.
      Add a function to do the most basic DBF-repairs without the need for additional software. This means for the most common DBF-related problems (incorrect header count e.g.). With VFP 8.0 we obtained the ability to control checks for corrupt dbf tables. Now it would be fine to have the possibility to fix them easily with an integrated function (call it) Fix DBF(). Leave the complicated problems for commercial products. :-) -- GeroldLuebben
      Take a look at: UDFFix Rec Count .. it does just that!
      Give us associative array like the ones in PHP. This is a very mighty concept! Although it looks similar to collections these in fact are totally different.
      Add the ability to work with constants from ole servers or activex controls without the need to include the typelibs with #define statements. This would make integrating Office a lot easier.
      Make the "empty" class definable with properties and methods.
      Forget all the events that make the 'custom' class so large und unflexible (maybe you probably need "load", "unload" and "destroy" for other reasons).
      Make the data session window's open tables list act on multiple tables. In other words, make it act more like a true list box. Allow multiple selections. Allow Ctrl + A to select all open tables. Pressing the Close button would close them in the order selected. If more than one item, the Properties and Relations button dims. If all the tables are selected and the Close is pressed, issue a Close Tables All.
      Grid.RowAutoResize so that multiline content can be seen in a grid, and would alow rows to be different sizes. Or Grid.DynamicRowHeight so it can be set individually for each row.
      Add a runtime for Windows Mobile 2005. <-- THIS IS A MUST !!1!
      Bind control's event to handler by drag & drop.
      Dockable for all windows such as Program Editor, visual class designer and etc.
      Dockable Browse windows, it would be nice to have any browse windows docked together for easy navigation between them instead of having them scattered all over the screen.
      Way, way, way overdue - resize fixed dialogues or make them resizable and increase widths of drop-downs (e.g. Form Designer) to accommodate long method or property or field names. There are many dialogues that are nearly useless when long descriptive good programming practices names are used. Examples are:
      • Find dialogue
      • Form Designer
      • Property/Method dialogue (the worst offender)
      • Table Designer
      • Tools / Options dialogue! Holy cow, try the Field Mappings tab. And the silly little library label on the Controls tab. Ouch!
      • etc.

      Databinding for object/control properties -- Craig SBoyd
      Remove the limit on parameters in calls - currently 26(27) -- Craig SBoyd
      Sorry. I have to disagree with this one. Passing a parameter object is way better! You can pass a huge number of parameters. Each can have a description if designed visually. It's really hard to follow code that passes that many parameters now. Further it's really hard to debug code that has that many parameters. How much time is wasted trying to figure out that you missed the 15th parameter? -- Mike Yearwood
      OK, so I have an API function that requires more parameters than are allowed. I do the declare statement and then attempt the call, but it errors out. How would a parameter object help in this situation? AFAIK, the only thing I can do now is create a DLL in another language to make this call for me. -- Craig SBoyd
      You know what I liked in Pascal?! I could pass parameters to and application without declaring them via Parameters/Lparameters, and inside the routine i would test the number with PCount() "For i=1 to pcount()" and retrive them with "Parameter(i)" .. that was soo cool, besides, in vfp i can check it's Var Type() :D .. i always hated the "No PARAMETER statement found" message .. grr - edyshor [2006.06.27]
      I'd be happy with some 3-dimensional arrays... -- Pierre Albisser (I strongly agree with this!!! - edyshor)
      Forgot: Array as recordsource for grids... -- Pierre Albisser

      I noticed about a month ago that Oracle will be releasing a version for small business.(Invasion of our territory) I have been entertaining the thought that VFP should seriously go after Oracle for a few years, even if a more complex version must be developed. Maybe now is the time for large business/small business version of VFP.

      This is Oracles way of going after the soon-to-be-released SQL Express and has nothing to do with VFP. I think the situations where .Net - SQL Express and VFP and Oracle whatzit are probably all dependent on external factors such as corporate standards. I used to think that VFP was a great potential Power Builder killer but what do I know? -- John Koziol


      Off the wall thinking.
      Do you think that VFP and VB could be combined into one IDE? Can it be done?
      Howza about a timezone() function for better timestamp branding in general, in addition to a SET DATE TO RSS to get rss2.0 compliant datetime() strings like we're currently fiddlin with on XML Date Time -- Roxanne Seibert
      Show the Data Session window in the Debugger (Debug Frame mode). When I debugging, right now i have to switch back and forth to see the data sessions. It would be more convenient to show the data sessions somehow in the debugger.
      Show hidden and protect class functions with a different icon in the Document View. Right now I have no way to tell the access type other than using a naming convention.
      Native Scroll bars for Container class ?
      Have a look at this one and this one by Jim Edgar. See also Scroll Bar Class
      Pierre Albisser Rhodri C Evans
      Seen them both. Its the speed/overhead thats the problem. Ie so a container can be used to scroll images more than a 1 column wide which if any more will slow down the refresh. An example would be MS Explorer with View set to Thumbnails, the scrolling is reasonably quick whereas I havn't seen a scrollbar class that will do it as quick. I am currently using a page up and page down button to page the container.I ask this as many businesses are wanting to 'photo album' their products as menu selection etc
      When cursoradapter generates the update statement, make it keep the lettercase of the table names in the update statement. Right now all table names are turned into lowercase which is a problem when talking to a MySQL table with a name in mixed case in a Linux platform. -- David Fung
      Code Editor to support block selection, i.e. selecting a rectangular block of text all starting in the same column other then the 1st. -- David Fung

      SCATTER NAME oObject [AS "cClassName" [OF "cClassLib"]]
      It would be nice to be able to base the "scatter to name" object on a user defined custom object. It would make it easy to have custom methods and properties associated with a dataset. -- Jeff Knapp
      Give us big Integer (64 bits) in vars and datafields. (Thu, 30 Nov 2006 02:42:07 189.148.58.16)
      C-style appending, i.e. x += 1 or strName += " International"
      Provide a way to test that the network is still up. Currently there is no reliable way to do this that I know of.
      If VFP were to internally (invisibly) test that the server is still there and functioning and raise a trappable error if it is not, that would be very helpful. -- Ray Kirk
      Provide a way to set a breakpoint on an expression but ignore when the expression goes out of scope. -- Ray Kirk
      Simplified integration and debugging of Web Services (consumer, not provider). Currently, there's an awful lot of obscure, poorly documented stuff a developer needs to do to get it working. The sample class is flaky and poorly documented. And, forget debugging without 3rd party tools. -- Ray Kirk
      Beef up the date/time picker activeX control. It's pretty basic. I know that there are 3rd party products out there, but this functionality should be part of MS products. -- Ray Kirk
      When the builder can't find a file, it pops up a Locate dialog. But, can't the dialog tell us where in the project
      the problem is? -- Ray Kirk
      A THISCONT Environment Var in Container Classes how THISFORM in Forms. Then u can type Control Source = THISCONT.cHello
      Don't blow out grid control properties when the data source is closed or swapped out. -- Bill Plander
      A new function, FRY()

      Instructs the user's motherboard to shut down the processor fan.

      Used as a last resort in TRY...CATCH...FINALLY error handling, when you don't know how to handle a given error condition, and you're not interested in a phone call from the user. Also known as "The Kevorkian Dodge".

      See also the Windows API Solutions Sample "Adjusting The Screen Refresh Rate To Provoke Seizures".

      Thanks. -- Roger Strong
      More stuff from somebody...

      Wish List for VFP10 NEXT VERSION BEYOND 2007
      Is it me or does that headline make no sense?


      • Multithread for launch batch process with progress bar(*just include Calvin Hsia's new threading class in the VFP10/Sedna Foundation Classes)
      • Password to Database such as MS Access - Databa?


      • Just use Database Events in VFP7 and newer. See the following article with a downloadable sample zip file at bottom of article for how to use Database Events to protect your database container:
        VFP7 DATABASE EVENTS
        http://www.foxite.com/articles/read.aspx?id=26&document=vfp7-database-events

      • Impersonate Security by Only Program read/write DBF Files - excuse me?
      • Create more commands o functions for Email, FTP. - "o" really?
      • Include New Version ISAPI 10 Such as FoxWeb for Web Development thru VFP Script on Server Side (*take a look at some of the Open Source VFP projects that do this. Also, mixing HTML and code has never been a great thing IMO)
      • Include ActiveX for VFP Report Viewer for consuming another client as VFP, .NET , VB6, etc such as CR - Huh?
      • Include more Options for export VFP Report to PDF, Excel, Word (include in solution samples)
      • Include Sub Reports for VFP Reports
      • Save as FRX to RDL for export to Reporting Services
      • Encrypt EXE for decompilation with ReFox
      • Native ZIP/UNZIP function. All use... me too
      • Express Version VFP for Pocket PC ... because VFP is developed in C++

      MS said there would be no VFP10 on March 13, 2007. They didn't say there wouldn't be a VFP.Next or VFPX or VFP-something-else.

      Close the "VFP10" wish list cause it looks like version 10 ain't gonna happen!

      But they never said VFP 2009 wouldn't be possible, nor VFP11.

      See They Finally Did It
      Category Fox Versions, Category VFP Future, Category Vfp Wish Lists
  • ( Topic last updated: 2008.06.06 09:28:15 PM )