当前位置:文档之家› C++Builder文件,目录和驱动器

C++Builder文件,目录和驱动器

C++Builder文件,目录和驱动器
C++Builder文件,目录和驱动器

第6章文件、目录和驱动器

通常,文件、目录和驱动器的管理是由操作系统来完成的。但是,对文件、目录和驱动器的一些具体操作却要通过编程来实现。在C ++B u i l d e r集成开发环境中编程可以方便地实现对文件、目录和驱动器的操作。

在界面方面,C ++B u i l d e r提供了一些标准的文件对话框。对于具体的文件、目录和驱动器的操作,可以通过C ++B u i l d e r提供的丰富的函数来实现。

下面首先介绍标准的文件对话框,然后按字母顺序介绍了文件操作、目录操作、驱动器操作和文件名操作方面常用的函数,最后还有一些例程、方法和技巧。在例程中,对 C ++B u i l d e r 提供的与文件、目录和驱动器有关的组件也进行了说明。

6.1 文件

6.1.1 C标准文件类型

文件的分类有多种方式,比如:缓冲文件和非缓冲文件;二进制文件和文本文件等。这里所说的C标准文件是缓冲文件,可以支持两种文件类型:二进制文件和文本文件。

C标准文件类型是在头文件s t d i o.h中声明了的。

标准文件类型是通过文件指针来进行存取的,它是文件类型的变量并用如下方法声明:FILE* fp;

这个文件指针,指向为每个使用的文件在内存中开辟的一个区域,用来存放文件的有关信息(如文件名称、文件的状态以及文件的当前位置等参数)。这些信息是保存在一个结构类型的变量中。该结构体的类型是由系统定义的,取名为F I L E,程序中只需要声明指向该结构的指针即可通过它访问相应的文件。

具体对C标准文件类型(不能称其为类,只能称为类型)的使用不外乎下面一些内容:

1. 文件的打开与关闭

文件打开函数:

FILE *fopen(const char *filename, const char *mode);

FILE *_wfopen(const wchar_t *filename, const wchar_t *mode);

// 重新FILE *freopen(const char *filename, const char *mode, FILE *stream);

打开文件

FILE *_wfreopen(const wchar_t *filename, const wchar_t *mode, FILE *stream);

文件关闭函数:

int fclose(FILE *stream);

2. 文件的读写

二进制文件的读写函数:

size_t fread(void *ptr, size_t size, size_t n, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);

文本文件的读写函数:

char *fgets(char *s, int n, FILE *stream);

wchar_t *fgetws(wchar_t *s, int n, FILE *stream); // Unicode version

int fputs(const char *s, FILE *stream);

int fputws(const wchar_t *s, FILE *stream);

int getc(FILE *stream);

wint_t getwc(FILE *stream);

int fputc(int c, FILE *stream);

wint_t fputwc(wint_t c, FILE *stream);

3. 文件的定位

int fseek(FILE *stream, long offset, int whence);

long int ftell(FILE *stream);

int fsetpos(FILE *stream, const fpos_t *pos);

int fgetpos(FILE *stream, fpos_t *pos);

4. 文件的状态检查

int feof(FILE *stream);// 检查文件是否结束

int ferror(FILE *stream);// 文件操作是否出错

void clearerr(FILE *stream);// 清除文件的所有状态

以上C标准文件的操作函数,对于C ++程序员来说,不应该有问题。对于它们的使用方法,用户可以参考C ++B u i l d e r的联机帮助。

6.1.2 C++流式文件类

为了使文件的使用更符合C ++类的概念,C ++中将对文件的操作封装在流式系列类中。在这个流式系列类中,不光包括文件的操作类,还包括对其他输入、输出设备进行读写的类,比如

c i n、c o u t等。

C ++流式文件类主要包括:f s t r e a m、i f s t r e a m和o f s t r e a m。分别对应文件的读写、读和写。并支持文本和二进制文件。

对C ++流式类的使用读者可以参考标准C ++语言,或C ++B u i l d e r的联机帮助。

6.1.3 非缓冲文件

以上介绍的文件类型都是用于缓冲文件系统,即高级磁盘输入输出系统,系统为文件分配文件指针,并通过指针访问该文件。而非缓冲文件系统则提供了低级磁盘输入输出通道,它没有任何文件指针,使用非缓冲文件系统时,不是靠文件指针访问文件,而是用一个整数代表一个文件,这个整数称为文件句柄(H F I L E)。

对于非缓冲文件的使用读者可以参考Windows API帮助,或C ++B u i l d e r的联机帮助。这里需要说明的是,C ++B u i l d e r和Wi n d o w s都提供了对非缓冲文件的操作,在使用时,一定要保持前后

一致,例如,你在开始打开文件时使用的是o p e n函数(C ++B u i l d e r提供),则在后面的关闭文件时应该使用c l o s e,而不是_ l c l o s e函数。

6.2 文件对话框组件

C ++B u i l d e r的

D i a l o g组件夹中提供了一些文件对话框组件,这些组件的用法简单,而且可以使应用程序的界面统一、美观。具体如下:

1. OpenDialog

通过O p e n D i a l o g组件可以选择并打开文件。

在显示“打开文件”对话框之前,要对O p e n D i a l o g组件的一些属性进行设置:

1) Filter 文件类型过滤器。比如下面的代码在文件类型组合框中增加了. T X T和. P A S两种类型的文件过滤器:

";

OpenDialog1->Filter =

"Text files (*.txt)|*.TXT|Pascal files (*.pas)|*.PAS 此外,在同一个过滤器中,还可以有多种文件后缀:

";

OpenDialog1->Filter =

"Pascal files|*.PAS;*.DPK;*.DPR

2) FilterIndex 设置对话框一打开时选中的文件过滤器。数值从1开始计算。

3) InitialDir 设置对话框打开时定位的目录。如果默认或指定目录无效,则指向当前工作目录。

4) Options 设置打开对话框的出现模式和操作模式。属性值的类型定义如下:

enum TOpenOption { ofReadOnly, ofOverwritePrompt, ofHideReadOnly, oChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect, ofExtensionDifferent,

of P at h M u st Exist,o fFileMustExist, ofCreatePrompt, ofShareAware,

ofNoReadOnlyReturn, ofNoTestFileCreate,

ofNoNetworkButton, ofNoLongNames, ofOldStyleDialog,

ofNoDereferenceLinks,ofEnableIncludeNotify, ofEnableSizing };

typedef Set TOpenOptions;

具体举例如下:

O p e n P i c t u r e D i a l o g1->O p t i o n s.C l e a r();

OpenPictureDialog1->Options << ofFileMustExist << ofHideReadOnly << o f N o C h a n g e D i r;

打开对话框一出现时,“以只读方式打开( R)”复选框被选中,并且可以一次选择多个文件,而且文件必须存在。

5) Title 设置对话框标题中显示的内容。

对话框显示后,当按下“打开( O)”按钮后,可以读取F i l e N a m e属性的值获得用户最后选择的文件名。

如果在打开对话框前O p t i o n s属性中设置了o f A l l o w M u l t i S e l e c t,也就是可以一次选择多个文件,则通过读取F i l e s->S t r i n g s[I]的值可以获取所有选中的文件名。其中I为一个整型循环变量,从0开始递增到F i l e s->C o u n t-1。

2. SaveDialog

通过S a v e D i a l o g组件可以选择并保存文件。

S a v e D i a l o g组件的属性和使用方法与O p e n D i a l o g组件非常相似。

3. OpenPictureDialog

通过O p e n P i c t u r e D i a l o g组件可以选择并打开图形文件。

O p e n P i c t u r e D i a l o g组件具体用法基本同O p e n D i a l o g组件,只是对话框在显示的时候还多了一个可以预览图形的矩形区域。如果选中的图形文件可以被T P i c t u r e类识别,则图形会在预览区域显示。一般T P i c t r u e类可以识别. B M P、. I C O、. W M F和. E M F等类型的图形文件。

4. SavePictureDialog

通过S a v e P i c t u r e D i a l o g组件可以选择并保存图形文件。

S a v e P i c t u r e D i a l o g组件的属性和使用方法与S a v e D i a l o g组件和O p e n P i c t u r e D i a l o g组件非常相似。

6.3 Wi n3.1相关组件

在C ++B u i l d e r的Wi n3.1组件夹中有一些组件,可以方便地对文件、目录和驱动器等进行操作。具体如下:

? FileListBox:文件列表框。

? DirectoryListBox:目录列表框。

? DriveComboBox:驱动器组合框。

? FilterComboBox:文件过滤器组合框。

此外,有时需要将上述组件与L a b e l组件和E d i t组件等结合在一起使用。在后面的例程S 06B 中将对上述组件的用法进行说明。

6.4 常用文件管理函数

需要包含S y s u t i l s单元。

6.4.1 文件操作常用函数

文件操作常用的函数有:

1. DeleteFile

将一个文件从记录盘上删除,如果文件不存在或无法删除,则返回F a l s e。

函数原型如下:

extern PACKAGE bool __fastcall DeleteFile(const AnsiString FileName);

2. File open mode constants(文件打开模式常量)

static const Shortint fmOpenRead = 0x0;

static const Shortint fmOpenWrite = 0x1;

static const Shortint fmOpenReadWrite = 0x2;

static const Shortint fmShareCompat = 0x0;

static const Shortint fmShareExclusive = 0x10;

