Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

1001 Things You Wanted To Know About Visual FoxPro phần 10 docx
PREMIUM
Số trang
97
Kích thước
1.3 MB
Định dạng
PDF
Lượt xem
1432

1001 Things You Wanted To Know About Visual FoxPro phần 10 docx

Nội dung xem thử

Mô tả chi tiết

462 1001 Things You Always Wanted to Know About Visual FoxPro

executed directly. It can be called from another VFP executable that is already running within

the run time environment.

The Win32 executable / COM server (.exe) build option performs all the actions that are

done for the application executable. Then the app file goes through a metamorphic process that

adds the needed boot code to make it a Windows executable that calls the needed run- time

DLL files, adds the icon and the .exe version information. The executable generated will

require the VFP run-time files (Vfp6r.dll and Vfp6rXXX.dll (XXX denotes the specific

language version)) to run outside of the VFP development environment. A Type Library file is

generated if there are OLE Public classes in the project.

The single-threaded COM server (.DLL) build option and the multi-threaded COM server

(.DLL) options build full COM objects and the needed Type Library (.TLB) files after going

through the rebuild process. The Type Library file is generated in the same directory as the

DLL. These projects also need to have classes marked as OLE Public. The multi-threaded DLL

requires a special run-time file called VFP6T.DLL. All servers that are built are added to the

Server page of the Project Information dialog.

How to use the project options to your advantage

The Project Information dialog presents developers with key details about the project and the

files that are part of the project.

The first page is the Project tab. This form allows the developer to enter in their address

information. This information is stored in generated code for menus. Other than that, it is only

documentation for the project. Back in the 2.x days, the project information was also stored in

the generated screen code. More importantly, this page gives developers access to key settings

for the build process.

How do you use a project’s Debug Info setting?

The Debug Info setting is critical in two situations. The first is when debugging an application

and tracing through code. If the code was not compiled with the Debug Info on (checked), then

you get a "Source is out of date" message in the Trace Window. This can be truly aggravating

when you are ten levels deep in the call stack and you hit a program that was compiled without

the debug code. We hate when that happens!

It is critical to note that a file is not compiled unless the Recompile All is checked when

doing the build or the file was modified since the last build. Checking on the Debug Code

option does not guarantee that all files will have source compiled in. The only time is when the

Rebuild All is marked. The second situation that is critical is when you are building the final

shipping version of the application.

There is a significant difference in executable size between the Debug Code being

checked on and off. We recommend checking this option off when building the code to be

shipped with the release. The size could be more than 10 times bigger with code included. We

had one case of an .exe being 50 megabytes with source code included for debugging and just

over 4 megabytes without it. Sending code with Debug Code set on ships the source code in

the executable. This is how the Trace Window can display each line being executed. Note that

the customer or another developer will have access to this code if it is shipped to the

production arena.

Chapter 14: Project Management 463

How do you use a project’s Encrypted setting?

This brings us to the Encrypted setting. Don’t you just love how this all flows together? The

Encrypted setting causes the generated executable to be encrypted so other developers cannot

get access to the source code inside of the executable. It is pretty useless in the author’s mind

since there are third party tools that will decompile an executable. Naturally, these third party

tools allow you to stamp a key so another copy of the product cannot decompile it. This is

rather like blackmailing you to buy the product isn’t it? On the other hand, the tool has some

excellent use when someone loses the source code or the original developer skips town so it

might be worth buying. Encrypted executables also cannot be compressed when zipped up

based on the encryption scheme used internally. This author would love if Microsoft would

allow the developer to enter a key when encrypting the executable to circumvent third-party

tools and truly make it a valuable setting.

The Last Built text box displays the date and time the last build was completed – a useful

reminder of when you last compiled the application. The projecthook setting is tackled in

Chapter 15, Project Objects and ProjectHooks.

How do you set a custom icon for an executable?

This is a two-step process. The first is to assign the _screen.Icon property to the icon file in

the main start up program. The second is to use the Project Information dialog to attach the

