信息化 频道

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

Begin

FontDialog.Font := Memo.Font;

If FontDialog.Execute Then

Begin

Memo.Font := FontDialog.Font;

Memo.RePaint;

End;

End;

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

Procedure TDemoTextWindow.SetupPrinter(Parameters : PChar);

Begin

PrinterSetupDialog.Execute;//设置打印机。

End;

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

Procedure TDemoTextWindow.Undo(Parameters : PChar);

Begin

Inherited Undo(Parameters);//undo功能。

ShowInfo('Undo没有实现');

End;

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

Procedure TDemoTextWindow.MemoChange(Sender: TObject);

Begin

DocumentHasChanged := True;//如果Memo中文字修改了,DocumentHasChanged为真。

End;

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

//窗体激活事件。

Procedure TDemoTextWindow.FormActivate(Sender: TObject);

Begin

Memo.SetFocus; //memo控件获得焦点。

UpDateEnvironment;//更新环境。

End;

方法中Undo和Redo都没有实现,您可以进一步改进来实现,我是简单弹出一个对话框,说明没有实现。

我们上面说过,TDemoTextWindow类中定义的方法和Command中所说方法很象,只是方法多一点,那么此类和TAbstractServerWindow类有什么关系呢?

我们看到此类是从TCommonWindow类继承的。TCommonWindow类在单元Common定义,恰好,TCommonWindow类从TAbstractServerWindow继承。

至此,类的继承关系图就明确了,从TServerWindow类开始继承,共四层,分别为。

TServerWindow

|TAbstractServerWindow

|TCommonWindow

|TDemoTextWindow

TCommonWindow类中所有的方法也没有具体实现,TCommonWindow类从TAbstractServerWindow类继承,TCommonWindow类不再是抽象类,但此类对父类中抽象的方法只是简单地继承,并没有实现。与父类相比,此类增加了Destroy、PrepareForDrawing、EnableOrDisableMenuItems、PerformAutoZoom、FileLoad、FileSave、GetState_ChildWindowCount、GetState_ChildWindowName和UpdateEnvironment等过程或函数。

  3.2.6编辑器窗体面板

让我们回头看一下Main单元中CreatePanels过程,其中调用CreateDemoTextPanel过程,CreateDemoTextPanel实现了什么功能呢?打开Panel1,此时会同时打开一个窗体,如图7-6所示。在图中,我们可以看到有三个按扭,打开单元,可以看到每一个按扭都定义了OnClick事件。


图7-6  编辑器面板

  3.2.6.1 按扭的Onclick事件

    ·Preference按扭OnClick事件

Procedure TDemoTextPanel.PreferenceClick(Sender: TObject);

Begin

MessageRouter_sendCommandTOModule('DemoText:SetupPreferences',Nil,0,

CurrentWindow.Handle);

//Preference按扭的OnClick事件,用来执行DemoText服务器中的SetupPreferences进程。

End;

·SetupPrinter按扭OnClick事件

Procedure TDemoTextPanel.SetupPrinterClick(Sender: TObject);

Begin

MessageRouter_sendCommandTOModule('DemoText:SetupPrinter',Nil,0,

CurrentWindow.Handle);

//SetupPrinter按扭的OnClick事件,用来执行DemoText服务器中的SetupPrinter进程,即设置打印机。

End;

·Print按扭OnClick事件

Procedure TDemoTextPanel.PrintClick(Sender: TObject);

Begin

MessageRouter_sendCommandTOModule('DemoText:PrintDocument',Nil,0,

CurrentWindow.Handle);

//Print按扭的OnClick事件,用来执行DemoText服务器中的PrintDocument进程,打印文档。

End;

  3.2.6.2 CreateDemoTextPanel过程

CreateDemoTextPanel过程就是构造一个TDemoTextPanel类的实例。代码实现如下:

//构造过程,对象构建完成后,设CurrentWindow为nil。

Procedure CreateDemoTextPanel;

Begin

DemoTextPanel := TDemoTextPanel.Create(Application);

If DemoTextPanel <> Nil Then

Begin

DemoTextPanel.CurrentWindow := Nil;

End;

End;

此至,主要代码都详细说明完成了,我们把服务器安装到Protel中,象安装一般的服务器一样,再定义一菜单来调用服务器中的命令,如Clear,执行一下,看有什么发生,实际上,什么都没有发生,真是奇怪!(e-works)

0
相关文章