static const Shortint fmShareDenyWrite = 0x20;

static const Shortint fmShareDenyRead = 0x30;

static const Shortint fmShareDenyNone = 0x40;

3. FileAge

取一个文件的时间戳,用F i l e D a t e T o D a t e T i m e函数可将它的返回值转换成T D a t e T ime 类对象。如果指定文件不存在,则返回- 1。

函数原型如下:

extern PACKAGE int __fastcall FileAge(const AnsiString FileName);

4. FileClose

关闭一个给定文件句柄的文件,这个文件句柄是通过调用F i l e O p e n或F i l e C r e a t e函数得到的。

函数原型如下:

extern PACKAGE void __fastcall FileClose(int Handle);

5. FileDateTo D a t e T i m e

将一个D O S日期/时间类型数据转换成V C L要求的T D a t e Ti m e类对象。例如,用

F i l e D a t e T o D a t e T i m e函数来转换F i l e

G e t D a t e或F i l e A g e函数返回的文件时间戳,这样其他V C L过程或属性才可以使用。你还必须用 F i l e D a t e T o D a t e T i m e转换F i n d F i r s t和F i n d N e x t函数中用的Ts e a r c h R e c结构中的时间域。

函数原型如下:

extern PACKAGE System::TDateTime __fastcall FileDateToDateTime(int FileDate);

6. FileExists

测试指定文件名的文件是否存在。如果文件存在,返回Tr u e,否则,返回F a l s e。

函数原型如下:

extern PACKAGE bool __fastcall FileExists(const AnsiString FileName);

7. FileGetAttr

获取一个文件的文件属性。文件属性可见T S e a r c h R e c结构中的A t t r域(表6 -1)。如果出错,则返回- 1。

函数原型如下:

extern PACKAGE int __fastcall FileGetAttr(const AnsiString FileName);

下面的代码检测文件M y F i l e.s y s是否具有“隐藏”属性,如果没有,则将其设置为隐藏类型的文件:

. ..

int Attrs = FileGetAttr(

"M y F i l e.s y s") ;// 获取文件的属性if (Attrs & faHidden) // 检测文件是否具有隐藏属性

F i l e S e t A t t r("M y F i l e.s y s", Attrs & !faHidden);// 设置文件的属性

. ..

其他属性及其对应的数值见表6 -1。

表6-1 文件属性常数及其对应的数值表

常数数值描述

F a R e a d O n l y0 x00000001只读文件

F a H i d d e n0 x00000002隐藏文件

F a S y s F i l e0 x00000004系统文件

F a V o l u m e I D0 x00000008卷标志文件

F a D i r e c t o r y0 x00000010目录文件

F a A r c h i v e0 x00000020存档文件

F a A n y F i l e0 x0000003F所有类型文件

8. FileGetDate

取文件的DOS形式的时间戳,与FileAge函数所用参数不同。如果文件句柄无效,则返回-1。

函数原型如下:

extern PACKAGE int __fastcall FileGetDate(int Handle);

9. FileOpen

打开文件并获取它的Wi n d o w s文件句柄,存取模式见前面2。如果打开文件成功,则返回值

为正数;否则,为-1。与_ l o p e n功能相同。

函数原型如下:

extern PACKAGE int __fastcall FileOpen(const AnsiString FileName, int Mode);

10. FileRead

从一个文件中读取指定大小(由参数C o u n t指定,字节)的数据。函数返回实际读取的数据

大小,可能小于C o u n t。

函数原型如下:

extern PACKAGE int __fastcall FileRead(int Handle, void *Buffer, int Count);

11. FileSearch

在指定的路径中查找指定的文件。

过程原型如下:

extern PACKAGE AnsiString __fastcall FileSearch(const AnsiString Name, const AnsiString DirList);

其中参数D i r L i s t中可以包含多个路径,各个路径之间使用分号(;)隔开。如果查找到符

合条件的文件,则返回该文件名;否则,返回一个空字符串。

下面例子的窗体中有一个E d i t组件,一个B u t t o n组件。按下B u t t o n组件后就在当前目录和

Wi n d o w s目录下查找E d i t组件中指定文件名的文件,根据查找结果显示不同信息:void __fastcall TForm1::Button1Click(TObject *Sender)

{

char buffer[256];

GetWindowsDirectory(buffer, sizeof(buffer));// 获取W i n d o w s系统目录

// 在当前目录下和W i n d o w s系统目录下查找文件

AnsiString asFileName = FileSearch(Edit1->Text, GetCurrentDir() +

A n s i S t r i n g(";") + AnsiString(buffer));

if (asFileName.IsEmpty())// 没有找到指定文件

S h o w M e s s a g e(A n s i S t r i n g("C o u l d n't find ") + Edit1->Text +

".") ;

e l s e// 找到了指定文件

S h o w M e s s a g e(A n s i S t r i n g("Found ") + asFileName +

".") ;

}

12. FileSeek

在一个文件中定位文件指针。如果F i l e S e e k执行成功,则返回文件指针的新位置,否则返

回- 1。

函数原型如下:

e x t e r n P A C K A G E i n t__

f a s t c a l l F i l e S e e k(i n t H a n d l e,i n t O f f s e t,i n t O r i

g i n);

extern PACKAGE __int64 __fastcall FileSeek(int Handle, const __int64 Offset, int Origin);

参数O f f s e t描述了从参数O r i g i n开始需重新定位的偏移量;O r i g i n有下面三种可能值:

? 0:文件开始位置。

? 1:文件指针的当前位置。

? 2:文件结束位置。

下面这段程序是关于F i l e O p e n、F i l e S e e k和F i l e R e a d的例子:

在窗体中有一个B u t t o n、S t r i n g G r i d和O p e n D i a l o g组件。当单击B u t t o n组件时,弹出

O p e n D i a l o g对话框,提示用户输入一个文件名;当用户按了O K按钮后,将打开这个文件,并读

到一个缓冲区中然后关闭该文件。然后缓冲区中的数据将显示在S t r i n g G r i d组件中,S t r i n g G r i d组

件的第一列以字符型数据显示,第二列以数字型数据显示。

具体如下:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int iFileHandle;

int iFileLength;

int iBytesRead;

char *pszBuffer;

if (OpenDialog1->Execute())

{

t r y

{

iFileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead);

iFileLength = FileSeek(iFileHandle,0,2);

F i l e S e e k(i F i l e H a n d l e,0,0);

pszBuffer = new char[iFileLength+1];

iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength);

F i l e C l o s e(i F i l e H a n d l e);

for (int i=0;i

{

StringGrid1->RowCount += 1;

StringGrid1->Cells[1][i+1] = pszBuffer[i];

StringGrid1->Cells[2][i+1] = IntToStr((int)pszBuffer[i]);

}

delete [] pszBuffer;

}

c a t c h(...)

{

A p p l i c a t i o n->M e s s a g e

B o x(

"C a n't perform one of the following file operations: Open, Seek, Read,

C l o s e.",

"File Error",I D O K);

}

}

}

13. FileSetAttr

设置文件的属性。可以参见F i l e G e t A t t r函数的说明和例程。

过程原型如下:

extern PACKAGE int __fastcall FileSetAttr(const AnsiString FileName, int

A t t r);

具体用法见上面的F i l e G e t A t t r函数。

14. FileSetDate

设置指定文件的时间,其参数可以参见F i l e G e t D a t e函数的说明和例程。

过程原型如下:

extern PACKAGE int __fastcall FileSetDate(int Handle, int Age);

15. FileWr i t e

将大小为C o u n t的缓冲区数据写入指定的文件中。返回值是实际写入的字节总数,如果出错

则返回-1。

过程原型如下:

extern PACKAGE int __fastcall FileWrite(int Handle, const void *Buffer, int

C o u n t);

下面这段程序是关于F i l e E x i s t s、R e n a m e F i l e、F i l e C r e a t e、F i l e W r i t e和F i l e C l o s e的例子:

在窗体中有一个B u t t o n、S t r i n g G r i d和S a v e D i a l o g组件。当单击B u t t o n组件时,弹出

O p e n D i a l o g对话框,提示用户输入一个文件名;当用户按了O K按钮后,在S t r i n g G r i d中的内容

将被写入该文件,同时附加信息也被写入文件,这样更容易用F i l e R e a d函数读。

具体如下:

#include

void __fastcall TForm1::Button1Click(TObject *Sender)

{

char szFileName[MAXFILE+4];

int iFileHandle;

int iLength;

if (SaveDialog1->Execute())

{

if (FileExists(SaveDialog1->FileName))

{

fnsplit(SaveDialog1->FileName.c_str(), 0, 0, szFileName, 0);

strcat(szFileName,

". B A K") ;

RenameFile(SaveDialog1->FileName, szFileName);

}

iFileHandle = FileCreate(SaveDialog1->FileName);

// Write out the number of rows and columns in the grid.

FileWrite(iFileHandle, (char*)&(StringGrid1->ColCount), sizeof(StringGrid1-> C o l C o u n t));

FileWrite(iFileHandle, (char*)&(StringGrid1->RowCount), sizeof(StringGrid1-> R o w C o u n t));

for (int x=0;xColCount;x++)

{

for (int y=0;yRowCount;y++)

{

// Write out the length of each string, followed by the string

i t s e l f.

iLength = StringGrid1->Cells[x][y].Length();

FileWrite(iFileHandle, (char*)&iLength, sizeof(iLength));

FileWrite(iFileHandle, StringGrid1->Cells[x][y].c_str(),

S t r i n g G r i d1->C e l l s[x][y].L e n g t h());

}

}

F i l e C l o s e(i F i l e H a n d l e);

}

}