icon to the project. What happens during the project build with this icon? Well, it is physically

stored into the executable. This gives Windows the ability to display your custom application

icon instead of the cute fox icon. We say the cute icon, since we actually had a customer once

note that they did not want us to replace the "cute" foxhead with some other icon for their

application <g>.

The icon file (.ico) can store multiple copies of the icon image. Each

of these images is a different resolution. It is important to edit both

images since Windows uses a 16 x 16 pixel image for application

windows and the 32 x 32 pixel image for displaying a larger view in applications

like Windows Explorer.

We recommend getting one of the icon editing tools so you can either create your own

icons or modify icons that you purchase. It is very important to use an icon editor that can edit

both images. We use the Microsoft Imagedit.exe applet that shipped with VFP 5.0. When an

icon is opened you are typically asked which of the images you want to edit. You should be

able to select either the EGA/VGA 16 Color image (32x32) or the Small Icon 16 Color image

(16x16). If one of the images is missing from the icon file, we do a "select all" on the image

that does exist, and copy it to the clipboard. We open up the other image in the icon file and

paste the clipboard contents to the image editor. The second image will either be expanded or

shrunk. We like the automatic adjustment option that ImageEdit provides when expanding or

shrinking the graphic to fit the new size.

The proper use of icons can polish up an application and give it a more professional

appearance. One of the easiest ways to build up a good collection of icons is to purchase

several third-party image/icon CD-ROMs. There is plenty of useless icons on these CDs, but

464 1001 Things You Always Wanted to Know About Visual FoxPro

one good icon is easily worth the price of the entire CD when you consider how much time

you can spend creating your own.

How do you manage files in the Project Manager?

The Project Information Files tab allows you to sort via the ListView that contains the list of

files. This means that developers can sort the list of files by the file type, the file name, last

modified, whether it is included and the code page. Double-clicking on the "headers" will

cause the column to be sorted. This dialog also allows you to toggle if the file is included or

excluded from the application or executable builds. The included files show an "X" and the

excluded files display an empty box. If the box is gray filled, that indicates the main file for the

project. Files that maintain a code page can also be updated to the native code page. This is

important for developers building applications that run outside of their native language and/or

code pages.

How do you manage Servers from the Project Manager?

The Project Information Servers tab lists the classes in the project, both in Visual Class

Libraries and program files (via DEFINE CLASS code) that are marked OLEPublic. Each class

that is available as a server is listed in the list box on the left side of the page. As you scroll

down the list, the Class Name, Class Library, description, help file, and help context id change

for that specific class. Settings can be made to indicate if the Automation Server is single￾threaded, multi-threaded, or cannot be created at all through the Instancing option.

This is an important setting from a performance perspective. Single-threaded servers need

an instance for each and every reference to the class. Only one process can be called at a time

to that instance. This was a problem prior to Service Pack 3 when two processes needed to

access separate methods in a server as only one could be handled at a time. If this is a

performance issue, the multi-threaded server can step in and handle both calls with one

instance. Type Library information is also displayed on this dialog.

How do you set the project’s object description?

Creating technical documentation has always been a low priority for most developers we

know. It is not one of the fun things we do in our job. Each file that is tracked in the project has

an optional description that can be filled in. This particular feature of the Project Manager is

very useful in a team environment so all developers can understand what the file accomplishes

or which features it supports. It can also be helpful in one-person shops to remind the

developer what the purpose of the file is.

The description can be accessed via the Project Manager’s shortcut menu (right-click

menu) or the main menu Project|Edit Description... option. This option displays the Edit

Description dialog (see Figure 14.1). Enter in the text that describes the file and save it by

pressing the OK button. Naturally, pressing the Cancel button will revert the changes you just

typed in.

Chapter 14: Project Management 465

Figure 14.1 Using the file description to describe the file’s purpose in the application

can help you and your teammates understand what it is for without opening the file up.

Several files retain the description inside the file source code metadata, others are saved in

