信息化 频道

<连载>Protel二次开发从入门到精通

. 一个文本编辑器服务器

  3.1 服务器功能

我们在Protel中可以新建一个文本文件,系统提供对文本的简单编辑功能,可是不能输入中文,我们能否建立一个类似原理图或印制板服务器一样的文本编辑器,本小节详细分析DemoText服务器,DemoText服务器建立一个文本编辑服务器,虽然简单,但是基本功能都具有了。

请见代码例子\SAMPLES\NO7\Servers\DemoText。

  3.2 代码分析
  3.2.1 main单元

这个main单元中有一点复杂,定义了TDemoTextServerModule类,此类从TServerModule类继承。此类实现CreateServer和DestroyServer方法,在CreateServer中,创建类的实例并加载命令表。

Procedure CreateServer;

Begin

ServerModule := TDemoTextServerModule.Create;

LoadCommandLauncherTable;

End;

{....................................................................................}

DestroyServer方法析构类的实例。

{....................................................................................}

Procedure DestroyServer;

Begin

If ServerModule <> Nil ThenServerModule.Free;

End;

{....................................................................................}

GetState_ModuleName设置服务器的名称为“DemoText”,即此文本编辑器服务器名称为“DemoText”。

{....................................................................................}

Function TDemoTextServerModule.GetState_ModuleName : String;

Begin

Result := 'DemoText';//服务器名称。

End;

{....................................................................................}

此类除了定义了以上一般服务器都有的两个方法和一个函数外,还定义了如下几个过程或函数:

Procedure CreatePanels;OverRide;

FunctionReturnWindowKindForFile (FileName: String) : String;OverRide;

FunctionReturnNewWindow(WindowKind : String) : TServerWindow; OverRide;

Procedure ReturnIconsAndBitmaps(WindowKind: String;

Var StandardBitmap: HBitmap;

Var TopLevelBitmap: HBitmap;

Var MainInstanceBitmap : HBitmap;

Var DocumentIcon : HIcon ); OverRide;

这几个过程或函数是起什么作用呢?

·CreatePanels

我们先看一看过程CreatePanels。创建CreateDemoTextPanel对象。

Procedure TDemoTextServerModule.CreatePanels;

Begin

CreateDemoTextPanel;

End;

此过程调用过程CreateDemoTextPanel,CreateDemoTextPanel是做什么呢?下面再分析。

·ReturnWindowKindForFile

//注意:此函数将根据参数FileName返回您想要加载的文件的类型。

Function TDemoTextServerModule.ReturnWindowKindForFile(FileName : String) : String;

Begin

Result := '';

If Pos('TXT',UpperCase(ExtractFileExtFromPath(FileName))) <> 0 ThenResult := 'DEMOTEXT';

//如果文件的扩展名称是TXT,则返回DEMOTEXT,否则返回空。

End;

·ReturnNewWindow

//建立一个从TServerWindow类继承的TDemoTextWindow类对象的实例。

Function TDemoTextServerModule.ReturnNewWindow(WindowKind : String) : TServerWindow;

Var

DemoTextWindow : TDemoTextWindow;

Begin

Result := Nil;

If StringsEqual(WindowKind ,'DEMOTEXT') Then

Begin

DemoTextWindow := TDemoTextWindow.Create(Application);

If DemoTextWindow <> Nil Then

Begin

DemoTextWindow.Show; //把窗体显示出来。

Result := DemoTextWindow; //返回实例句柄。

End;

End;

End;

ReturnNewWindow函数乍看不起眼,实际上,这就是整个服务器的核心入口,正是在此函数中,建立一个文本编辑器服务器类TDemoTextWindow的实例,此类是带有窗体的,所以使用TDemoTextWindow.Create(Application)来创建实例,DemoTextWindow.Show把窗体显示出来。具体TDemoTextWindow类是如何定义的,其中提供什么方法,我们下面再详细分析。

 

0
相关文章