16. FindClose

结束F i n d F i r s t/F i n d N e x t序列。

函数原型如下:

extern PACKAGE void __fastcall FindClose(TSearchRec &F);

17. FindFirst

函数原型如下:

extern PACKAGE int __fastcall FindFirst(const AnsiString Path, int Attr, TSearchRec &F);

查找指定目录(参数P a t h)下的第一个匹配文件,返回值放在参数F(T S e a r c h R e c结构对象)

中。参数A t t r指定要查找文件的属性值;常量参数P a t h指定要查找的文件名,其中可以包含通配

符,例如,C:\TEST\*.* 就表示要查找C :\T E S T目录下的所有文件。

如果F i l e F i r s t成功找到文件,则返回0;否则返回Wi n d o w错误码。

注意,F i l e F i r s t开辟的内存资源,必须通过调用F i l e C l o s e函数来释放。

18. FindNext

函数原型如下:

extern PACKAGE int __fastcall FindNext(TSearchRec &F);

返回调用F i l e F i r s t 后的下一个名字和属性都匹配的文件。参数F 必须是调用F i n d F i r s t 传回的值。如果成功,则返回0;否则,返回Wi n d o w s 错误码。

具体例子请见C ++B u i l d e r 联机帮助。19. RenameFile

将一个已经存在的文件更名。如果有一个与新的文件名同名的文件存在,函数返回 F a l s e 。

可见F i l e W r i t e 函数的举例。

过程原型如下:

extern PACKAGE bool __fastcall RenameFile(const AnsiString OldName,

const AnsiString NewName);

6.4.2 目录操作常用函数

目录操作常用的函数有:1. CreateDir

新建一个目录。如果创建成功,则返回Tr u e ;否则,返回F a l s e 。函数原型如下:

extern PACKAGE bool __fastcall CreateDir(const AnsiString Dir);

下面的例程可以说明函数C r e a t e D i r 的用法;同时还说明了D i r e c t o r y E x i s t s 和E x c e p t i o n 函数的用法。如果目录C :\T e m p 不存在则新建它:

void __fastcall TForm1::Button1Click(TObject *Sender){

if (!DirectoryExists("c :\\t e m p ") )

{

if (!CreateDir(

"C :\\t e m p ") )throw Exception(

"Cannot create c:\\temp directory.") ;}}

2. DirectoryExists

检测指定的目录是否存在。如果存在,则函数返回Tr u e ;否则,返回F a l s e 。函数原型如下:

extern PACKAGE bool __fastcall DirectoryExists(const AnsiString Name);

如果在参数N a m e 中指定的不是绝对路径,则被解释为当前路径的相对路径。3. ForceDirectories 需包含F i l e C t r l 单元。

创建指定的目录。通常在创建一个目录的时候,其父级目录必须存在。但是使用F o r c e D i r e c t o r i e s 创建目录的时候就没有这个限制,可以将所需的所有目录一次创建。如果创建成功,则函数返回Tr u e ;如果有任何一个目录创建失败,则返回F a l s e 。

函数原型如下:

extern PACKAGE bool __fastcall ForceDirectories(AnsiString Dir);

下面这个例程对F o r c e D i r e c t o r i e s函数和D i r e c t o r y E x i s t s函数进行了说明。在窗体上有一个

L a b e l和一个B u t t o n组件,当单击B u t t o n组件时,D i r变量中描述的路径中所有不存在的目录都将

被建立。并且运行结果显示在L a b e l组件中。

// *.h

. ..

#include

. ..

// *.cpp

. ..

void __fastcall TForm1::Button1Click(TObject *Sender)

{

"C :\A p p s\S a l e s\L o c a l";// 路径名称

AnsiString Dir =

F o r c e D i r e c t o r i e s(D i r);// 将一次创建三级目录

if (DirectoryExists(Dir))

"was created";

Label1->Caption = Dir +

}

4. GetCurrentDir

获取当前的目录的完整路径名。

函数原型如下:

e x t e r n P A C K A G E A n s i S t r i n g__

f a s t c a l l G e t C u r r e n t D i r();

5. RemoveDir

删除一个存在的目录,目录必须为空。如果删除目录成功,则返回Tr u e;否则,返回F a l s e。

函数原型如下:

extern PACKAGE bool __fastcall RemoveDir(const AnsiString Dir);

6. SelectDirectory

通过显示一个对话框来让用户选择一个目录。

函数原型如下:

extern PACKAGE bool __fastcall SelectDirectory(const AnsiString Caption, const WideString Root,

AnsiString &Directory);

extern PACKAGE bool __fastcall SelectDirectory(AnsiString &Directory, TSelectDirOpts Options,int HelpCtx);

对于第一个重载函数,参数C a p t i o n为对话框的标题内容;参数R o o t指定一个目录,它为进

行浏览的最初目录;指定的目录保存在参数D i r e c t o r y中。

对于第二个重载函数,参数D i r c c t o r y中指定的目录为对话框一显示时选中的目录,最后用

户选定的目录也保存在参数D i r e c t o r y中;参数O p t i o n s为一些设置项目的集合,如果为空的话,

则用户通过对话框只能选择已经存在的目录,没有编辑框可以提供给用户来输入一个新的目录

名。T S e l e c t D i r O p t s 类型定义如下:

enum TSelectDirOpt { sdAllowCreate, sdPerformCreate, sdPrompt };typedef Set TSelectDirOpts;

具体数值的含义见表6 -2。

表6-2 SelectDirectory 函数T S e l e c t D i r O p t s 参数的取值及其含义

S d A l l o w C r e a t e 对话框中有一个E d i t 组件,用户可以输入新的目录名。但是如果要新建该目录,程序员必须根据获取的文件自己编写代码新建目录

S d P e r f o r m C r e a t e 对话框中有一个E d i t 组件,用户可以输入一个不存在的目录名,对话框将选中该目录并创建该目录

S d P r o m p t

对话框中有一个E d i t 组件,如果用户输入的目录名不存在,则对话框提示是否创建新目录的信息,如果在设置中同时也选中了sdPerformCreate 设置;还同时选中的是s d A l l o w C r e a t e 设置,则程序员必须根据获取的文件自己编写代码新建目录

7. SetCurrentDir

设置系统的当前目录。如果设置当前目录成功,则返回Tr u e ;否则,返回F a l s e 。函数原型如下:

extern PACKAGE bool __fastcall SetCurrentDir(const AnsiString Dir);

6.4.3 驱动器操作常用函数

驱动器操作常用的函数有:1. DiskFree

获取指定驱动器中剩余空间的字节数。函数原型如下:

extern PACKAGE __int64 __fastcall DiskFree(Byte Drive);

参数D r i v e 的取值见表6 -3。2. DiskSize

获取指定驱动器容量,单位为字节数。函数原型如下:

e x t e r n P A C K A G E __i n t 64 __

f a s t c a l l D i s k S i z e (B y t e D r i v e );

参数D r i v e 的取值见表6 -3。

此外,一些其他的驱动器信息可以通过目录操作函数来获得。6.4.4 文件名操作常用函数

通过下面的函数,可以方便地对文件名进行操作:

1. ChangeFileExt

函数原型如下:

extern PACKAGE AnsiString __fastcall ChangeFileExt(const AnsiString FileName, const AnsiString Extension);

用参数E x t e n s i o n替换参数F i l e N a m e文件名的扩展名,得到一个新的文件名。不改变实际文

件的文件名,只是生成一个新的文件名字符串。该函数适用于多字节字符集。

2. ExpandFileName

将当前驱动器名(盘符)、路径名和指定的文件名合成一个绝对文件名。

函数原型如下:

extern PACKAGE AnsiString__fastcall ExpandFileName(const AnsiString FileName);

返回值为合成的绝对文件名。

3. ExpandUNCFileName

获取一个以U N C格式的包括网络驱动器名的绝对文件名。

函数原型如下:

extern PACKAGE AnsiString __fastcall ExpandUNCFileName(const AnsiString

F i l e N a m e);

4. ExtractFileDir

从绝对文件名中获取目录名。

函数原型如下:

extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName);

5. ExtractFileDrive

从绝对文件名中获取驱动器号(盘号)。

函数原型如下:

extern PACKAGE AnsiString__fastcall ExtractFileDrive(const AnsiString FileName);

6. ExtractFileExt

从绝对文件名中获取文件名的扩展名。

函数原型如下:

extern PACKAGE AnsiString __fastcall ExtractFileExt(const AnsiString FileName);

7. ExtractFileName

从绝对文件名中获取文件名。

函数原型如下:

extern PACKAGE AnsiString __fastcall ExtractFileName(const AnsiString FileName);

8. ExtractFilePath

从绝对文件名中获取路径名。

函数原型如下:

e x t e r n P A C K A G E A n s i S t r i n g__

f a s t c a l l E x t r a c t F i l e P a t h(c o n s t A n s i S t r i n

g F

F i l e N a m e);

9. ExtractRelativePath

从绝对文件名中获取相对于某一路径的相对路径名。

函数原型如下:

ex ter n PA C KA G E AnsiString __fastcall ExtractRelativ eP at h(co ns t An si St ri ng

B a s e N a m e,

const AnsiString DestName);

