Delphi Menu Designer(菜单设计器)之二

接着上一讲,我们继续我们的ScratchPad程序的继续编写。

编写代码

有了所有这些菜单项但没有代码使它工作。要有大量工作来完成这些,实际上很容易。大多数所需代码使TMemo类已有的部分。所要做的是在菜单处理程序中调用TMemo方法。还要做一些其他的事情,但增加的大部分代码是以前见过的。

1、增加组件到窗体

在编写代码之前,需要在增加OpenDialog与SaveDialog组件到窗体:

(1)把OpenDialog组件放到窗体上,将其Name属性改为OpenDialog

(2)把SaveDialog组件放到窗体上,将其Name属性改为SaveDialog

(3)把MainMenu、OpenDialog与SaveDialog图标在窗体上排成一行。

0165

 

2、写主菜单项的代码

上面的添加组件非常简单。现在继续给菜单项写代码。开始,我先编写【File | Exit】菜单项代码(这是最容易的!)。要保证Menu Designer已经关闭,不至于混淆Menu Designer和Form Designer。

(1)从Form Designer主菜单选择【File | Exit】,Code Editor会出现在前端,并且显示FileExitClick事件处理程序。

(2)光标已经定位在FileExitClick事件处理程序中,在光标处键入代码:

procedure TMainForm.FileExitClick(Sender: TObject);
begin
  Close;
end;

Note

上面的2步里面用了Close来关闭窗体。因为这是应用程序的主窗体,它是有效的。若想从程序的任意地方中断应用程序,应使用:

  Application.Terminate;

这个代码保证程序是中断的,不管当前哪个窗体是开的。

就是这样容易。在做一个,让读者自己完成其余部分。

(1)从主菜单选择【Edit | Cut】,Code Editor出现在顶端,并显示EditCutClick事件处理程序。

(2)输入以下代码:

procedure TMainForm.EditCutClick(Sender: TObject);
begin
  Memo.CutToClipboard;
end;

对于Cut菜单就是这样一句话就搞定了,也许没有全部意识到这点,VCL在幕后做了许多工作。框架的整个思想使程序员避免低水平的细节负担。

 

3、结尾工作

像Delphi那样的程序有趣的一个方面是很少看到整个程序。Delphi方面地提供了自理具体事件的代码段,因此通常看到的是程序小块。下面的清单中显示ScratchPad程序到此为止的主窗体单元。类声明完全由Delphi产生。遵循刚做的例子来写其余的菜单项代码。

 

4、详细解释和说明

【File | New】菜单项代码

procedure TMainForm.FileNewClick(Sender: TObject);
var
  Res: Integer;
begin
  { 新建一个文件,先检查当前文件是否已经保存,如果没有保存
  怎提示消息是否保存,选择“是”则保存当前文件
  选择“否”则忽略保存当前文件 }
  if Memo.Modified then
  begin
    Res := Application.MessageBox('The current file has changed. Save changes?',
      'ScratchPad Message', MB_YESNOCANCEL);
    { 如果点击“是”则先保存当前的文件}
    if Res = IDYES then
      FileSaveClick(Sender);
    { 如果点击“取消”则什么也不做}
    if Res = IDCancel then
      Exit;
  end;

  { 删除Memo已有的字符}
  if Memo.Lines.Count > 0 then
    Memo.Clear;
  { 设置SaveDialog的FileName属性为空字符串,
  为的是让我们知道文件还没有存储 }
  SaveDialog.FileName := '';
end;

【File | Open…】菜单项代码

procedure TMainForm.FileOpenClick(Sender: TObject);
var
  Res: Integer;
begin
  { 打开一个文件,先检查当前文件是否已经保存,如果没有保存
  怎提示消息是否保存,选择“是”则保存当前文件
  选择“否”则忽略保存当前文件 }
  if Memo.Modified then
  begin
    Res := Application.MessageBox('The current file has changed. Save changes?',
      'ScratchPad Message', MB_YESNOCANCEL);
    if Res = IDYES then
      FileSaveClick(Sender);
    if Res = IDCANCEL then
      Exit;
  end;

  { 执行打开文件对话框选择要打开的文件
  点击“确定”后,用LoadFromFile方法打开文件,
  首先,清楚FileName属性}
  OpenDialog.FileName := '';
  if OpenDialog.Execute then
  begin
    if Memo.Lines.Count > 0 then
      Memo.Clear;
    Memo.Lines.LoadFromFile(OpenDialog.FileName);
    SaveDialog.FileName := OpenDialog.FileName;
  end;
end;

 

【File | Save…】

procedure TMainForm.FileSaveClick(Sender: TObject);
begin
  { 先判断SaveDialog.FileName属性是否为空,
  如果不为空,则直接调用SaveToFile方法,否则调用SaveDialog对话框保存}
  if SaveDialog.FileName <> '' then
  begin
    Memo.Lines.SaveToFile(SaveDialog.FileName);
    { 设置Memo.Modified为False,一旦保存完成的话}
    Memo.Modified := False;

  end else
    { 如果FileName属性为空,则调用另存为对话框}
    FileSaveAsClick(Sender);
end;

 

【File | Save As…】

procedure TMainForm.FileSaveAsClick(Sender: TObject);
begin
  { 显示SaveDialog对话框保存文件,
  并且设置Memo.Modified为False,一旦保存完成}
  SaveDialog.Title := 'Save As...';
  if SaveDialog.Execute then
  begin
    Memo.Lines.SaveToFile(SaveDialog.FileName);
    Memo.Modified := False;
  end;
end;

 

【Edit | Undo】

