FileExplorer header  
Version version number
Copyright CapeSoft Software
www.capesoft.com
     

 

Contents
    Upgrading from a version earlier than 3.70? Please click here.  
bullet small General Information
 

First time User? Start Here...
License & Copyright
Introduction
About File Explorer
Version History
Features
Support
    Windows Vista Compatibility
System Requirements
Installing File Explorer
Adding a File Explorer Control to your Application
What you need to ship
Complimentary Products
Acknowledgements

 

bullet small The Templates
 

Global Extension Templates
 
Activate File Explorer

Control Templates
  Document Viewer
  Media Viewer
  Background Media Load Button
  Document Print Button
  Flash Control Buttons
  Html Background Color Button
  Html Edit Buttons
  Html View Buttons
  Media Buttons

Code Templates
 
CallFe_EditMethod
  CallFe_LoadMethod
  CallFe_MediaAPIMethod
  CallFe_NavigateMethod
  DeclareFEObject

bullet small File Explorer Class Reference

 

bullet small Dll Functions
 
bullet small Useful References
 

Tips & FAQ   [ Suggested Reading ]
Examples
The Storage File Example
Considerations if upgrading from a version earlier than 3.70   [Important ]
Internet Explorer Version Info
Header / Footer strings for IE Page Setup
Using DebugView
File Explorer and The Future
File Explorer Version Numbers
Version History   [ Suggested Reading ]

 
     

horizontal rule

bulletStart Here!

Welcome to File Explorer!  If you are new to File Explorer, or if you have not used the product for a while, these steps should get you going in the right direction. File Explorer started off with fairly simple goals in mind (see the section called Product History for more info).  Since its release in November 2000 it has evolved and expanded to the point where it's at today, which is a long way off from where we started.  Because of this process of evolution the product has many diverse features, and can be quite difficult to get your head around.  For this reason, the easiest and best way to familiarize yourself with it is to simply have a look at the feabc.app example application, which demonstrates most of the features at any moment in time.  Compile the feabc.app (see the section titled Examples for more info) and spend a few minutes having a look at the various things which the application can do. Once you have found something which looks exciting, have a look at the code / templates which the examples application uses, and then turn to this document should you require more help how the templates, methods, properties and logic works (although most of the time the example application is fairly clear about what it's doing). For some users the templates that ship with File Explorer will be enough to achieve what you want to do.  For users who want to scratch below the surface (highly recommended), have a look at what code the templates generate.  The templates simply generate code that implements the various classes that make up File Explorer.  Those classes are all outlined in this document. If you are still unsure about something after you've looked at the feabc.app example, and read the documentation, feel free to contact us for further assistance or to be pointed in the right direction.  The Frequently Asked Questions is another useful reference to read through once in a while, and be sure to read the product's Version History regularly to see what we're working on.

horizontal rule

bulletLicense & Copyright

This template is Copyright CapeSoft Software (Pty) Ltd.  None of the included files may be distributed. Your programs which use File Explorer can be distributed without any File Explorer royalties.

Each developer needs his own license to use File Explorer. (Need to buy more licenses?)

This product is provided as-is. Use it entirely at your own risk. Use of this product implies your acceptance of this, along with the recognition of copyright stated above. In no way will CapeSoft Software (Pty) Ltd, their employees or affiliates be liable in any way for any damages or business losses you may incur as a direct or indirect result of using this product.

horizontal rule

bulletIntroduction

While writing CapeSoft Mailer, we were looking for a way to display html documents as if they were being viewed through IE, rather than just viewing the HTML 'text'.  After much scratching and testing we implemented an object using the Internet Explorer OCX.  With this initial work under our belts we started looking at what other doors similar OCX integration could open, and started writing what was to become the File Explorer.  We added support for html browsing and editing, and support for pdf, sound, movies, and flash.

Since we released the first version of File Explorer the product has evolved and grown into a fairly large product, as you will see if you have a look at what the feabc.app example application is capable of doing. Enjoy...!
 
horizontal rule

bulletProduct History

In November 2000 we released the first version of File Explorer for Clarion 5.  At that time we started building a control to browse html pages, using the Internet Explorer "WebBrowser" OLE control, and the CW OLE container control to host it.  This proved unstable, and although we wrote huge amounts of "don't fall over and die" code, the File Explorer control (at that time called Html1) was always subject to the OLE control's problems.

Then in March 2002 we moved to using COM and wrote a new control for browsing html pages, based on pure COM (not the OLE control / container which we had been using).  The improvement in terms of speed and stability was mind blowing. Since then FileExplorer has come an long way and expanded to include the feBrowser control for viewing HTML and web pages, feHtmlEditor for editing HTML (soon to be replaced by the brand new, greatly improved, feEditor), feFlash for viewing Flash content, fePDF for PDF documents and feMedia which provides a full media player.


horizontal rule

bulletFeatures

  horizontal rule

bulletSupport

Your questions, comments and suggestions are welcome. Check our web page (www.capesoft.com) for new versions. You can also contact us in one of the following ways.


CapeSoft Support
  Email support@capesoft.com  
Telephone +27 87 828 0123
Fax +27 21 715 2535
Post PO Box 511, Plumstead, 7801, Cape Town, South Africa
     



CapeSoft Sales
  Web www.capesoft.com  
Email sales at capesoft dot com 
Telephone +27 87 828 0123
Fax +27 21 715 2535
Post PO Box 511, Plumstead, 7801, Cape Town, South Africa
     


 

horizontal rule

bulletMicrosoft Windows Vista Compatibility

File Explorer is largely compatible with Windows Vista. The Browser control works well with Internet Explorer 7, the Media Player supports Windows Media Player 11, and the PDF and Flash viewers us components provided by Abode (Adobe Reader and Flash Player). The exception is the HTML editor control, which does not exist under Windows Vista. You can however download a redistributable file to install this component. The redistributable is an MSI file provided by Microsoft. You download this file from  http://www.microsoft.com/downloads/details.aspx?familyid=b769a4b8-48ed-41a1-8095-5a086d1937cb&displaylang=en.

We are currently working in integrating JavaScript based HTML editors with File Explorer, which will make the HTML editor control redundant, as well as providing far more flexibility and control, with any reliance on components other than the Browser control.

horizontal rule

bulletSystem Requirements

The various File Explorer classes require the following to be installed.  While File Explorer (or parts thereof) may work on earlier versions than those indicated below, these are considered to be the minimum system requirements.

Microsoft Internet Explorer 5.5 (or later)

get internet explorer logo
Adobe Acrobat Reader 4 (or later) get Acrobat Reader icon
Windows Media Player 6.4 (or later) get Windows media player icon
Macromedia Flash Player get Macromedia flash player icon

 

horizontal rule

bulletInstalling File Explorer

 

horizontal rule

bulletAdding a File Explorer Control to your Application

Adding a File Explorer Control to your Application is this easy...
  1. Add the File Explorer Global Extension Template to your application.
Select Extension screenshot

  1. Once the Global Extension template has been added to your application, you can add other templates, call dll functions, etc etc.  You should start by compiling the example application ( click here for info ) called "feabc.app".  Look at what this example can do, and then have a look how we did it.  Use this document to lookup additional information and hopefully the pieces will start fitting together.
 

horizontal rule

bulletWhat you need to ship

DLLs required (Standalone mode compiles)
  Clarion Version DLL required  
Clarion 6.1 C6 0FEX.DLL and PWUTIL.DLL
Clarion 5.5 C55FEX.DLL and PWUTIL.DLL
     

DLLs required (Local mode compiles)
 

Clarion Version

DDLL required  
Clarion 6.1 PWUTIL.DLL
Clarion 5.5 PPWUTIL.DLL
     

 

horizontal rule

bullet Complimentary Products