10. ExtractShortPathName

将长文件名转化成短文件名。

函数原型如下:

extern PACKAGE AnsiString __fastcall ExtractShortPathName(const AnsiString

F i l e N a m e);

其他的文件名操作函数可以参考C ++B u i l d e r联机帮助中的“File name utilities”一节。关于

本节的内容具体的使用请参见例程S 06D。

6.5 例程S 06A

例程S 06A(运行界面如图6 -1)主要对以下内容进行了说明:

? OpenDialog组件和S a v e D i a l o g组件的用法。

? 文件的操作。

? FileOpen、F i l e C r e a t e、F i l e R e a d、F i l e W r i t e、F i l e S e e k等函数与过程的用法。

例程S 06A的主要功能是:通过“浏览( R)...”按钮选择一个源文件;通过“浏览( R)...”按钮

选择一个目的文件,目的文件可以不存在;按下“拷贝( O)”按钮后,将源文件复制为目的文件,

并在文件大小中显示源文件的字节数;通过“关闭( C)”按钮关闭程序。

图6-1 例程S 06A运行结果界面

具体实现过程如下:

1) 通过菜单File | New Application创建一个新的工程。

2) 在窗体中一次添加三个L a b e l组件、三个E d i t组件、四个B u t t o n组件、一个O p e n D i a l o g组

件和一个S a v e D i a l o g组件。然后设置三个L a b e l组件的F o c u s C o n t r o l属性,分别与三个E d i t组件相

关。接着将三个E d i t组件的Te x t属性中的内容清空。界面设计结果如图6 -2。

6-2 例程S 06A 界面设计结果

3) 为四个按钮组件添加O n C l i c k 事件的处理过程如下:

void __fastcall TForm1::Button1Click(TObject *Sender){

// 显示“打开源文件”对话框OpenDialog1->Title = "源文件";if( OpenDialog1->Execute() )

Edit1->Text = OpenDialog1->FileName;

}

/ /---------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender){

// 显示另保为对话框

SaveDialog1->Title = "另存为";i f ( S a v e D i a l o g 1->E x e c u t e () )

Edit2->Text = SaveDialog1->FileName;

}

/ /---------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender){

int iFromFileHandle, iToFileHandle;// 声明文件对象int iFileLength;

/ /文件长度

int iBytesRead, iBytesWritten;// 实际读、写文件的字节数char *pszBuffer; // 缓冲区

t r y {

// 打开源文件

iFromFileHandle = FileOpen(Edit1->Text, fmOpenRead);// 显示文件大小信息

iFileLength = FileSeek(iFromFileHandle, 0, 2);Edit3->Text = IntToStr(iFileLength) + "字节";pszBuffer = new char[2049];

FileSeek(iFromFileHandle, 0, 0);// 将文件指针移到文件开始处

// 打开目标文件

iToFileHandle = FileCreate(Edit2->Text);

// 拷贝文件

do

{

iBytesRead = FileRead(iFromFileHandle, pszBuffer, 2048);

iBytesWritten = FileWrite(iToFileHandle, pszBuffer, iBytesRead);

} while( iBytesRead==2048 );

S h o w M e s s a g e("拷贝文件完毕。") ;

delete[] pszBuffer;

FileClose(iFromFileHandle); // 关闭源始文件

FileClose(iToFileHandle); // 关闭目标文件

}

c a t c h(...)

{

A p p l i c a t i o n->M e s s a g e

B o x("运行过程中出错。", "错误", IDOK);

}

}

/ /---------------------------------------------------------------------------

v o i d__f a s t c a l l T F o r m1::B u t t o n4C l i c k(T O b j e c t*S e n d e r)

{

C l o s e();// 关闭程序

}

4) 编译、链接和运行程序,测试效果。

6.6 例程S 06B

例程S 06B(运行界面如图6 -3)主要对以下内容进行了说明:

? F i l e L i s t B o x组件、D i r e c t o r y L i s t B o x组件、D r i v e C o m b o B o x组件和F i l t e r C o m b o B o x组件的用法。

? C标准文件类型的操作。

? 取文件大小的技巧(其实有很多种方法)。

例程S 06B的主要功能是:通过Wi n3.1组件夹中的几个与文件、目录和驱动器有关的组件来实现一个简单的文件浏览器。

具体实现过程如下:

1) 通过菜单File | New Application创建一个新的工程。

2) 参考图6 -3在窗体F o r m1中从左向右、从上向下添加D i r e c t o r y L i s t B o x组件、F i l e L i s t B o x组件、D r i v e C o m b o B o x组件和F i l t e r C o m b o B o x组件。在F o r m1窗体上再添加三个L a b e l组件,一个E d i t组件和一个B u t t o n组件。各组件的设置见表6 -4。

图6-3

例程S 06B 运行结果界面表6-4 例程S 06B 中各组件的属性设置

N a m e C a p t i o n 其他属性

L a b e l 1

目录列表( &D ):

FocusControl: DirectoryListBox1D i r e c t o r y L i s t B o x 1 D i r L a b e l :L a b e l 6;

FileList: FileListBox1

L a b e l 2

文件列表( &S ):FocusControl: FileListBox1F i l e L i s t B o x 1FileEdit: Edit1

L a b e l 3

驱动器( &R ):FocusControl: DriveComboBox1D r i v e C o m b o B o x 1DirList: DirectoryListBox1

L a b e l 4

文件类型( &F ):

FocusControl: FilterComboBox1F i l t e r C o m b o B o x 1FileList: FileListBox1

Filter: 所有文件( *.*)|*.*|文本文件( *.t x t )|*.t x t

L a b e l 5路径名:

L a b e l 6 C :\S a m p l e s \S 06B L a b e l 7文件名( &N ):FocusControl: Edit1E d i t 1B u t t o n 1

文件长度( &L )...

Te x t :*.*

3) 添加B u t t o n 1组件的O n C l i c k 事件的处理过程如下:

void __fastcall TForm1::Button1Click(TObject *S e n d e r ){

F I L E * f p ;

AnsiString FileFullName;long size;

AnsiString PropertyMes;

FileFullName = Label6->Caption+"\ \"+ E d i t 1->T e x t ;if( FileExists(FileFullName) ){

fp = fopen(FileFullName.c_str(), "r ") ;if( fp!=NULL ) // 检测是否打开文件错误{

// 显示长度信息

fseek(fp, 0L, SEEK_END);size = ftell(fp); // 获取文件长度信息PropertyMes = "文件总共有"+ I n t T o S t r (s i z e )+"字节。";

MessageDlg( PropertyMes, mtInformation, TMsgDlgButtons()<

M e s s a g e D l g ("打开文件错误。", mtWarning, TMsgDlgButtons()<

4) 编译、链接和运行程序,测试效果。

6.7 例程S 06C

例程S 06C (

运行界面如图

6 -4)主要对C ++流式文件的操作进行说明:

图6-4 例程S 06C 运行结果界面

例程S 06C 的实现的主要功能是:把用户输入的一个数字按指定的有效位转换成另外一个数字,在窗体中显示转换结果;同时将过程记录在一个文件中。

具体实现过程如下:

1) 通过菜单File | New Application 创建一个新的工程。

2) 参考图6 -4在窗体F o r m 1中所示,添加四个L a b e l 组件、两个E d i t 组件、一个U p D o w n 组件和一个B u t t o n 组件,并将B u t t o n 组件的C a p t i o n 属性设置为“转换( &C )”。

3) 添加B u t t o n 1组件的O n C l i c k 事件的处理过程如下:

void __fastcall TForm1::Button1Click(TObject *S e n d e r )

{

int nNumLen = Edit1->Text.Length();char* sBuff = new char[nNumLen];ostrstream ofstr(sBuff, nNumLen);

o f s t r <

< T e x t ))

< T e x t )/ /有效位最大为1 2

<

Label4->Caption = sBuff;

fstream outf(“T e s t .t x t ”, ios::out);

o u t f <T e x t .c _s t r ()<

< <"有效位数:"< T e x t )<

delete[] sBuff;}

为了提供对C ++流式I /O 操作的支持,需包含下面的头文件:

#include // 字符串I /O 操作

#include // 文件I /O 操作#include

// 格式设置操作

4) 编译、链接和运行程序,测试效果。

6.8 例程S 06D

例程S 06D (运行界面如图6 -5)主要对文件名的操作函数进行说明。在例程窗体的第一行是一个L a b e l 组件、一个E d i t 组件和一个B u t t o n 组件,通过B u t t o n 组件可以选择一个文件名显示在E d i t 组件中。下面的每行针对一个常用的文件名操作函数,当按下每行前面的B u t t o n 组件时,将调用相应的函数对第一行

E d i t 组件中的文件名进行操作,并将结果显示在对应的E d i t 组件中。

图6-5 例程S 06D 运行结果界面

具体实现过程如下:

1) 通过菜单File | New Application 创建一个新的工程。

2) 参考图6 -5在窗体F o r m 1中添加相应的L a b e l 组件、E d i t 组件和B u t t o n 组件,然后再添加一个O p e n D i a l o g 组件。根据需要设置相应的属性。

3) 本例程中的代码并不多,大部分代码可以通过拷贝来实现。下面添加

B u t t o n 组件的

O n C l i c k事件的处理过程如下:

void __fastcall TForm1::Button1Click(TObject *Sender) {

// 通过O p e n D i a l o g组件取得一个文件名

if( OpenDialog1->Execute() )

Edit1->Text = OpenDialog1->FileName;

}