the project’s metadata. The descriptions entered in the Project Manager are retained in the class

definitions (not the same for class libraries), databases, contained tables and the view

definitions. If the descriptions are added/changed via the Class, Database, Table, or View

Designer, they are stored in the source metadata and displayed in the Project Manager. The rest

of the descriptions are stored directly in the project file. This is important to know if you ever

have a project file corrupted. (Yes it does happen, although less frequently than in the 2.x

days.) If you do not keep solid backups of the project files and have one corrupted, you will

lose the descriptions during the rebuild of a new project.

How to set the executable version information

The Visual FoxPro 6.0 Project Manager stores the latest version information that is set up

through the Build Dialog (see Figure 14.2). This information is used by the build process and

stored in the resulting executable (.EXE). It should be noted that it is not stored in the

application (.APP) file if that is the type of executable you generate.

466 1001 Things You Always Wanted to Know About Visual FoxPro

Figure 14.2 Using the Build Options dialog to get the Version dialog, VFP developers

can store information directly into the resulting executable. Some of this information

can be seen in tools like Windows Explorer.

This version information can be extracted via the new native function AFILEVERSION. If for

some reason you are using VFP 5.0, you will need to use the GetFileVersion function that is

available in FoxTools.fll. There are some differences in the calling of the functions and the

information in the array of each function, so if you use VFP 5.0, consult the Help file.

In VFP 6, AFILEVERSION function returns a zero if the file specified in the second

parameter is not found. If the file is found, the array is created with 15 elements. Table 14.1

contains the information that would be seen by executing a LIST MEMO in the Command

Window:

?AGETFILEVERSION(laEXEDetails, "Sample01.exe")

Chapter 14: Project Management 467

Table 14.1 – Sample output from AGETFILEVERSION of the Sample01.exe

Array

Position

Contents Sample Values

1 Comment "Developed for 1001 Things You Wanted to Know About

VFP"

2 Company Name "Kirtland Associates"

3 File Description "Cool Application"

4 File Version "1.0.1"

5 Internal Name "sample01"

6 Legal Copyright "January 2000"

7 Legal Trademark "Sample Trademark"

8 Original File Name "sample01.exe"

9 Private Build ""

10 Product Name "Sample.exe"

11 Product Version "1.0.1"

12 Special Build ""

13 OLE Self Registration ""

14 Language "English (United States)"

15 Translation Code "040904e4"

The AFILEVERSION function can be used to determine the version details in more than just

VFP executables; it can also be used to get version specifics on other Windows executables.

Therefore if you run the following code, you will get 9.0.2719 echoed to the screen for the

initial version of Excel 2000:

AGETFILEVERSION(laEXEDetails, ;

"C:\Program Files\Microsoft Office\Office\EXCEL.EXE")

?laExeDetails[4]

So what is the use of this feature? We use it to display the version information in both our

standard splash screen and on the application’s About window.

What are the advantages of including the Config.fpw in

the project?

The Config.fpw file allows Visual FoxPro developers control over the VFP environment

settings. Adding the file to the project allows for easy editing of the settings for the

application. Marking it included in the project will incorporate the configuration into the

executable. VFP automatically uses this file to make any configuration changes as the

application is starting. If the file is not marked as included in the project, it needs to be

distributed separately with the executable.

This is a sample Config.fpw file that can be included in the project. The settings inside

this file would cause VFP to start up without the main screen being displayed and the FoxUser

file in the system directory under the application root directory to be used as the apps resource

file:

468 1001 Things You Always Wanted to Know About Visual FoxPro

* Application starts with VFP Frame off

screen = off

resource = system\foxuser.dbf

Including the file in the executable will eliminate the need for the install process having to

load a configuration file and then assigning it through the usual mechanisms. In the past we

might have included to a –c parameter on the command line within a shortcut for the

application. If the user double-clicked on the executable in Windows Explorer, the settings

were never made because the configuration file was never loaded. The other mechanism is the

FOXPROWCFG DOS environment variable, but this forces the support staff or the user to

