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)