void __fastcall TForm1::Button2Click(TObject *Sender) {

// 将当前路径名与指定文件名合成一个绝对文件名

Edit2->Text = ExpandFileName(Edit1->Text);

}

void __fastcall TForm1::Button3Click(TObject *Sender) {

// 获取一个以U N C格式的包括网络驱动器名的绝对文件名

Edit3->Text = ExpandUNCFileName(Edit1->Text);

}

v o i d__f a s t c a l l T F o r m1::B u t t o n4C l i c k(T O b j e c t*S e n d e r) {

// 从绝对文件名中获取目录名

Edit4->Text = ExtractFileDir(Edit1->Text);

}

v o i d__f a s t c a l l T F o r m1::B u t t o n5C l i c k(T O b j e c t*S e n d e r) {

// 从绝对文件名中获取驱动器号(盘号)

Edit5->Text = ExtractFileDrive(Edit1->Text);

}

void __fastcall TForm1::Button6Click(TObject *Sender) {

// 从绝对文件名中获取文件名的扩展名

Edit6->Text = ExtractFileExt(Edit1->Text);

}

void __fastcall TForm1::Button7Click(TObject *Sender) {

// 从绝对文件名中获取文件名

Edit7->Text = ExtractFileName(Edit1->Text);

}

void __fastcall TForm1::Button8Click(TObject *Sender) {

// 从绝对文件名中获取路径名

Edit8->Text = ExtractFilePath(Edit1->Text);

C++ builder 中关于窗体的一些操作

C++ builder 中关于窗体的一些操作(总在最前,遍历控件...) 一、让窗口总是在最前面 Form 的FormStyle属性设置为fsStayOnTop值。 二、动态调用窗体Form 在缺省情况下,由File/New Form生成添加入项目文件中的窗体都具有"Auto Create"(自动创建)的特性。即只要程序运行,该窗体就存在于内存中了,不管当前它是否被调用。具有这种特性的窗体一般适用于窗体属性比较固定、经常被调用的情况。其优点是速度快,缺点是占用内存。在实际程序设计中,会遇见大量类似对话框功能的窗体,它们用于显示状态或输入信息,仅须在程序中调用一下,完成其功能就行了,无需常驻内存。这时可以通过选择Project/Options/Forms,将"Auto--Create forms " 栏中相应的窗体, 如Form1,用" >" 键移动到"Available forms"栏中,并在程序需调用该窗体处,加入下列语句:TForm1 *myform=new TForm1(this); myform- >ShowModal(); delete myform; 窗体Form1仅是在需要调用时才调入内存,调用完成后,即用delete清除出内存。这样可减少程序对内存资源的占用。 三、遍历窗体控件的方法 要访问或修改窗体上的控件,方法很简单,以TEdit为例子: Edit1- >Text=""; Edit2- >Text=""; 但如果窗体上有十来个像Edit1 这样的控件,需要进行相同的初始化,用上面的方法一个一个地进行,岂不麻烦!所以有必要掌握遍历窗体控件的方法。在介绍该方法之前,让我们先了解一下窗体Form 的Components 和Controls 属性。参见表一。

proe自顶向下设计的基础原理

本课程将讲授自顶向下设计的基础原理。该设计方式有力而稳定地扩展了参数设计,使产品设计更为有效。自顶向下设计使您可以在产品组件的环境中创建零件,并在 创建新零件特征时参照现有几何。 图 1 该设计方法不同于传统的自底向上设计方法,在自底向上设计方法中,各个元件是独立于组件进行设计的,然后再将这些元件组合到一起来开发顶级组件。 图 2 自顶向下设计是一种逐步进行的过程: 1.使用标准的起始组件创建一个顶级组件文件。 2.使用标准的起始零件在顶级组件中创建一个骨架。 3.在骨架元件中创建所需的骨架几何。 4.使用骨架模型参照创建并装配所需元件。 5.在元件中对所需特征进行建模,并使用骨架几何作为唯一的参数参照。 6.在组件中的适当级创建并装配一个映射零件。 7.在映射零件中创建所需参照。 8.创建并装配参照映射零件的元件。 9.在参照映射零件(如有必要,参照骨架)的元件中建立几何。

请注意,有更多关于自顶向下设计方面的高级功能和方法,例如,布局和发布几何,这些功能和方法将在 高级组件指南和大型组件指南两个课程中进行介绍。 当您决定使用“自顶向下设计”法时,需要了解一些Pro/ENGINEER的特点。 零件模式对组件模式 使用Pro/ENGINEER零件和组件文件有两种不同的方法。要对设计进行更改,可以在“零件模式”中修改零件文件本身,也可以在“组件模式”中的“组件”内容中修改零件文件。 在“零件模式”中,您仅操作零件的几何,且操作窗口中仅包含该零件。 在“组件模式”中,您操纵的是该组件,可以操作组件中的几何或其中零件的几何。 工作在“组件模式”时,若要为零件添加几何,必须选取考虑中的元件,右键单击并选择激活。这向系统表明您正在创建的特征属于所选的特定元件。如未“激活”(Active)该元件,则需要按上一课中的做法创建组件级特征。 当组件中使用的零件发生变更时(可能是尺寸修改或添加特征),这些变更在组件中是可见的,意识到这一点很重要。当零件单独打开并更改或在组件的内容中更改时,尤为如此。 这也是相关性(信息的双向流)的另一个范例。意识到一个零件仅有一个模型很重要。无论用在 设计、文档和制造工艺中何处,该模型将被参照(不是复制)。 创建不正确的外部参照 Pro/ENGINEER的一个重要功能就是将特征连接到一起,当发生设计修改时,在元件之间建立起关系并节省时间。但是,若要使这些关系正常运行,必须创建些设计中发生变更时可进行编辑和操作的可靠关系。

VB控件属性大全

1.01、窗体(FORM)的常用属性 属性说明 (Name)窗体的名称 ActiveControl返回焦点所在的控件,该属性设计阶段不可用,运行时只读。 Appearance 外观效果,取值为: 0 平面 1 3D(立体) AutoRedraw 是否自动刷新或重画窗体上所有图形[获得或设置从绘图(graphics)方法到一个持久性位图的输出],取值为: True False BackColor背景颜色,可从弹出的调色板选择。 BorderStyle 设置边界类型,取值为: 0 None(无边界框架) 1 FixedSingle(窗口大小固定不变的单线框架) 2 Sizable(窗口大小可变的标准双线框架) 3 FixedDialog(窗口大小固定的对话框窗体) 4 FixedToolWindow(窗口大小固定的工具箱窗体) 5 Sizable ToolWindow(窗口大小可变的工具箱窗体) Caption窗体的标题 ClipControls 决定Paint事件的graphics方法是重画整个对象,还是重画新显示的区域。取值为: True或False ControlBox 是或有控制框, 取值为:True 有 False 无 DrawMode 设定窗体上绘图(graphics方法),Shape,Line等控件的输出外观,有16种可选: 1 黑色 2 非或笔,设置值15的反相 3 与非笔,背景色以及画笔反相二者共有颜色的组合 4 非复制笔,设置值13的反相 5 与笔非,画笔以及显示色反相二者共有颜色的组合 6 反相,显示颜色反相 7 异或笔,画笔颜色以及显示颜色的异或 8 非与笔,设置值9的反相 9 与笔,画笔以及显示色二者共有颜色的组合

各种系统框架图简介

各种系统框架图简介 以下文字和架构图均在本人相关系统设计和架构方案中有所应用。 原文出处:https://www.doczj.com/doc/f31286054.html,/6517/viewspace-609654 1.Spring 架构图 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定J2EE 服务的可重用业务和数据访问对象。这样的对象可以在不同J2EE 环境(Web或EJB )、独立应用程序、测试环境之间重用。 组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: 核心容器:核心容器提供Spring 框架的基本功能。核心容器的主要组件是BeanFactory ,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC )模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

?Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如JNDI 、EJB 、电子邮件、国际化、校验和调度功能。 ?Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring 框架中。所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。Spring AOP 模块为基于Spring 的应用程序 中的对象提供了事务管理服务。通过使用Spring AOP ,不用依赖EJB 组件,就可以将声明性事务管理集成到应用程序中。 ?Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构 简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打 开和关闭连接)。Spring DAO 的面向JDBC 的异常遵从通用的DAO 异常 层次结构。 ?Spring ORM :Spring 框架插入了若干个ORM 框架,从而提供了ORM 的对象关系工具,其中包括JDO 、Hibernate 和iBatis SQL Map 。所有这些都遵从Spring 的通用事务和DAO 异常层次结构。 2.ibatis 架构图 ibatis 是一个基于Java的持久层框架。 iBATIS 提供的持久层框架包括SQL Maps 和Data Access Objects ( DAO ),同时还提供一个利用这个框架开发的 JPetStore 实例。

C#控件属性大全