CapeSoftHyperActive - HyperActive allows you to easily make any control into a url, that opens a page in your default web browser.  HyperActive also supports sending a control's url directly to your File Explorer control.  Place buttons or a list box on the same window as your File Explorer control, and use those controls to load urls into your File Explorer control.

CapeSoft NetTalk - One of NetTalk's features is full Email support from within your app.  Use File Explorer to create html documents, and NetTalk to send the html "source code" as an email, along with embedded graphics, attachments etc.  If you already own both NetTalk and File Explorer, be sure to look at the "fe_nettalk.app" app in " C55\3rd Party\Examples\File Explorer\FE and NetTalk ".  Demonstrates how to send and receive email using these two tools.

 

horizontal rule

bulletAcknowledgements

 

horizontal rule

bullet The Templates

Activate File Explorer
  Summary  
Global Extension Template
Activate CapeSoft File Explorer Features in your application
Required
What does it do?
You must add this template to your app or no other templates / objects will work.  This template sets up the File Explorer classes (dll / lib) so that other templates can implement those classes.
Prerequisites
None
How do I implement it?
1. Open your app
2. Select "Global Properties" from the "Application" menu
3. Click the "Extensions" button
4. Click the "Insert" button Select "Activate_File_Explorer" ( found under "Class File Explorer" )
5. Click the "Select" button ( you can leave all default settings, these are discussed below )
6. Click "OK"
7. Click "OK" again

What are my options?

Folder for temp files
File Explorer may need to generate temporary files while your app runs.  If it does, by default it uses the same folder as your exe.  You can change this here to be either the same folder as the exe (default), or the system temporary folder ( normally "c:\windows\temp" or similar ).

Do not generate any code
No template code will be generated at compile time, however any controls which you have populated will still appear.

Do not automatically generate map
Does not add anything to your global map at compile time.

Do not automatically call feDispose
By default, File Explorer will generate a line of code which calls the feDispose function as your application closes.  If for some reason you do not want this function to be called, you can tick this option here.  If you're not sure, don't tick this.


     


Document Viewer
  Summary  
Control Template
View Html, PDF, and SWF files
Optional
What does it do?
Populate this control onto a window in order to be able to view and / or edit HTML, PDF, or SWF files in it.
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
  1. On the window where you want to use this control, choose "Control Template..." from the "Populate" menu.
  2. Look for the section called "Class FileExplorer", then select the item in that section called "DocumentViewer".  Click on your window to populate this control.

What are my options?

"General" Tab

Object Type
This control used to be able to load more than one file type.  As the functionality evolved we had to break it up to support only one file type per control.  Choose the File Type here.

"Common" Tab

Initial Document
If you want this control to load a file as the window opens, enter the file name here.  Tick "Variable?" if you want to enter a variable instead of a filename. Provide 'All Files' Option in File Lookups
If the user uses the template's 'File Lookup' button to find files (much like the DOS File Lookup Clarion control), enabling this option will result in the lookup including 'All Files' as a supported file type.

"Browse Html" Tab - only available if you choose Html Browsing on the first tab

Auto-Resize control
Have the Viewer control automatically resize when the window resizes, selected by default.

Implement Callback Events
Callback events are handled "internally" by File Explorer, which calls a virtual method called EventCallback each time an event is fired.  If you want to enable Callback events, simply tick this option here.  (Note: Enabling Callback events will add some overhead to the object, so theoretically it will slow it down, however the speed difference should not be noticeable).

"Edit Html" Tab - only available if you choose Html Editing on the first tab

Auto-Resize control
Have the Viewer control automatically resize when the window resizes, selected by default.

Implement Callback Events
Callback events are handled "internally" by File Explorer, which calls a virtual method called EventCallback each time an event is fired.  If you want to enable Callback events, simply tick this option here.  (Note: Enabling Callback events will add some overhead to the object, so theoretically it will slow it down, however the speed difference should not be noticeable).

"PDF" Tab - only available if you choose PDF on the first tab

Show Toolbar
Decides whether or not the native PDF toolbar is displayed when you view documents.

Show Scrollbars
Decides whether or not scrollbars are displayed when you view documents.

Initial Zoom
Sets the initial zoom percentage for the object.

Preferred Acrobat Version
Because it is possible to have more than one version of Adobe Acrobat installed on your PC, and because some methods only work with Acrobat 4 ( as described in the methods and properties sections of this document ), we enable you to specify which version of Adobe Acrobat should be loaded.  If the version you choose here is not installed on the PC, any available version will be loaded.

"Flash" Tab - only available if you choose Flash on the first tab

Loop Files
Plays the file repeatedly if enabled

"Object" Tab

Object Name
Each Viewer Control instantiates a File Explorer object (from the File Explorer class), which it uses to "work".  These File Explorer objects need names.  The templates will automatically name the objects for you (typically something like ThisViewer1, ThisViewer2 etc), but you can rename the object here if you have reason to.

Var to Disable
Optionally create a variable (Byte) which can be set at runtime, which will disable this object if set to 1 (True), and enable it if set to 0 (False).  You can point all objects in your app to a single override variable allowing a single 'switch' for the user to disable all controls, or use multiple variables allowing the user 'switches' to disable specific controls or groups of controls at run-time.
 
Don't Generate Any Code
No code will be generated for this particular object at compile time.
     


Media Viewer
  Summary  
Control Template
Play sound and video files
Optional
What does it do?
Populate this control onto a window in order to be able to play sound and video files
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
  1. On the window where you want to use this control, choose "Control Template..." from the "Populate" menu.
  2. Look for the section called "Class FileExplorer", then select the item in that section called "MediaViewer".  Click on your window to populate this control.

What are my options?

"General" Tab

( no options )

"Common" Tab

( File Types )
The top two sections of this tab allow you to choose which file types this control will be allowed to play. Provide 'All Files' Option in File Lookups
If the user uses the template's 'File Lookup' button to find files (much like the DOS File Lookup Clarion control), enabling this option will result in the lookup including 'All Files' as a supported file type. Initial Document
If you want this control to load a file as the window opens, enter the file name here.  Tick "Variable?" if you want to enter a variable instead of a filename.

"Advanced" Tab

Auto-Resize control
Have the Viewer control automatically resize when the window resizes, selected by default.

Implement Callback Events
Callback events are handled "internally" by File Explorer, which calls a virtual method called EventCallback each time an event is fired.  If you want to enable Callback events, simply tick this option here.  (Note: Enabling Callback events will add some overhead to the object, so theoretically it will slow it down, however the speed difference should not be noticeable). "Other" Tab

Auto-Rewind
Sets whether the Media Files automatically rewind once they have finished playing.

Allow Zoom Changing
Sets whether the user can right-click on the media file while it is playing, and adjust the zoom properties.

Auto-Start
Sets whether the Media Files start playing automatically once loaded.

Mute Sound
Mute the sound.

Times to Play
Set the number of times a file plays before stopping.

Playback Rate
Set the control's playback rate.  100 plays files at their 'normal speed' of 100%.  Entering a value of 50 or 200 would play files at 50% or 200% of their 'normal' speed.

Zoom
SSets the zoom for the video clip.  Select one of 50%, 100% or 200%  (relative to the default playing size of the media clip); 'Full Screen', 'Fit', '1/16th Screen Size', '1/4 Screen Size' or '1/2 Screen Size'.  Note that some zoom sizes (such as 'Full Screen') will only work if the file which you load supports that resolution.  Also, note that setting the zoom to 1/2 of the screen size will not work if your FileExplorer control is not large enough to hold that size.

Start Time
By default, files start playing at the beginning (0.0).  Setting this to 10.5 would start playing the file 10 and a half seconds into the clip.  There is also a property called 'End At', and 'Duration'.  See the 'Properties' section in these docs for notes on how to implement these.