make sure this is set up on each machine that the executable is run on. The other disadvantage

of using the DOS environment setting is that it is the default configuration file for all loaded

VFP applications. We like to have more control for each application, thus assigning a specific

configuration file for each released system.

How can we include non-VFP objects in the project?

VFP developers are familiar with the different file types that are tracked in a standard VFP

project like forms, reports, labels, visual class libraries, programs, APIs, applications, menus,

text files, databases, and free tables. Did you know that you could include files from your

favorite word processor, spreadsheet, graphics package or other application?

There are several non-VFP files we like to include in the project manager for all

applications we develop. If you have the Project Manager configured to open the file when

double-clicked, it works just like Windows Explorer and will fire up the associated program

and open the file. We like to include these non-VFP file types in the Other Files category in the

Project Manager since it shows the file extension. One of the issues with this technique is the

default file type for this category is a bitmap (.bmp;.msk) and the rest of the file types in the

list are graphical. You need to select the "All Files" option and pick the file you want added to

the project.

Chapter 14: Project Management 469

Figure 14.3 Project Manager with non-VFP files included in the project

There are a couple of noteworthy items to mention with this functionality. If you do not

exclude these files, they will be built into the executable generated during the build process.

They are included by default when you add them in. This can be beneficial if you want them

shipped with the end product and do not want to send them as a separate file. The negative side

of the coin is that these files will add the full byte size of the file to your executable. These

bloated files can lead to slower loading executables and the need for more memory to run the

application.

The first of the files we like to have as part of the project is a ReadMe.txt file. This file

includes any details that the development staff needs to include for the users to read after they

load the latest revision of the application. This file has a list of new features, bug fixes, and

outstanding issues for the version we are releasing. This gives the user base a starting point to

understand what they need to review and the development staff a way to track a history of what

was worked on for the release and what still needs to be completed before we ship.

The second type of file we typically include are word processing files. There are several

documents used for project management and development within the life cycle of a project.

These include proposals, functional specifications, change control orders, priority listings and

OLE Automation documents. Adding these files to a project can save the time required to find

the directory within the word processor each time one of these documents needs to be

470 1001 Things You Always Wanted to Know About Visual FoxPro

modified. It would also be prudent to mention that these files should be closely managed

outside of the project as well, since they are important to the success of the project.

Help files can be included whether they are the older HLP format or the newer compiled

HTML format (CHM). This gives the project developers access to the generated Help file

without firing up the application.

HTML files can be modified using the native VFP editor, but there are better tools that

modify this file type. If you have the HTM extension assigned to a tool like FrontPage or Hot

Metal, or defaulting to a browser like Netscape Navigator or Internet Explorer, these files will

be opened outside of Visual FoxPro.

Even though project files are native to Visual FoxPro, they can be added to a project as an

Other File. Sounds kind of strange, doesn’t it? Double-clicking on this file will open the

project in its own instance of the Project Manager. If the architecture you have selected has one

main executable and several applications that are run from the main executable you can set up

the controlling project and have the "app" projects available from within it.

There is virtually no limit to the number of external files that are part of the project file,

only the 2 gigabyte file size limit on the project metadata table. The only requirement is that

the file added must have a registered file extension that is associated with a program. We

encourage you to leverage this functionality when you find it appropriate.

How to reduce screen real estate taken by the Project

Manager

Docking functionality is usually associated with toolbars. Many new VFP developers have not

been introduced to the docking capability of the VFP Project Manager because they see it as a

form on the desktop. The Project Manager can be a full size form or can be shrunk to a

toolbar-like existence. This can be toggled by clicking on the arrow command button to the

right of the tabs.

The Project Manager gets docked only when it is dragged to the top toolbar/menu area of

the development environment or by double-clicking the Project Manager TitleBar (also known

as the form Caption). The only way to close a docked project is by using the File|Close menu

option. You can also undock the project to close it via the close button.

Tải ngay đi em, còn do dự, trời tối mất!