procedure TMainForm.EditUndoClick(Sender: TObject);
begin
  { TMemo组件没有提供Undo撤销方法,
  因此只能通过发送WM_UNDO消息来实现}
  SendMessage(Memo.Handle, WM_UNDO, 0, 0);
end;

 

【Edit | Select All】

procedure TMainForm.EditSelectAllClick(Sender: TObject);
begin
  { 调用Memo.SelectAll方法实现全选功能}
  Memo.SelectAll;
end;

 

【Edit | Copy】

procedure TMainForm.EditCopyClick(Sender: TObject);
begin
  { 调用Memo.CopyToClipboard方法}
  Memo.CopyToClipboard;
end;

 

【Edit | Paste】

procedure TMainForm.EditPasteClick(Sender: TObject);
begin
  { 调用Memo.PasteFromClipboard方法}
  Memo.PasteFromClipboard;
end;

 

【Edit | Word Wrap】

procedure TMainForm.EditWordWrapClick(Sender: TObject);
begin
  { 设置Memo.WordWrap属性来实现自动换行功能。}
  Memo.WordWrap := not Memo.WordWrap;
  EditWordWrap.Checked := Memo.WordWrap;
  if Memo.WordWrap then
    Memo.ScrollBars := ssVertical
  else
    Memo.ScrollBars := ssBoth;
end;

 

现在是等待已久的时刻

在为菜单项目建立了事件处理程序后,准备 运行程序。点击Run按钮,程序就编译并运行。如果出现了编译错误,请仔细比较上面的代码进行修改,也许会进行多次修改处理,最终使它能成功运行。

当程序运行时,会发现程序并不是非常精美,大部分像Windows Notepad。尽管在完成前有一些东西要加上去,还是有了相当好的开始。下图显示了正在运行的ScratchPad程序。

0166

以上代码均在Delphi7中测试通过,本节示例代码下载:ScratchPad(菜单设计器之二).rar

转载于:https://www.cnblogs.com/pchmonster/archive/2012/01/17/2325003.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大家用惯了BSskin和VCLskin,但是这个跟专业! 支持的开发语言 Borland Delphi 4/5/6 Borland Delphi 7 Borland Delphi 8 Borland Delphi 2005 Borland Delphi 2006 CodeGear Delphi 2007 支持的操作系统 Windows Vista Wndows 2000/XP/2003 Windows NT4.0 Windows Me Windows 98/98SE Windows 95 版本信息 当前版本:3.0 文件大小:24.9MB 更新日期:2006-12-6 下载次数:22670 软件概述 Skin++ For Delphi目前全面支持Delphi4、Delphi5、Delphi6、Delphi7、Delphi8、Delphi2005、Delphi2006。 迄今为止,Delphi支持4种类型的应用程序: 1、VCL Forms Application – Delphi for Win32 (该类型在Delphi4/5/6/7/2005/2006所有版本包含); 2、VCL Forms Application – Delphi for .Net (该类型在Delphi8/2005/2006中包含); 3、Windows Forms Application – C# Builder (该类型在Delphi2005/2006中包含); 4、Windows Forms Application – Delphi for .Net (该类型在Delphi8/2005/2006中包含)。 Skin++对以上4种Delphi程序类型做了全面的支持。 试用版本描述与运行截图 1.在本安装盘中,包含了Delphi的各个版本(D6,D7,D8,D2005,D2006)Skin++测试例子; 2.关于如何使用Skin++,请参考文档《Skin++ For Delphi [All Edition]使用帮助》; 3.要查询Skin++所有的接口,请参考文档《Skin++接口描述》; 4.本安装盘提供一套试用皮肤PixOS.ssk,正式版用户将获得网站上更多更精美的皮肤。并可获得定期更新; 5.Skin++正式版中提供强大的皮肤设计工具Skin++Builder。 该工具完成皮肤所有的设计工作,并可以全自动导入Windows主题、第三方主题; Skin++Builder使用详情请参考《Skin++Builder Help》; 6.案例说明: 我们以Delphi2006 VCL Win32的测试例子为例,描述其组成。 打开\Delphi 2006\VCL Forms Application - Delphi For Win32\目录中的MDIAPP.exe 该例子是一个MDI类型的程序。主窗口部分演示Skin++在MDI方面处理的各个细节。 如:主菜单条、主弹出菜单、系统菜单、工具条、状态条、MDI客户区、MDI子窗口、MDI子窗口最大化后等各个部分的换肤细节。 Skin++ 3.0 可以对皮肤进行动态的色调设置 这个功能可以使您的程序可以瞬间拥有N套色调的皮肤。 更改色调样例1: 我们分以下几个页面对Delphi的全部控件进行了演示: Buttons、Static、Controls with ScrollBar(带滚动条的控件)、Splitter、TabControls、TrackBar & Progress、Misc Controls、Dialog、DataControls 6.1 Buttons 该部分我们演示了Skin++对Delphi的各种类型的按钮进行的换肤支持, 包括BitBtn按钮、SpeedButton、Tbutton、CheckBox、RadioBox 在该部分,还演示了对按钮进行多风格的换肤效果,“Style 2”按钮和其他按钮不同,呈现了其特有样式。 这种效果一般用在网络电话、多媒体软件、网络聊天等需要同时支持多种按钮风格的地方。 每个按钮具有其固定的5中状态:正常、按下、高量、禁用、默认。在该窗体中演示了每种按钮的5中状态。 并且在Skin++ 3.0 中,支持Focus的效果。通过Tab或方向键可以看到焦点在每个按钮上移动。 6.2 Static 该部分演示了Skin++ 对Label、GroupBox、右键菜单、Panel、FlowPanel、GridPanel等控件的支持。 值得一提的是,Skin++对Label的支持是彻底,并且不像其他的换肤软件需要在窗体上放置一个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值