Position (Left, Right, Bottom)
When loading a file into the MediaViewer control, the ocx may resize itself to fit the size of the file it is loading (visual size).  To clean this up you can set these three sizes here.  Immediately after the file loads (and the ocx resizes itself), File Explorer will resize the ocx so that there are these units of space between the control's left, right and bottom borders, and the left, right and bottom borders of the parent window.

Auto-Resize
Set this to true if you want the control to automatically resize itself each time a new file is loaded.  The control will increase or decrease in size so that it is large enough to contain the loaded file (assuming your window is large enough!).  By default this is set to 'false'.

"UI" / "User Interface" Tab

Show Toolbar
Sets whether or not the native Media Viewer toolbar is displayed.

Enable Toolbar
Enables / disables the toolbar.  The 'Show Toolbar' option must be checked to use this.

Show Slide Bar
Sets whether or not the "Slide Bar" control appears.  This is the control which you can use to "move around" inside the playing file.

Enable Slide Bar
Enables / disables the slide bar.  The 'Show Slide Bar' option must be checked to use this.

Show Position Controls
Sets whether or not the "Position Controls" inside the toolbar are displayed.  The 'Enable Toolbar' and the 'Show Toolbar' options must be checked in order to use this.

Show Info Window
Sets whether or not the 'Additional Information Window' is displayed.  This window shows information such as 'Artists Name' and 'Copyright Information'.  By default this is not activated.

SShow Goto Bar
Sets whether or not the "Goto" drop list is displayed.  By default this is not activated.

Right Click Menu
When the user right-clicks on the control (assuming a file has been loaded into it), a popup menu appears, allowing the user to set various options.  This is a native Microsoft popup menu.  If you want to turn off this menu (so it does not appear), do that here.

"Object" Tab

Object Name
Each Viewer Control instantiates a File Explorer object (from the File Explorer class), which it uses to "work".  These File Explorer objects need names.  The templates will automatically name the objects for you (typically something like ThisViewer1, ThisViewer2 etc), but you can rename the object here if you have reason to.

Var to Disable
Optionally create a variable (Byte) which can be set at runtime, which will disable this object if set to 1 (True), and enable it if set to 0 (False).  You can point all objects in your app to a single override variable allowing a single 'switch' for the user to disable all controls, or use multiple variables allowing the user 'switches' to disable specific controls or groups of controls at run-time.
 
Don't Generate Any Code
NNo code will be generated for this particular object at compile time.
     


Background Media Load Button
  Summary  
( No longer supported - please use the CallFe_MediaAPIMethod ccode template instead )
     


Document Print Button
  Summary  
Control Template
Prints the currently loaded document
Optional
What does it do?
This template drops a button onto your window, which prints the loaded document when you click it.  You will need to have already populated a Viewer Control onto the window before you can populate this template.  It currently supports printing html pages (feBrowser, feHtmlEditor) and also PDF documents (fePDF).
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
1. On the window where you want to use this control, simply choose "Control Template..." from the "Populate" menu.

What are my options?

Don't show "Printer Options" dialog window
By default this is not checked, and you will be presented with the standard "Printer Options" screen before printing (if supported), where you can set paper size etc.  You can select this option here, which will result in the document printing "straight to the printer" instead.

Document Type
(obsolete)

NOTE: For an example, have a look at the "simple_fePDF" procedure in the feabc.app example application.

     


Flash Control Buttons
  Summary  
Control Template
Used with the Document Viewer template
Optional
What does it do?
This template populates a "Play", "Pause", and "Stop" button onto your window, to control the playing of Flash files in the Document Viewer control.
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
1. On the window where you want to use this control, simply choose "Control Template..." from the "Populate" menu.

What are my options?

There are no additional options for this template.

     


Background Color Button
  Summary  
Control Template
Used with the Document Viewer control
Optional
What does it do?
Use this template to change the background color of an html document (Html editing, not browsing), using the following steps ( assuming you have already populated a Viewer Control and have set it up to support "Html Editing" ).
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
1. On the window where you want to use this control, simply choose "Control Template..." from the "Populate" menu.

What are my options?

Reload Document After Updating
IIf you select this, the html document will be saved, and then reloaded each time you change its background color.  The reason this may be necessary is that graphics in the html page which do not contain "full" paths ( such as " subfolder1/image1.gif " ) will not display once you change the background color - an ocx refresh issue.  Turning this option on gets around that problem by effectively "reloading" the html document ( and all the graphics ) each time the background color changes.

     


Html Edit Buttons
  Summary  
Control Template
To Do
Optional
What does it do?
To Do
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
1. On the window where you want to use this control, simply choose "Control Template..." from the "Populate" menu.

What are my options?