Control类中定义的基础控件属如下(注意属性名称并不完全一致): 1.AllowDrop属性:以确定控件是否接受用户的拖动。如果允许其属性值为true,否我false(默认值)。对于 RichTextBox控件,本属性中是为false。 2.Anchor属性:获取或设置控件是男个边缘停靠在容器的边缘。本属性的值为AnchorStyles枚举值之一。 3.BackColor属性:以获取或设置本控件的背景颜色。本属性为环境属性,因此中是返回非空值。 4.BackgroundImage属性:以获取或设置控件中显示的背景图片。 5.BindingContext属性:以获取或设置对象的BindingContext。控件BindingContext对象用于为其中包含的所有数据绑定控件返回一个BindingManagerBese对象。BindingManagerBase对象使绑定到同一数据源的所有控件保持同步。例如:设置该对象Position属性,可以指定所有数据绑定控件指向的底层类表现。(不懂用到再说,宽宽心里方不下啊)。 6.Bottom属性:以获取本控件下边缘以容器客户区上边缘之间的距离。本属性的值等于Top属性与Height属性值只和。 7.Bounds属性:以获取或设置本控件的边界矩形。 8.CanFocus属性:以确定控件是否能接收焦点。如能,其值为true,否则为false。要使控件能接收输入焦点,控件必须具有句柄,并且Visible和Enabled属性必须为true。 9.CanSelect属性:以确定本控件是否可被选择。如可以其值为true,否则为false。如果控件的ControlStyles.Selectable被设置为true,并且它的容器控件和所有的父控件都可见并且被启用,这本属性将返回true。下面给出的CanSelect属性为false的windows窗体控件:Panel、GroupBox、PictureBox、ProgressBar、Splitter、Label、LinkLabel(当控件不存在连接时)。需要注意的是,派生自这些控件的控件也不能被选择。 10.Capture属性:以确定控件是否被鼠标捕获。如是值为true,否值为false (默认)。如true,它将接受鼠标的输入,而无论光标是否处于它的边界内。

微服务框架的设计与实现

微服务框架的设计与实现① 张晶1, 黄小锋2, 李春阳3 1(北京中电普华信息技术有限公司, 北京100192) 2(中国电建集团国际工程有限公司, 北京100048) 3(国网信息通信产业集团有限公司, 北京100031) 摘 要: 相对于传统单块架构, 微服务框架具有技术选型灵活, 独立部署, 按需独立扩展等优点, 更适合当前互联网时代需求. 但微服务架构的使用引入了新的问题, 如服务注册发现、服务容错等. 对微服务框架引入的问题进行分析, 并给出了微服务框架的一种实现方案, 在框架层面解决服务注册发现、服务容错等共性问题, 使业务系统开发人员专注于业务逻辑实现, 简化系统开发的难度, 提高开发效率. 关键词: 微服务框架; 服务注册; 服务发现; 服务容错 Design and Implementation of Microservice Architecture ZHANG Jing1, HUANG Xiao-Feng2, LI Chun-Yang3 1(Beijing China Power Information Technology Co. Ltd., Beijing 100192, China) 2(PowerChina International Group Limited, Beijing 100048, China) 3(State Grid Information & Telecommunication Industry Group Co. Ltd., Beijing 100031, China) Abstract: Compared with traditional single block architecture, microservice architecture has many advantages, such as flexible technology selection, independent deployment, and independent scalability more suitability for the current needs of the internet age, etc. But microservice architecture also introduces new problems such as service registration, service discovery, service fault tolerance. On the basis of the analysis for problems mentioned above, this paper proposes one implementation of microservice framework, which can solve service registration, service discovery, service fault tolerance and other common problems. Based on this, developers only need to focus on the development of business functions, so that it can simplify the difficulty of system development and improve development effectiveness. Key words: microservice architecture; service registration; service discover; fault tolerance 传统信息化系统的典型架构是单块架构(Monolithic Architecture), 即将应用程序的所有功能都打包成一个应用, 每个应用是最小的交付和部署单元, 应用部署后运行在同一进程中. 单块架构应用具有IDE友好、易于测试和部署等优势, 但是, 随着互联网的迅速发展, 单块架构临着越来越多的挑战, 主要表现在维护成本高、持续交付周期长、可伸缩性差等方面[1]. 微服务架构(Microservices)的出现以及在国内外的成功应用, 成为系统架构的一种新选择. 很多大型宝等都已经从传统单块架构迁移到微服务架构[2]. 微服务架构提倡将单块架构的应用划分成一组小的服务, 互联网公司如Twitter、Netflix、Amazon 、eBay、淘服务之间互相协调、互相配合, 为用户提供最终价值. 1 微服务架构 微服务架构是一种架构模式, 采用一组服务的方式来构建一个应用, 服务独立部署在不同的进程中, 不同服务通过一些轻量级交互机制来通信, 例如RPC、HTTP等, 服务可独立扩展伸缩, 每个服务定义了明确的边界, 不同的服务甚至可以采用不同的编程语言来实现, 由独立的团队来维护[3]. 相对于传统的单体应用架构, 微服务架构具有单个服务易于开发、理解和维护; 复杂度可控; 技术选 ①收稿时间:2016-09-18;收到修改稿时间:2016-11-03 [doi: 10.15888/https://www.doczj.com/doc/f31286054.html,ki.csa.005796]

所有控件都具有的属性

所有控件都具有的属性:1、Name: 表示在代码中用来标识一个控件的名字。 2、Enabled: 表示一个控件是否可以响应一个事件,即该控件可不可用。 值为true: 可以响应;值为false: 不可以看见。 3、Visible: 表示一个控件是否可见。值为true:可以看见;值为false: 不可以看见。 所有控件都具有的事件:1、KeyDown : 当用户按下键盘上一个键时发生的。 2、KeyUp : 在用户松开键盘上按下的键时发生的。 3、KeyPress : 在Key Down和Key Up事件之间发生。 4、MouseDown : 在鼠标被按下时触发的。 5、MouseUp :在用户松开鼠标键时发生的。 6、Click :在用户单击鼠标左键时发生的。 7、DblClick :在用户双击鼠标时发生的。 一、窗体 (Form)属性: 1、Caption: 表示窗体标题栏的文字。 2、BorderStyle: 一般情况下为默认值,若更改为下列值: 1)值为0:没有窗体标题栏 2)值为1:窗体运行之后不能改变大小 3、WindowState: 设置窗体的大小。 3)值为0:窗体正常大小 4)值为1:窗体最小化值为2:窗体最大化 4、BackColor: 表示窗体的背景颜色 事件 1、Initialize(初始化事件): 在窗体加载和显示之前触发,这个事件只触一次。 2、Load(加载事件): 用来完成窗体显示之前需要完成的动作。 3、Activate/Deactivate (激活/非激活事件):是用户在同一个应用程序的两个或多个窗体之间移动时触发的。 4、QueryUnload(条件卸载事件): 决定窗体是如何关闭的。 触发QueryUnload事件时Unload 的参数和因素有: 1)VbFormControlMenu值为0 :选中窗体控件菜单中的Close命令。 2)VbFormCode值为1 :从代码中调用Unload 语句。 3)VbAppWindows值为2 :终止当前的Windows操作系统。 4)VbFormMDIForm值为4 :因为终止MDI父窗体而导致MDI子窗体的终止。 5、Terminate(终止事件):在窗体的所有实例从内存中清除时发生,只触发一次。 方法: 1、Load:加载窗体,但不在屏幕上显示 2、Unload:卸载窗体,既从屏幕上也从内存中清除窗体。 3、Show:加载窗体并在屏幕上显示窗体。Show分为: 1)正常窗体:Form1.show 2)模式窗体(只能显示一个窗体):Form1.show.vbmodel 4、Hide:从屏幕上隐藏窗体,但是在内存中保存窗体的信息。 5、Move:移动窗体,必须有坐标值。 二、文本框(Text)属性: 1、Text:表示文本框里的文本。如:Text1.Text=”APPLE” 2、MaxLength:给定一个整数,表示文本框最多可以输入几个字符(英文与汉字长度一样,都占一个字节)。 3、PasswordChar: 显示密码时使用。 4、Locked: 值为True: 用户不可以编辑文本框中的文本。 False:文本框中的文本可以更改。 5、MultiLine: 值为True:文本可以显示在多行。 False:文本只能显示在一行。 6、BackColor:文本框的背景颜色。 7、BorderStyle:设置文本框的样式,有两个值(上机试一下)。 8、Font:设置文本中的字体。 9、ForeColor:设置文本框中字体的颜色。 事件 1、Click:点击文本框时发生。 2、Change:当文本框中的文本发生变化时发生。 3、LostFocus:当文本框失去焦点时发生。

组件化业务模型(CBM)介绍

组件化业务模型(CBM)介绍 软件复用的主要思想是组件化设计,实现松耦合的架构,业务设计同样追求这一理念,从业务流程的线性到以业务模快(组件)为中心,对业务活动进行分类聚合,达到业务组件化目的,这种方法就是CBM,接下来就从IBM的这篇介绍文章开始,做一个CBM方法、工具和案例的分享。 CBM:通向专业化的路径 市场环境日趋网络化。专业化经营不再是可有可无的选择,而是企业的必由之路。经济全球化不断冲破传统公司界面。企业的成功越来越依赖其绝对的竞争优势。在这种环境下企业得以生存的关键在于重点经营少数几个关键的业务。但是,如何才能使企业有效实现专业化呢? 流程优化的局限性 企业要想在今天得网络市场取得成功。流程优化是必要条件。而不是充分条件。进馆流程优化具有很大的吸引力,但是它