(( none )

     


Html View Buttons
  Summary  
Control Template
To Do
Optional
What does it do?
To Do
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
1. On the window where you want to use this control, simply choose "Control Template..." from the "Populate" menu.
What are my options?

(( none )

     


Media Buttons
  Summary  
Control Template
To Do
Optional
What does it do?
To Do
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
1. On the window where you want to use this control, simply choose "Control Template..." from the "Populate" menu.
What are my options?

(( none )

     


CallFe_EditMethod
  Summary  
Control Template
To Do
Optional
What does it do?
In order to use this code template, you must have already populated one of the Viewer Controls onto your window.  Use this template ( typically behind a button ) to implement the File Explorer "Edit" method.
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
To Do
What are my options?

Parent Object
This drop list lists all the current File Explorer objects which are present in your procedure.  Select the object which should load this file.  Look in the Viewer Control's properties, on the "Class" tab to see its object name if you are unsure.

Document Type
The various "Edit Options" (see below) vary depending on the type of document you are going to load ( and hence edit ).  Select the document type here.

Edit Option
Select one of the options from the drop list, e.g. "Find", "Copy" etc.

NOTE: For an example, have a look at the "Advanced_feBrowser_CodeTemplates" procedure in the feabc.app examples.

     


CallFe_LoadMethod
  Summary  
Control Template
To Do
Optional
What does it do?
In order to use this code template, you must have already populated one of the Viewer Controls onto your window.  Use this template ( typically in the event::accepted for a button ) to load a file into an existing Viewer Control.
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
To Do
What are my options?

Parent Object
This drop list lists all the current File Explorer objects which are present in your procedure.  Select the object which should load this file.  Look in the Viewer Control's properties, on the "Class" tab to see its object name if you are unsure.

File to Load
Enter the name of the file which you want to load ( e.g. c:\MyFile.htm ).

Is Variable
If you have entered a variable in the "File Name" field above, then check this option.

Treat Unknowns As
( Obsolete )

NOTE: For an example, have a look at the "Advanced_feBrowser_CodeTemplates" procedure in the feabc.app examples.

     


CallFe_MediaAPIMethod
  Summary  
Control Template
Optional
What does it do?
The template is typically used to play MP3 files in the "background" while your app is running (you don't lose focus while the file plays).  It is typically used behind a button, but could also be used as your window opens to start playing an MP3 file "automatically" as the window opens.  The code generated by this template calls functions in the File Explorer dll, which in turn implement the MCI (Windows Media Control Interface API), so no File Explorer objects need to be instantiated, and you do NOT need to have Windows Media Player installed, as we do not use the Media Player ocx at all here, only standard Win32 API calls.
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
See the feMedia_MCIExamples procedure in the feabc.app example application that ships with File Explorer.
What are my options?

Option
This drop list lists all the options that the "MediaApi" method exposes.  Pick one.

File Name
If you select the option "Play MP3" option from the "Option" drop list, then use this field to enter the name of the MP3 file which you wish to play, e.g. c:\myfile.mp3.  If you selected "Stop MP3" from the above drop list, then simply leave this field blank.

Is A Variable
If you enter a variable in the "File Name" field above, then check this option.
 

     


CallFe_NavigateMethod
  Summary  
Control Template
To Do
Optional
What does it do?
In order to use this code template, you must have already populated one of the Viewer Controls onto your window.  Use this template ( typically behind a button ) to implement the File Explorer "Navigate" method, and navigate to a specific page within the loaded document.
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
To Do
What are my options?

Parent Object
This drop list lists all the current File Explorer objects which are present in your procedure.  Select the object which should load this file.  Look in the Viewer Control's properties, on the "Class" tab to see its object name if you are unsure.

Navigate To
Choose one of the positions to navigate to.  Note that the "Go Back 1" and "Go Forward 1" options may behave differently depending on the type of file you are navigating.  Typically these will navigate to the previous / next page or frame.

PageNumber
If you select "SpecificPage" as you "Navigate To" option, then you need to enter the page you want to navigate to in this field.

NOTE: For an example, have a look at the "Advanced_fePDF_CodeTemplates" procedure in the feabc.app example application.

     


Declare FE Object
  Summary  
Control Template
To Do
Optional
What does it do?
This very simple code template simply instantiates (in code) a new object for the File Explorer class.  When you use the "main" control templates (Viewer Controls etc) they create File Explorer objects for you, which you could then reference from your own code ( eg. ThisViewer1, ThisViewer2 ... ).  You may want to write code that references the File Explorer class in a procedure which does not already have any File Explorer templates present, in which case you could either make (instantiate / declare) the object yourself, or simply use this template.
Prerequisites
You need to have added the Active_File_Explorer global extension template to your application.
How do I implement it?
To Do
What are my options?

Object Name
Defaults to "ThisViewer1".  You can rename the object if you prefer something else.  All objects within the same procedure must have unique names.

Object Type
Select an object type from the drop list.

NOTE: For an example, have a look at the "About" procedure in the feabc.app example.

     

 

horizontal rule

bullet Dll Functions

Below are various functions that can be called from anywhere inside your application, so long as you have added the File Explorer Global Extension template.

fe_ClassVersion
fe_DebugString
fe_GetHtmlGraphicsInfo
fe_GetIEVersionInfo
fe_GetOSVersionInfo
fe_GetRegValue
fe_MCIPlay
fe_MCIStop
fe_OnlineStatus
fe_OnlineStatusConnectionName
fe_ShellExecute
fe_StartIE
feDispose


Dll Functions
 
fe_ClassVersion     ( byte Flag=0 )

MyString = fe_ClassVersion ( ) ! eg.'3.12'
MyString = fe_ClassVersion (1) ! eg. '48'
MyString = fe_ClassVersion (2) ! eg. '3.12 Beta'

  • This method returns a string, containing File Explorer version information.
  • The information it returns depends on the (optional) Flag parameter.
    • If you pass no parameter, or the value 0, the method returns the File Explorer Class Version - as seen at the top of the documentation.
    • If you pass the value 1, the method returns the incremental dll version, as explained in the File Explorer Version Numbers section of the docs.  This is useful for checking the dll version in your app, as you can use mathematical operators on the value that is returned.
    • If you pass the value 2, the method returns a descriptive string containing the version details (as shown above).
 
fe_DebugString  (string DbgMessage)
fe_DebugString ('Hello World')
  • See the section titled Using DebugView.  This sends a debug message from within your own app.  Useful extra.
 
fe_GetHtmlGraphicsInfo  (*cstring HtmlSource)
( not yet implemented )
 
fe_GetIEVersionInfo  ( byte pTranslate=false ) ,string
loc:TempString = fe_GetIEVersionInfo() ! 4.72.3612.1713
loc:TempString = fe_GetIEVersionInfo(true) ! Internet Explorer 4.01 SP2
  • Returns the currently installed version of Internet Explorer.
  • If you pass true (1) for the pTranslate parameter, then the product name will be returned (if possible) - see the examples above.
  • See the Internet Explorer Version Info section for more info.
 
fe_GetOSVersionInfo     ( ),string

loc:TempString = fe_GetOSVersionInfo()
if loc:TempString [3:4] = '95'
...
loc:BuildNumber = loc:TempString [16:19]
DisplayTextForScreen = left(loc:TempString)

  • This function returns the current Operating System.  The syntax of the string returned is as follows:OS.MajorVersion.MinorVersion.BuildNumber; e.g.  NTS.0005.0001.0000.  We always return the string in the format XXXX.XXXX.XXXX.XXXX, to make string processing easier (i.e. ReturnString[1:4], ReturnString[6:9], ReturnString[11:14], ReturnString[16:19] ).  Note that the OS component could be preceeded by blank spaces ( e.g. "  95" ) to make string processing easier, while the remaining components will be preceeded by zeros ( 0 ) if they are not 4 characters long, or will be clipped to the first four characters if they are longer.  This may sound complicated but it makes coding much easier (as illustrated above).
  • The OS component of the string returned will be one of the following:
    •   31  (Windows 3.1)
    •   95  (Windows 95)
    •   98  (Windows 98)
    •   ME  (Windows Millennium)
    •  NTW  (NT Workstation)
    •  NTS  (NT Server)
    • W2KP  (Windows 2000 Professional)
    • W2KS  (Windows 2000 Server)
    • 0000  (Four zeros indicates an unknown OS, please notify support@capesoft.com)
 
fe_GetRegValue  (string ParentFolder, string NameOfKey, string NameOfValue),string
MyString = fe_GetRegValue ('HKEY_CURRENT_USER', 'Software\Microsoft\Internet Account Manager', 'Default Mail Account' )
  • Reads a value from the Windows registry.
 
fe_MCIPlay     (string pFileName ) ,byte
fe_MCIPlay ('c:\test.mp3')
  • Every MCI (Media Control Interface) multimedia device supports a core set of MCI commands in a way that makes sense for that device. For example, the play ( MCI_PLAY, see MSDN for more info on the various Windows' API calls for this ) command causes the open device to play a file or track, no matter what kind of data the device works with. File Explorer has wrapped up a lot of this functionality into two simple functions which you can call from anywhere in your Clarion application, fe_MCIPlay and fe_MCIStop.
  • fe_MCIPlay is used to play a variety of sound or video files, including MP3's (see the example above).
 
fe_MCIStop     ( <string pFileName> ) ,byte
fe_MCIStop ()
  • Every MCI (Media Control Interface) multimedia device supports a core set of MCI commands in a way that makes sense for that device. For example, the play ( MCI_PLAY, see MSDN for more info on the various Windows' API calls for this ) command causes the open device to play a file or track, no matter what kind of data the device works with. File Explorer has wrapped up a lot of this functionality into two simple functions which you can call from anywhere in your Clarion application, fe_MCIPlay and fe_MCIStop.
  • fe_MCIStop is used to stop playing whatever file you started playing by calling the fe_MCIPlay function.
  • The omittable pFileName parameter is not currently supported, simply call this function as documented in the example above.
 
fe_OnlineStatus     ( byte pOption=0 ) ,byte
fe_OnlineStatus() ! see below
  • This function's purpose is to establish whether you are currently connected to the internet.  The behaviour / result of the function is determined by the parameter pOption.
  • If pOption is omitted (or passed as zero), this function will simply return true (1) or false (0), indicating whether you are connected or not.
    if fe_OnlineStatus() = 1
      message ('I am connected!')
    end
  • If pOption is passed as 1, 2, 3 or 4, this function returns the following:
    • pOption=1; returns true / false indicating whether the local system is in offline mode
    • pOption=2; returns true / false indicating whether the local system uses a modem to connect to the internet
    • pOption=3; returns true / false indicating whether the local system uses a local network area to connect to the internet
    • pOption=4; returns true / false indicating whether the local system uses a proxy server to connect to the internet
    if fe_OnlineStatus(4) = true
      message('You are connected through a Proxy Server')
    end

  • If the function returns a negative number it indicates that an error occurred.
 
fe_OnlineStatusConnectionName     ( byte pOption=0 ) ,string
fe_OnlineStatusConnectionName()
  • Use the fe_OnlineStatus function to establish whether you are connected to the internet.  Use this function (fe_OnlineStatusConnectionName) if you want to know the name of the current connection (assuming there is one).
 
fe_ShellExecute  ( string Parm1 )
( "Semi-private" function, called by the fe_StartIE function, wraps the ShellExecute API function )
fe_StartIE     ( string URL )
fe_StartIE ('www.CapeSoft.com')
  • This function simply uses the ShellExecute API call to launch Internet Explorer and load a webpage.
  • TIP: Have a look in feabc.app's "Comments" procedure to see how to use this function to make urls on a window "live"...
feDispose     (  )
feDispose()
  • This function is used to clean up after File Explorer, and is called by the Global Extension Template as your app closes, to make sure File Explorer does not cause any memory leaks.

 

 
     


horizontal rule  

bulletUseful References

bulletTips & FAQ

Note: The old "Tips and FAQ" section can be found in the "fe_oldFAQs.htm" document.  This section is being rewritten for the new classes.

bullet smallGeneral / Product FAQ's

1.1 When I click on the "Help" button for a template (Actions tab) I get an error saying "The topic file does not exist.  Contact your application vendor for an updated Help file"...
You have an old copy of the File Explorer help file (c55fex.hlp).  Search for all copies of this file, delete all of them, then reinstall the latest version of File Explorer.

1.2 "Link Error: Unresolved External Fe..." - how to handle these (compile) errors...
Several users who are using MultiProj to generate dlls which contain File Explorer have asked about this.  In your app's Global Extensions, go to "Activate MultiProj Support", to the "Versions" tab, "Properties", "Resources", and make sure that you've included "c55fex(l).lib" as a resource.

1.3 Compile errors?
a) See the section "Considerations if upgrading...".

b) Also, check that your app is 32 bit, that you don't have bits of an old version of FE lying around, and that your redirection file is pointing to the paths where File Explorer is installed (3rdParty/bin, 3rdParty/libsrc etc).

c) Also, there seems to be an issue whereby some C55 installations (only C55 "G" as far as I know) have a window.tpw file which does not set up the %LocalClassDefinition embed point, which our templates use.  It might be caused by running the "gold to G" patch, but this has not been confirmed.  You can download the correct version of window.tpw by clicking here.

1.4 Having multiple Viewer Controls on one window...
No issues, please upgrade to version 2.9 or later.

1.5 Since upgrading my app won't compile - I get a compile error saying "Syntax error: Illegal data type" FEOLDBROWSER"
If you get this please email us at support at capesoft dot com.

1.6 Is there a way to see if a user has a live internet connection?
Yes.  Have a look at the fe_OnlineStatus function.

1.7 I have a procedure that contains a File Explorer control.  I pass a filename to this procedure and the control loads it.  It used to work fine, but now it isn't working (loading the file)!  What's happened?
In one of the earlier versions of File Explorer we used to initialize the onjects in ThisWindow::Init (after the window opens).  Due to complications with some objects we moved this code (template generated) to after the event "after window opens".  We sent out an email to let everyone know at the time..

1.8 On one of my test machines FE runs perfectly.  On another machine the window containing the File Explorer control croaks as soon as it opens.  Any ideas?
A user reported this and it turned out to be that he had an old version of the Windows "OLEPRO32.DLL" in his testing directory.  Once he removed that dll all was fine.

1.9 I've noticed that in my c55\3rdParty\examples directory there is one folder called "FileExplorer" and another called "File Explorer"...
Please delete the one called "FileExplorer" (one word), it is from an early version of File Explorer - sorry about that..

1.10 I'm getting an error message "Entry Point Not Found / procedure entry point could not be located in the DLL PWUtil.dll"
Your app is using an old version of the file called "pwutil.dll".  Use whichever version of this dll shipped with the version of File Explorer that you used when compiling the app.

1.11 I've heard that some Developers are using File Explorer with a Panel control rather than the Clarion OLE control, what's up with that???
This FAQ is no longer a recommended FAQ, since build 3.70 Gold you must change all old OLE controls to be PANEL controls or you will get compile errors.  Click here for more information on this and for instructions on how to do this.

1.12 Is it possible to use SetPosition to move a File Explorer Viewer control?  I can't get it to work...
Yes, but because of how we built File Explorer if you ever move or resize or hide or unhide the Panel control you need to tell File Explorer that you have done so, using our Resize method, as follows:
   SetPosition (?feControl, 50, 50, 200, 250)
   ThisViewer1.Resize()

bullet smallFeBrowser FAQ's

2.1 When I try to browse a web page File Explorer does not "trigger" my "dial up networking" window!  It just says that it can't find the webpage.
Enable the Dial Up Networking features from your Global Extension options.

2.2 I need to implement Callback events for the feBrowser object, where do I start?
Have a look at the "Advanced_feBrowser_SimpleCallbacks" procedure in the feabc.app example application.

2.3 I need to know when the loading page is done.
Check the feDemo example application the Callbacks examples for the browser demonstrate the use of the DocumentComplete callback. Also see DocumentComplete in the feBrowser documentation.

2.4 Can I detect when the control is going to load a new page, then change the url so it navigates to a different page?
Yes!  How cool is that!  Have a look at the "Advanced_feBrowser_SimpleCallbacks" procedure in the feabc.app example application.  That example also shows how to simply cancel navigation to certain urls.

2.5 When I set ?feControl{prop:hide} the WebBrowser control is not hiding...
This is because unlike some of the File Explorer objects, the WebBrowser does not actually use the Clarion OLE control - we simply get window coordinates from its position and then create our own control "on top of it".  There are two methods which you can use to hide / unhide a File Explorer control, but they are not yet documented (work in progress).  See the feabc.app demo application's "Advanced_feBrowser_TwoViewers" procedure to see how to do this.

2.6 "My app is working great on hundreds of installations, except one PC, where calling the FE window GPF's the app!  Any ideas?"
A client reported this to me and all that fixed the problem was to have the client install all the latest IE critical updates from Microsoft.  The case mentioned above was an installation of IE 6.0.2800.1106, on a Win 2K box.

2.7 I'm using File Explorer to complete a form...  One of the text fields seems to be "un-settable"...
Use the feabc.app examples' "Accessing the DOM" example procedure to get a list of all the elements on the page.  If the element you're trying to set is of element type "file" in the list, it is actually an HtmlInputFileElement (the html around that field will look like this: <INPUT type="file"... ), which Microsoft seem to have made a read-only object since Internet Explorer 5.0, for "security reasons".  If anyone knows a way around this please let me know, otherwise there's not a lot that we can do here...

2.8 When I browse a webpage I get an "Internet Explorer Script Error" message popping up...  Can I stop this from happening?
Yes.  Have a look at the feBrowser::Update method, for the option called "SilentMode".

2.9 I have some html in a variable and I want the user to view it but not edit it.  Is this possible?
Absolutely.  At this stage only the feHtmlEditor object can load html directly from a variable (although we are working on the Browser).  You will need to use the feBrowser::VarToFile method to create a temporary file from the html in the variable, then use the feBrowser::Load method to load that temporary file into the File Explorer control.

2.10 Is it possible to disable the popup menu in Internet Explorer (i.e. when a user right-clicks on a page)
Yes.  There are two approaches to doing this.  The first approach involves implementing the IDocHostUIHandler interface, which we plan on doing in a future release (which would enable us to actually add items to the popup menu, but requires a fair amount of time to code).  The second approach is to simply use javascript.  The javascript approach works well, but will obviously require you to add some script to your html pages.  An example of how to do this can be found in the 3rdParty\Examples\File Explorer\Demo folder, as an html file called "no_popup_menu.htm".

2.11 In your feGoogle.app example you use File Explorer to fill in a search string and press the "Search" button on the Google site.  Can I send the search string "directly" instead?
Yes.  Use the Load method as follows:
ThisViewer.Load ('http://www.google.com/search?hl=en&ie=UTF-8&oe=UTF-8&q=%2BCapeSoft+%2BSoftware&btnG=Google+Search')

2.12 Does the feBrowser.Load method do a HTTP Post or a HTTP Get?
If you pass a string in the pPostData parameter the method will do a Post, otherwise it does a Get.

2.13 Is it possible to set which printer the WebBrowser control prints to without user intervention?
The PrintMe method prints the currently loaded document.  If you call PrintMe(false) the document goes straight to the default printer.  The only way we've found to change this behaviour (i.e. print to another printer) is by temporarily changing the default Windows printer.  This will affect other software so only do this is you really need to.  In the ThisViewer.PrintMe method, before the parent call, you would code as follows:

TempString = fe_GetRegValue ('HKEY_CURRENT_USER', 'Software\Microsoft\Windows NT\CurrentVersion\Windows', 'Device')
self.SetRegValue ('HKEY_CURRENT_USER', 'Software\Microsoft\Windows NT\CurrentVersion\Windows', 'Device', 'Fax602,winspool,FAX:')

and then after the parent call you need to restore the default printer to what is what originally, as follows:

self.SetRegValue ('HKEY_CURRENT_USER', 'Software\Microsoft\Windows NT\CurrentVersion\Windows', 'Device', TempString)

Note: This example will not work on all versions of Windows, a google search will reveal where the various versions of Windows store this setting in the Registry.

2.14 The GetInfo method can return the full html for the loaded page, using OuterHtml as the parameter I pass in.  What if I only want a certain part of the html (for instance, the '<body>' tag) ?
Get the full html using GetInfo, then use INSTRING to get what you need from that html.

2.15 I want to use FE to fill in a form on a website, but the page does not appear to have any elements.  Any ideas?
Use the feabc.app example's "feBrowser_DOM" procedure to get a list of the page's elements.  If no elements are listed, set the "frame" spinbox on that example to 1, then 2, then 3 etc to make sure there aren't frames.  Also right-click next to the fields you want to fill in, and choose "Properties" (in Internet Explorer) and check the URL.  Sometimes login screens load separate html pages "inside" the parent page - if this is the case use that address (URL).

2.16 I am getting crashes opening certain pages multiple times.
If you are having problems with pages crashing when closing and then reopening a web site then please make sure the setting on the FileExplorer Extension "Implement Delayed Close" on the "BrowseHTML" tab is on. This is now the default option, however for existing controls it should be set manually when needed.

bullet smallFeHtmlEditor FAQ's

3.1 How can I get a "new page" when using the feHtmlEditor object?
Since version 2.4b, there is a method called NewDocument.  See the notes on that method.  The Html Editing buttons (control template) also started including a "new" button from that version, but you'll need to delete and repopulate the buttons if you populated them before version 2.4b.

3.2 Is it possible to load html into the feHtmlEditor control, where the html contains images???
Absolutely, bearing in mind that html is just text, and the html contains references to images which must be located somewhere "else" (hard drive, internet etc).  Have a look at the "Advanced_feHtmlEditor_TabAndRightClick" procedure in the feabc.app example; specifically at the code under the Load from Variable button.

3.3 I need to implement Callback events for the feHtmlEditor object, where do I start?
Have a look at the "Advanced_feHtmlEditor_TabAndRightClick" procedure in the feabc.app example application.

3.4 Does the FeHtmlEditor object allow me to save the html I'm editing to a database field?  I don't want to have to write to a file and then save that file in a database.
Yes.  Have a look at the "Advanced_feHtmlEditor_EditingFromVariables" procedure in the feabc.app example application.

3.5 Does the FeHtmlEditor have a "Save As" method?
Not as such.  It does have a Save method which takes a filename as a parameter though, which in essence makes the Save method both a Save and SaveAs method, depending on how you use it.

3.6 I'm sure my HtmlEditor control used to work, but now it doesn't...
This is probably becuase you bought File Explorer in the very early days, when we still used Clarion OLE for this control.  In those days, you could call the Load method for this control, and it would (usually) create the control, even if you hadn't called the Init method first (even though you should have been calling the Init method before you call the Load method, as the templates / docs have always done).  Since version 3.0 of File Explorer, you will HAVE to call the Init method before the Load method, or the Load method will not work.. ( The same applies to the NewDocument method ).

3.7 On Win 98 (second edition) Load happens before NewDocument!
Someone reported that under Win 98 second edition (only), the following lines of code...

ThisViewer.NewDocument()
ThisViewer.Load (loc:SomeVar, ?feControl, 1)

... actually didn't work, because the NewDocument method returned before the Viewer actually had a new document loaded, and so the Load method failed because there was no new document to work with by the time Load was called!  Version 3.0 of File Explorer (when we rewrote the Editor using COM) apparently fixed this..

3.8 Is there a way to check whether a page which I load has been edited by the user?
Use the GetInfo method immediately after loading the html page to get the OuterHtml property, which you can then save to a variable.  This variable can then be used as a "snapshot" of what the original html was, and can be compared against subsequent calls to the GetInfo method (OuterHtml) to see if the html has changed since the time you opened the page / set the snapshot variable.

3.9 On one machine the FE Editor Control just doesn't work at all, it won't even display...
The components that File Explorer relies on have been unregistered. You can reregister these components by doing the following:

  1. Look for a folder named c:\Program Files\Common Files\Microsoft Shared\Triedit
    If it's there, it will have files in it named dhtmled.ocx, dtcrt.dll, and triedit.dll.
  2. Register each of the DLL and OCX files in this directory.
    Here's how to register a file:
    1. Right click on it
    2. Choose "open with..."
    3. Click "Choose program..."
    4. Click "Other"
    5. Find regsvr32.exe. It is in your Windows\System or Windows\system32 directory.
    6. Click Open.

 

bullet smallFePDF FAQ's

4.1 When I load a PDF file I get an error message saying "There was a version error trying to launch the pdf control, version error 6.x"
This was an incompatibility between FE and Internet Explorer 6.  Fixed in File Explorer version 2.5c.

4.2 I have the fePDF object on a tab.  Each time I select another tab then return to that one my document has disappeared!
This is an issue with the ole control.  In the future we will redo the PDF object from scratch (which will hopefully take care of this problem); but until then have a look in the feabc.app example app, at the "MultpileObjects_Example1" procedure which shows how to fix this until then.

4.3 The PrintMe method does not seem to work!
As documented <g>, this method only works if you set the "Use Acrobat 4" setting in the template.  See the docs.

4.4 I can't seem to view PDF files...
If you double-click on a PDF file in Windows Explorer does it open?  Can you view PDF files on your computer using Internet Explorer?  If not then the problem is with your Adobe Acrobat installation, not with File Explorer.  We can't use components that are not installed, or are installed but not working.  Try reinstalling Acrobat Viewer from adobe.com.

bullet smallFeMedia FAQ's

5.1 When I type a filename into the Entry control and press the Tab key it loads, but if I press the Enter key nothing happens...
This can be fixed by simply deleting the feMedia control from the window, closing the window, reopening the window, and repopulating the feMedia control.

5.2 How do I know when a music file has finished playing so that I can load another one from code?
Have a look at the feabc.app example --> under the FeMedia menu there is an example of how to use the EventCallback method to watch for when songs finish playing.

bullet smallNetTalk / FileExplorer FAQ's

6.1 I am using NetTalk and File Explorer to write an email program.  I'm having a problem getting something to work...
Have a look for the demo app called "fenetalk.app" that came with File Explorer.  It's a simple app showing the basics of getting File Explorer and NetTalk to "work together", demonstrating how to use NetTalk to send and receive emails, and File Explorer to view and edit the emails.

bullet smallThe undocumented feStorage Class FAQ's

7.1 I'm getting an error saying "Error opening new file; 5 - Access Denied" when using the Retrieve method over and over...
Upgrade to File Explorer 3.0 or later, and change your code as follows.  Although this class is no longer documented / supported, if you get stuck send me an email (support at capesoft dot com).

ThisViewer1.Unload()  ! new method in FE 3.0

! here you would typically get the feBlobStorage record

if FEB:ParentID = feSF:RecordID  ! check range
  MyfeStorage1.Retrieve (FEB:BlobHolder, true, 1)
  ! etc. etc...

horizontal rule

bullet Examples

When you install File Explorer, several demo applications are installed in your C55\3rdParty\Examples\File Explorer folder.  These examples are outlined below.

bullet small"Demo"  - abc, feabc.app
This is the main example application.  It is our "bells and whistles" example, which shows off most of File Explorer's objects and features.

bullet small"Demo Legacy"  - legacy, feleg.app
This is similar to the feabc.app example, but is written using the legacy templates (not ABC), and doesn't show off nearly as many features as the feabc.app example.

bullet small"Google"  - abc, fegoogle.app
This example shows how to automate a Google search from within a Clarion app.  You enter a search string and click a button, and File Explorer will load google.com, enter the search string and trigger the search.  Quite cool.  Can easily be adapted for downloading bank statements, forex rates etc etc etc...
( The feGoogle.app example has been moved into the feabc.app. Please use that app instead. See the feBrowser_Google procedure in feabc.app. )

bullet small"Full Screen"  - abc, fullscrn.app
This example shows how to play a media file (movie) using the entire screen to show the movie.

bullet small"NetTalk"  - abc, fenetalk.app
This example shows the overlap between File Explorer and another CapeSoft product, called NetTalk (this app will not compile unless you own CapeSoft NetTalk, available here).

bullet small"Office Inside"  - abc, FeOi.app
This app demonstrates how to integrate File Explorer with CapeSoft Office Inside (this app will not compile unless you own Office Inside, available here). 

bullet small"The Storage Example"  - abc, festore.app
Not really documented or supported.  Might revisit this app later.  Several Developers are using File Explorer in this way, which is why we wrote this app.  For more info click here.

bullet small"Hand Coded"  - abc, feWebBrwsr.prj
An example showing how to implement File Explorer in a hand-coded (no templates) project.  Absolute basic functionality.

bullet small"Hand Coded 2"  - abc, feWebBrwsr2.prj
Similar to the feWebBrwsr.prj example, but here we've added a status bar.

bullet small"Benchmark"  - abc, fetest.app
This example is used by us when developing the product to test stability and performance.  Here for your interest more than anything else.


horizontal rule

bulletThe Storage File Example

 SECTION NEEDS TO BE REDONE

Many users have inquired about using the File Explorer controls to play media files "securely", without having to ship the actual media files with there final product.  The following example steps you through an example which does just this.  It uses a TopSpeed file to store media files (any format) in a blob field, using a standard clarion File-Browsing List Box control to maintain the file, and a new File Explorer control (button) to select media files and "attach" them to the currently selected record in the List control (one media file per record which you create in the TopSpeed file).  All of that can be done in minutes, without any hand-coding.  Then you create a button and embed 3 lines of code into it - this will load the media file "attached" to the currently selected record (in the List control) into the File Explorer MediaViewer control.

This works by creating a temporary file ("feTempFile") from the contents of the selected record's blob field (ie. the stored media file), and loading that temporary file into the File Explorer Viewer control.  The new File Explorer button which we use to select media files to "attach" to records in the TopSpeed file simply "imports" any file which you select into the selected record's blob field.  The result is an app where you can ship one TopSpeed file instead of several media files.  The single TopSpeed file can contain any number of media files, using any number of formats (AVI's and MP3's in a single file!).  You can then control access to the media files, preventing the user from simply viewing them using another program.  The only thing you need to control is the temporary file which is created, called "feTempFile".  You'll need to delete this file when your app closes.  Note that there is no file extension, so it is not immediately obvious to the end user what this file actually is.  Here we go...

TIP 1:  By the way, this example can be found in your C55\3rdParty\examples\FileExplorer\storage folder - called festore.app

TIP 2:  This code works well if the media files you are working with are of a reasonably small size (up to a few megabytes).  The code has been tested (Pentium 2, 128 MB RAM) with a 68 MB MPG file; importing the file in 13 minutes, and created the temporary file which loaded in 80 seconds.

This example evolved as several users needed it.  Although functional, it is not well documented and was added to the public release more for interest than anything else...  Please contact support@capesoft.com if you need if you need assistance.

 

horizontal rule

bulletConsiderations if upgrading from a version earlier than 3.70 Gold

Version 2.9 Beta of File Explorer saw the first changes that made the product non backward-compatible.  After two years of evolution, we reached a point where our initial design was severely restricting future design, so we decided to clean things up and restructure File Explorer where necessary.  Below is a list of what we've changed, the compile errors you will see, and explanations as to why we changed certain things and what you need to do to get your code to work.  Version 3.70 Gold was the first Gold build in almost two years, and should see the end of changes that cause backward-compatibility issues.  Below is an outline of what you need to change in your applications if upgrading from an old version of File Explorer (prior to 3.70 Gold), and a list of compile errors you could get and how to correct the code that causes these errors.

We followed the instructions below to convert our feabc.app example app, which contains over 40 windows which host FileExplorer controls, it took 7 minutes to make all the necessary changes and get it to compile...

bullet smallWhat you need to do to your existing apps that use a version of FE earlier than 2.9 Beta

  1. Open each window (one by one) which contains a File Explorer Viewer control.
  2. File Explorer would have populated an entry control on this window ( see "A" below )...
  3. ...which will be "Use"-ing a variable called "fepath" ( see "B" below )...
  4. You need to change this as follows:  If you only have one Viewer control on a window, change it from "fePath" to "?fePath1".  If you have more than one Viewer control on a window, change the controls as follows; "?fePath1", "?fePath2", "?fePath3" etc.  It doesn't matter if ThisViewer1 has ?fePath4 (although I'd recommend matching the use variables to the Object names to make the code cleaner), so long as each entry control has a unique use variable.

Entry properties screenshot

bullet smallCompile Errors and how to fix them:

Compile Error 1

Error:
Syntax error: Unknown identifier: FEPATH
Syntax error: Unknown identifier: FE_APPPATH
Syntax error: Unknown identifier: FE_LASTPATH
Syntax error: Unknown identifier: FE_CURRENTPATH
Syntax error: Unknown identifier: FE_CURRENTCONTROL
Syntax error: Unknown identifier: FEHEIGHT1
Syntax error: Unknown identifier: FEWIDTH1
Syntax error: Unknown identifier: FEHTML1BUSYRECOVERING
Syntax error: Unknown identifier: FEPRIORLASTEVENT

Cause:
You have written code that makes reference to one of the above variables (Fe_AppPath, Fe_LastPath, Fe_CurrentPath or FePath ) which no longer exist.  Or, in the case of the FEPATH error, you need to run through the section above titled "What you need to do to your existing apps..."

Fix:
You need to replace any code where you refer to these variables with the new properties, as shown below:

Replace fe_AppPath with ThisViewer.fe_AppPath
Replace fe_LastPath with ThisViewer.fe_LastPath
Replace fe_CurrentPath with ThisViewer.fe_Path
Replace fePath with ThisViewer.fe_Path
Replace fe_CurrentControl with ThisViewer.fe_CurrentControl
Replace feHeight1 with ThisViewer.fe_Height
Replace feWidth1 with ThisViewer.fe_Width
feHtml1BusyRecovering (global variable) is no longer used, simply delete your code, it is no longer necessary.
fePriorLastEvent (global variable) is no longer used, simply delete your code, it is no longer necessary.

Note:  If your object is not called "ThisViewer" you will need to use its name instead.  You can find out what an object is called by clicking on the "Object" tab, from the "Actions" tab or your File Explorer control.  By default objects are named "ThisViewer1", "ThisViewer2" etc.

Compile Error 2

Error:
ASSERT: Procedure "(procedure name)" is using an OLE control, not a panel

Cause:
File Explorer started off using the Clarion OLE control.  Due to stability issues, we eventually moved all code in File Explorer to use the Plugware OLE container code, so File Explorer no longer uses Clarion's OLE control at all.  Any File Explorer controls that you added to your app prior to version 2.9 would have populated a Clarion OLE control onto your window, which now needs to be changed to a PANEL control.

Fix:
First, please backup your app.  Once you have done that, simply go to each procedure that contains an old File Explorer control (which still uses an OLE control, not a PANEL - the compile errors above will list which procedures contain the OLE controls), right-click on a procedure, choose Properties, then click on the ellipsis button immediately to the right of the Window button, this will let you edit the window definition for that procedure.  Look for the code that looks like this:

OLE,AT(114,101,299,135),USE(?feControl),#SEQ(17),#ORIG(?feControl)
END

This is the OLE control that needs to be changed to a PANEL control.  Simply delete the two lines of code (above), and replace them with this single line of code (note, all you're doing is changing OLE to PANEL, and deleting END) :

PANEL,AT(114,101,299,135),USE(?feControl),#SEQ(17),#ORIG(?feControl)

That's it! 

 

bullet smallOther changes you need to know about:

 

horizontal rule

bulletInternet Explorer Version Info

( This information was found at http://support.microsoft.com/default.aspx?scid=kb;en-us;164539 )

4.40.308 Internet Explorer 1.0 (Plus!)
4.40.520 Internet Explorer 2.0
4.70.1155 Internet Explorer 3.0
4.70.1158 Internet Explorer 3.0 (OSR2)
4.70.1215 Internet Explorer 3.01
4.70.1300 Internet Explorer 3.02 and 3.02a
4.71.544 Internet Explorer 4.0 Platform Preview 1.0 (PP1)
4.71.1008.3 Internet Explorer 4.0 Platform Preview 2.0 (PP2)
4.71.1712.6 Internet Explorer 4.0
4.72.2106.8 Internet Explorer 4.01
4.72.3110.8 Internet Explorer 4.01 Service Pack 1 (SP1)
4.72.3612.1713 Internet Explorer 4.01 Service Pack 2 (SP2)
5.00.0518.10 Internet Explorer 5 Developer Preview (Beta 1)
5.00.0910.1309 Internet Explorer 5 Beta (Beta 2)
5.00.2014.0216 Internet Explorer 5
5.00.2314.1003 Internet Explorer 5 (Office 2000)
5.00.2614.3500 Internet Explorer 5 (Windows 98 Second Edition)
5.00.2516.1900 Internet Explorer 5.01 (Windows 2000 Beta 3, build 5.00.2031)
5.00.2919.800 Internet Explorer 5.01 (Windows 2000 RC1, build 5.00.2072)
5.00.2919.3800 Internet Explorer 5.01 (Windows 2000 RC2, build 5.00.2128)
5.00.2919.6307 Internet Explorer 5.01 (Also included with Office 2000 SR-1, but not installed by default)
5.00.2920.0000 Internet Explorer 5.01 (Windows 2000, build 5.00.2195)
5.00.3103.1000 Internet Explorer 5.01 SP1 (Windows 2000)
5.00.3105.0106 Internet Explorer 5.01 SP1 (Windows 95/98 and Windows NT 4.0)
5.00.3314.2101 Internet Explorer 5.01 SP2 (Windows 95/98 and Windows NT 4.0)
5.00.3315.1000 Internet Explorer 5.01 SP2 (Windows 2000)
5.50.3825.1300 Internet Explorer 5.5 Developer Preview (Beta)
5.50.4030.2400 Internet Explorer 5.5 & Internet Tools Beta
5.50.4134.0100 Windows Me (4.90.3000)
5.50.4134.0600 Internet Explorer 5.5
5.50.4308.2900 Internet Explorer 5.5 Advanced Security Privacy Beta
5.50.4522.1800 Internet Explorer 5.5 Service Pack 1
5.50.4807.2300 Internet Explorer 5.5 Service Pack 2
6.00.2462.0000 Internet Explorer 6 Public Preview (Beta)
6.00.2479.0006 Internet Explorer 6 Public Preview (Beta) Refresh
6.00.2600.0000 Internet Explorer 6 (Windows XP)
6.00.2800.1106 Internet Explorer 6 Service Pack 1 (Windows XP SP1)
6.00.3663.0000 Internet Explorer 6 for Microsoft Windows Server 2003 RC1
6.00.3718.0000 Internet Explorer 6 for Windows Server 2003 RC2
6.00.3790.0000 Internet Explorer 6 for Windows Server 2003 (released)

 

horizontal rule

bulletHeader / Footer Strings for IE Page Setup

 If you open Internet Explorer and click on "Page Setup" ("File" menu), then click on the question mark on the "Page Setup" dialog window's title bar, then click in the "Header" field, you should see a list of possible settings. 

This list in IE 5.5 contains the following:

&w Window Title
&u Page address (URL)
&d Date in short format
&D Date in long format
&t Time (as per Control Panel)
&T Time in 24-hour format
&p Current page number
&P Total number of pages
&& A single ampersand (&)
&b Text to follow is centered
&b&b Text after the second "&b" is right-justified

 

horizontal rule

bulletUsing DebugView

"DebugView" by SysInternals is an application that lets you monitor debug output on your local system.  I use DebugView when developing because it gives an accurate picture as to what's happening in your code (as opposed to "messages" or "stops").  If you start your application (any application into which File Explorer is compiled) with the following command line parameters, debug output will be generated accordingly, which you can then monitor using DebugView.

MyApp.exe same as MyApp.exe /fedebugoff
MyApp.exe /fedebugoff almost no debug output
MyApp.exe /fedebugmin minimum amount of debug output
MyApp.exe /fedebugmax maximum amount of debug output

TIP: I'd recommend using debug output only when you're testing something.  It can be quite annoying for other programmers to work on a system where there are a dozen different apps generating debug output at the same time!  To make life easier, all File Explorer debug messages are prefixed with "FE", as shown below.  You can set DebugView to ignore all messages that do not contain "FE".  You will also take a performance hit when running an app with debugging turned on.

Debug view screenshot

 

horizontal rule

bullet File Explorer and The Future (The "ToDo" List)

Top of the list

Middle of the list

Bottom of the list

 

horizontal rule

bulletFile Explorer Version Numbers

Please ensure that you are using the latest release of File Explorer and all the current DLLs, including pwutil.dll. The bulk of all support requests regarding FE are a result of old DLLs, LIBs or source files.

pwutil.dll - version 2.5.0.0 (This file must be shipped with all FE application. It is backward compatible, so it is advised that you always ship the most recent release.)

 

All other files (binaries etc.) will reflect the current version number in the History section.

horizontal rule

bulletVersion History

See the Version History document for the changes made in each release.

 

[end of document]