仍然会让公司的流程变动十分复杂而僵化。在获得了一定的初期收益后,收益递减归类开始发挥作用。边际效益的增幅衰减,同时,成本减低的效率会越来越低。 更糟的是,因为流程是在内部进行优化的,这实际上增加了各个业务很大的集成成本。在大型的、复杂的组织中,这一问题尤其尖锐。问题的部分原因是:基于流程的优化会在不同的流程中将各个公司的同一种业务活动进行不同的优化。因此,随着流程的改进,会出现各种延伸到多个业务部门的互连,这将提高复杂性,并导致集成成本以二次函数的比例上升。因此,随着流程优化的成熟,它实际上会最终增加企业的复杂性。其结果就是:更高的成本、更低的灵活性和更慢的市场反应速度。 经验数据已经证明了这一点,即公司规模和股本收益率之间几乎没有相关性。一些研究甚至发现者两者存在负相关。换句话说,公司越大,获得实际的股东价值实际更低(见图3)。好听些的解释是,这暗示着规模效应其实并不像多数管理者以为的那样明显。不好听的解释是:从历史上看,某种程度上大型公司的传统业务模式破坏了大量的股东价值。不管怎样,流程优化远远不是包治百病的灵丹妙药。

C builder教程大全

BorlandC++Builder5.0是Interpries(Borland)公司推出的基于C++语言的快速应用程序开发(RapidApplicationDevelopment,RAD)工具,它是最先进的开发应用程序的组件思想和面向对象的高效语言C++融合的产物。C++Builder充分利用了已经发展成熟的Delphi的可视化组件库(VisualComponentLibrary,VCL),吸收了BorlandC++5.0这个优秀编译器的诸多优点。C++Builder结合了先进的基于组件的程序设计技术,成熟的可视化组件库和优秀编译器,调试器。发展到5.0版本,C++Builder已经成为一个非常成熟的可视化应用程序开发工具,功能强大而且效率高。 C++Builder的特色: 1.C++Builder是高性能的C++开发工具 C++Builder是基于C++的,它具有高速的编译,连接和执行速度。同时,C++Builder具有双编译器引擎,不仅可以编译C/C++程序,还能编译ObjectPascal语言程序。 2.C++Builder是优秀的可视化应用程序开发工具 C++Builder是一完善的可视化应用程序开发工具,使程序员从繁重的代码编写中解放出来,使他们能将注意力重点放在程序的设计上,而不是简单的重复的劳动中。同时,它提供的完全可视的程序界面开发工具,从而使程序员对开发工具的学习周期大大缩短。 3.C++Builder具有强大的数据库应用程序开发功能 C++Builder提供了强大的数据库处理功能,它使的程序员不用写一行代码就能开发出功能强大的数据库应用程序,这些主要依赖于C++Builder众多的数据库感知控件和底层的BDE数据库引擎。C++Builder除了支持Microsoft的ADO(ActiveDataObject)数据库连接技术,还提供了一种自己开发的成熟的数据库连接技术——BDE(BorlandDatabaseEngine)数据库引擎。

窗体控件的属性

1. 窗体与控件 ● 窗体的重要属性 属性说明 Name窗体对象的名字,用于在代码中进行标示BackColor窗体的背景色 BackgroundImage窗体的背景图像 FormBorderStyle窗体的边框样式,有7个可选的值,默认是Sizable MaximizeBox确定窗体标题栏的右上角是否有最大化ShowInTaskbar确定窗体是否出现在Windows任务栏中StartPosition确定窗体第一次出现的位置 Text窗体标题栏中显示的文本 TopMost 只是窗体是否始终显示在此属性为TRUE的所有窗体之上,默认为False WindowState 确定窗体的初始化状态,包括Normal(普通),Maximized(最大化),Minimized(最小化) IsMiContatiner 设定窗体是否为父窗体 注: 子窗体.Mdiparent = this; 在菜单空间的MdiWindowListItem属性为窗口菜单项 事件 Load窗体加载事件MouseClick鼠标单击事件MouseDoubleClic k 鼠标双击事件MouseMove鼠标移动事件 KeyDown键盘按下事件 KeyUp键盘释放事件

●窗体方法 Close() 关闭窗口配合 Show() 显示窗口 ShowDialog() 模式化显示窗口 Hide() 隐藏窗体 ●标签的主要属性 Image 在标签上显示的图片 Text 在标签上显示的文本 ●文本框的主要属性 MaxLength 指定在文本框中输入的最大字符 Multiline 表示是否可在文本框中输入多行文本 PasswordChar 指定在做为密码框时,文本框中显示的字符,而不是实际输入的文本 ReadOniy 指定是否允许编辑文本框中的文本Text 与文本框关联的文本 ●组合框的主要属性 Items 组合框中的选项 DropDownStyle 定义组合框的风格,指示是否显示列表框部分,是否允许用户编辑文本框部分 Text 与组合框关联的文本 SelectedIndex 当前选定项目的索引号,列表框中的每个项都有一个索引号,从0开始 SelectedItem 获取当前选定的项●按钮的主要属性和事件 Enabe 布尔值,表示控件是否可用。True表示可用,False表示不可用,如果控件不可用,运行后显示为灰色 Text 按钮上显示的文本TextAlign 按钮上文本显示对齐方式

分布式服务框架Dubbo及相关组件集成

1.D ubbo介绍 1.1.简介 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。 Dubbo最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。 上图中,蓝色方块表示与业务有交互,绿色方块表示只对Dubbo内部交互。上述图所描述的调用流程如下: 1)服务提供方发布服务到服务注册中心; 2)服务消费方从服务注册中心订阅服务; 3)服务消费方调用已经注册的可用服务; 1.2.核心功能 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。 1.3.Dubbo能做什么? 透明化的远程方法调用:就像调用本地方法一样调用远程方法,只需简单配置,没有任何API 侵入。 软负载均衡及容错机制:可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 服务自动注册与发现:不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

cbuilder常用函数汇总

c b u i l d e r常用函数汇总 The Standardization Office was revised on the afternoon o f December 13, 2020

c++ builder 常用函数汇总 对话框类函数 打开对话框: if(OpenDialog1->Execute()) { Memo1->Lines->LoadFromFile(OpenDialog1->FileName); } 保存对话框: if(SaveDialog1->Execute()) { Memo1->Lines->SaveToFile(SaveDialog1->FileName); } 其它常用函数 ShowMessage(s);_str(); ShowMessage(s); } //--------------------------------------------------------------------------- SubString(index,count)//字符串裁减函数 Index为字符串的序号,从1开始,count为要裁减的长度,如:String s=Edit1->Text; ShowMessage(1,2)); IntToHex(n1,n2)//十进制转16进制,n1为要转换的数, n2为转换的16进制的位数,如: int i=255; ShowMessage(IntToHex(i,2)); StrToInt(s)//字符串转数字,如: String s="1234";

int i=4321 + StrToInt(s); ShowMessage(i); IntToStr(n)//数字转字符串,如: int i=4321; String s="1234" + IntToStr(i); ShowMessage(s);

Microsoft Visual FoxPro 9.0控件属性详解

VFP表单及控件属性一览表 引用于:https://www.doczj.com/doc/f31286054.html,/club/showpost.asp?id=133720&t=o 本文引用以上网站的内容,经整理和制作成此Word文档,希望对各位有所帮助! A Activate Event 当表单集、表单或页对象激活时、或显示工具栏对象时发生。 ActiveControl 引用一个对象上的活动控件。 ActiveForm 引用表单集或_SCREEN对象中的活动表单对象。 Addobject 在运行时向容器对象中添加一个对象。 AddProperty 向对象添加新属性。 Alignment 控件上正文水平对齐方式。 AlwaysOnBottom 防止其他窗口被表单窗口覆盖。 AlwaysOnTop 防止其他窗口遮挡表单。 Autocenter 指定Form对象在首次显示时,是否自动在VFP主窗口内居中。 AutoSize 控件是否根据正文自动调整大小。

BackColor 指定对象内文本和图形的背景色。 BackStyle 设置背景风格。 BaseClass 指定VFP基类的类名,被引用对象由此基类派生得到。 BorderStyle 指定对象的边框样式。 Box 在表单对象上绘制矩形。 BufferMode 指定记录是保守式更新还是开放式更新。 C Caption 指定对象标题文本。 Circle 在表单上绘制圆或弧。 Class 返回派生对象的类的类名。 ClassLibrary 指定用户自定义类库的文件名,该类库包含对象的类。 Click Event 当用户在一个对象上按下并释放鼠标按钮时,或用编程方式触发该事件时发生ClipControls 指定在Paint事件中,图形方法程序是否会重画整个对象,并且是否创建将非图形控件排除在外的剪切区域。 Closable 指定能否通过双击窗口菜单图标来关闭表单。 Cls 清除表单中的图形和文本。 Color Source 指定控件颜色的设置方式。 Comment 存储对象的有关信息。 ContinuousScroll 指定表单是平滑地滚动还是只在释放滚动框后才重绘。 ControlBox 指定在运行时刻表单或工具栏的左上角是否显示菜单图标。 ControlCount 指定容器对象中控件的数目。 Controls 用于存取容器对象中控件的数组。 CurrentX 指定下一个绘图方法程序的水平坐标。 CurrentY 指定下一个绘图方法程序的垂直坐标。 D DataSession 指定表单、表单集或工具栏能否在自己的数据工作期中运行,并拥有独立的数据环境。 DataSessionID 返回数据工作期标识,该标识用于识别表单集、表单或工具栏的私有数据工作期Dblclick Event 当用户连续快速地按住并释放左(主)鼠标按钮时发生。 Deactivate Event 当一个容器对象如表单,由于其所含对象没有焦点而不再活动时发生。DefoleLCID 指定在此表单上创建的ActiveX控件和可插入对象的默认本地ID,如果该值为零,SYS(3004)将指定默认的本地ID。 Desktop 指定表单是否包含在VFP主窗口中。 Destroy Event 释放一个对象时发生。 DragDrop Event 当拖放操作完成时发生。 DragOver Event 当拖动到一个控件到目标对象上时发生。 Draw 重新绘制表单对象。 DrawMocle 与颜色属性共同指定形状或线条在屏幕上的显示方式。 DrawStyle 指定用图形方法程序绘制时使用的线条样式。 DrawWidth 指定用图形方法程序输出的线条宽度。

ODBC_API常用函数介绍

ODBC API 常用函数诠释
作者: moonbreak, 出处:blog, 责任编辑: 唐小若,
2008-09-03 10:03
ODBC API 是一套复杂的函数集,可提供一些通用的接口,以便访问各种后台数据库。本 文详细介绍了 ODBC API 的常用十四个函数并列出在 PowerBuilder 中外部函数引用声明。 以下为 ODBC API 的常用十四个函数,先列出在 PowerBuilder 中外部函数引用声明:
nv(ref long phenv) library "odbc32.dll"
v(long henv) library "odbc32.dll"
ources(long henv,int fdirection,ref string szdsn,&
er pcbdsn,ref string szdescription,integer cbdescriptionmax,ref integer pcbdescription)library "odbc32.dll"
onnect(long henv,ref long hdbc)library "odbc32.dll"
ct (long hstmt,ref string szdsn,integer dsnlen,ref string
ng szpwd,integer pwdlen) library "odbc32.dll"
nect (long hdbc) library "odbc32.dll"
mt(long hdbc,ref long hstmt)library "odbc32.dll"
long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integ
pelen)library "odbc32.dll"
ns(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,in
pelen)library "odbc32.dll"
ol(long hstmt,integer colnum,integer datatype,ref string name,long maxlen,ref long actlen) library "odbc32.dll"
ong hstmt)library "odbc32.dll"
lenv,long hdbc,long hstmt,ref string sqlstate,ref long nativeerror,ref string errormsg,integer errormsgmax,ref integer e
mt(long hstmt,integer Options)library "odbc32.dll" 1、function integer SQLAllocEnv(ref long phenv) library "odbc32.dll" 、 参数: long phenv 引用传递的 long 类型参数, ref 保存该函数返回的 OBDC 环境的句柄。 存放在 phenv 中的值成为以后 OBDC API 函数调用的唯一标识符。 返回值:integer 成功时,返回 0,失败返回值小于 0。 函数功能:获取 ODBC 环境句柄。 2、function integer SQLAllocStmt(long hdbc,ref long hstmt)library 、 "odbc32.dll"

组件设计思路

组件设计思路解析(初稿) ---ST-TARY 一、设计思路(以20W单晶组件为例) 1、根据客户对组件电压要求来设计电池片片数; 例:客户要求组件18V,18V/0.5V=36PCS,其中0.5V为设计中理论单片电池片工作电压,实际中约为0.53V; 2、根据客户对组件功率要求来确定单片电池片的功率; 例:客户要求组件功率20W,20W/36pcs/0.98=0.57W, 20W:组件功率,36pcs:组件所需电池片数量,0.98:损耗系数; 3、根据客户定单要求及组件的机械强度来设计型材厚度及安装孔位置等; 1、如客户有特殊要求,需按照客户要求执行; 2、如客户要求按照公司自行设定,需按照行业标准进行; 设计型材厚度(一般情况,特殊情况除外): 50W以下可为型材厚度17mm-25mm,壁厚1.5mm-2mm; 50W-200W可为型材厚度35mm,壁厚2mm; 200W以上可为型材厚度40-50mm,壁厚2mm以上; 设计安装孔位置(一般情况,特殊情况除外): 20W以下有时采用圆形孔直径为5mm,长边各2个孔; 100W以下可采用7*12mm,长边2个孔,2个孔孔心间距离为组件长边一半 100W以上可采用9*14mm,长边4个孔,第一个孔与长边顶端为140mm,第 一个孔与第二个孔之间距离为250mm,所指均为孔心距离,四个孔对称,中间还需接地孔(直径为4mm)及标志; 孔心距离型材内侧为10mm; 4、根据组件电路要求来选用接线盒; 接线盒的选择是依据组件的功率、组件引线数、组件的电流、型材的高度等综合考虑,主要是确定二极管个数、二极管电流、接线盒高度是否会高出型材高度; 5、根据客户需求来设计组件外观尺寸。 1)、客户提供组件功率及电压,对组件尺寸未做规定,尽量按照贝立德集团公司目前规格书执行,这里不做详述; 2)、客户提供组件尺寸、组件功率、电压; 组件电压确定所需电池片数量,组件功率确定单片电池片功率 以组件630*280*25mm(20W)组件为例; 要确定电池片尺寸,就要考虑是36pcs电池片,那么有4种排列:2*18,3*12,4*9,6*6排列,2*18考虑使用125电池片,3*12考虑使用156电池片沿主栅方向1/2,4*9考虑使用125电池片,6*6没有适合的电池片 电池片长度有以下几种,供组件设计时参考:52、78、62.5、125、156mm; 现为20W单晶组件,那么假如选择2*18,125长度单晶电池片排列,下面,我们要考虑用倒角与直角混合使用,且保证组件美观性;求直角与倒角宽度各是多少(大倒角)?假如采用小倒角,自行分析。 (630mm-50mm-2mm*17-8*3mm)/18=29mm(初步计算得到)

各个控件的属性

常用控件的属性和事件: 一、窗体form 1、name 2、caption 窗体的标题 3、height、width、left、top 窗体的大小和位置 4、backcolor 背景颜色 5、forecolor 前景色 6、font 文字的字体、字号和字形 7、enabled 对象是否有效 8、visible 对象是否可见 9、picture 背景图片 10、controlbox 是否显示窗体的控制菜单框 11、maxbuttom/minbuttom 窗体的最大/最小化按钮属性 12、borderstyle 决定窗体的边框样式6个属性值 13、icon 用于设置窗体左上角的图标??? 二、一般类控件的使用 1、命令按钮Command style 0 or 1 是否能显示背景色或图片 picture 显示按钮的背景图片 default 和cancel 一个设置默认按钮,一个设置取消按钮 caption 2、标签Label alignment 对齐方式 autosize 自动改变大小 caption backstyle 背景是否透明 borderstyle 决定标签的边框类型 3、文本框Textbox text Multiline 是否能输入或显示多行文本 Scrollbars 设置文本框是否具有滚动条只有在Multiline 为ture 才有效Locked 文本是否允许编辑 Passwordchar 用于设置文本框的替代显示字符。 三、选择类控件 1、框架Frame caption enabled visible forecolor backcolor 2、单选按钮和复选框Optionbuttom Checkbox value style

BCB编程过程中的各种问题集锦

C++需要掌握:类、构造函数、析构函数、函数重载、运算法重载;私有成员、公有成员、保护成员的作用域。 一:安装 1、找到INSTALL文件夹里,双击Setup,注册码可从注册机中获得。安装时选择custome 方式,最好装在c盘(即使装在D盘,重做系统后也必须重装)。 2、注意一些选项勾选去掉就可以,不装VisiBroker和interbase,可以不备份uninstall信息。 3、安装完成后,重新启动计算机,打开BCB,会提示注册,再打开注册机,将所给的三个 代码全部输入到注册机中,注册机会自动给出第四个代码,将其粘贴到空白选项内,即可完成注册。 4、Win7系统注意:帮助文档安装不上的需要另外安装一个更新包,将帮助文档连接上即 可,此更新包叶连杰有。此外还会出现管理权限问题,可通过各盘右键单击,属性->安全->编辑中将所有用户的完全控制打钩即可。 二:开始运行 1、创建工程File->New->Application 2、修改Tabsize,菜单tools->Editor Option->Tab Stops=4 3、保存:创建一个工程目录,下建sourse子目录,用于存放工程源文件。会先提示保存 窗体和类的名字,一般名字前加U表示Unit,窗体文件前面加UForm,再保存工程名一般名字前面加个Pro。 4、文件存放位置:通过Project->Options->Directories/Conditionals来设置,将运行程序产生 的可执行文件、OBJ文件分别放在相应文件件内。通常Debug source path内输入$(BCB)\source\ ;Intermediate output 内输入debug(相应文件存入debug内),Final output 内输入exe。若要在上层文件夹内创建以上两个文件可在相应的输入前加..\ 。为了产生的文件可以在没有C++Builder的计算机上运行还要通过Project->Options->Linker内取消Use dynamicRTL选项的勾选、Project->Options->Packages内取消Build with runtime packages选项的勾选最后单击Complier->单击Release。 三:常用组件 1.Standard选项卡中 PopupMenu, Label, Edit, Memo, Button, CheckBox, RadioButton, ListBox, ComboBox, GroupBox,(RadioGroup, Panel) 2.Aditional选项卡中 StringGrid, LabelEdit, Chart(MaskEdit, Image, CheckListBox, ColorBox) 3.Win32选项卡中 PageControl, (DateTimePicker, StatusBar) 4.System选项卡中 Timer, MediaPlayer 5.Win31选项卡中

文本预览