⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucommentconstructorform.pas

📁 Delphi函数工厂。。。。。。。。。。。。。
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{-----------------------------------------------------------------------------}
{
{   单元名:  uCommentConstructorForm
{
{   作者:    杨勇(qoiwin@hotmail.com),阿文(zqw0117@sina.com)
{
{   描述:    本单元中封装了模块化的窗体模块 TCommentConstructorForm ,并用一个
{            从 TCustomModuleDialog 类继承的 TCommentDialog 封装了 TCommentConstructorForm
{            调用简单。直接使用 TCommentDialog.Execute 方法即可弹出窗口。
{
{   版本:   V 1.4
{
{   历史:    2003-04-28  V1.4 阿文做出部分修改(可以交给杨勇定稿了):
{                        1、把 TCommentContrucrorForm 类的 AddDescriptionCommentStr
{                           方法重命名为 AddCommentStr,并修改了该函数声明部分和实现
{                           部分中的内容。
{                        2、重写了TCommentContructorForm 类的 CreateCommentStrings
{                           方法,解决了添加注释的时候 mmComment 编辑框的闪烁问题。
{                           (使得闪烁并不明显了)
{                        3、修改了 TCommentContructorForm 类的 MakeMidStr 方法的
{                           声明部分,给参数 ContentStr 增加了 const 关键字。
{            2003-04-26  V1.3 阿文做出部分修改:
{                        1、优化并重写了 TCommentContructorForm 类的
{                           AddDescriptionCommentStr 方法,完成了全部字符分析
{                           并解决了超长连续不间断英文字符被输入后出现的死循环
{                           问题。
{            2003-04-25  V1.2 阿文做出部分修改:
{                        1、将函数MakeMidStr放到TCommentContructorForm类内部,
{                           使之成为TCommentContructorForm类的一个方法,这样做
{                           也是为了更好的封装。
{                        2、将TCommentContructorForm类的AddEmptyStr方法更名为:
{                           AddEmptyStrIfAlowed。
{                        3、为TCommentDialog类增加了一个OnHelpButtonClick事件。
{                        4、更改了TCommentContructorForm类的窗体布局。
{                        5、为TCommentContructorForm增加了AddDescriptionCommentStr
{                           方法,完成了对“用途与描述”字符换行的功能。
{            2003-04-25  V1.1 杨勇做出部分修改:
{                        1、提取反复用到的代码,集合成MakeMidStr函数,
{                           并做优化处理。
{                        2、添加TCommentContructorForm类的AddEmpty方法。
{                        3、优化并完成TCommentConstructorForm类的
{                           CreateCommentStrings方法。
{            2003-04-23  V1.0 阿文创建本单元 V1.0 版。
{
{   使用方法:
{            创建一个 TCommentDialog 的实例,然后调用Execute方法即可:
{            var
{              CommentDialog: TCommentDialog;
{            begin
{              CommentDialog := TCommentDialog.Create(Application);
{              try
{                CommentDialog.Execute; // 这一句将显示模块窗口
{              finally
{                 CommentDialog.Free;
{              end;
{            end;
{
{            注意:任何情况下,不要直接使用 TCommentContructorForm 类
{            这样才能保证完全遵守封装的原则。
{
{-----------------------------------------------------------------------------}
unit uCommentConstructorForm;

//{$I directives.inc}

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uCustomModuleForm, StdCtrls, ComCtrls, Spin;

type

  TCommentDialog = class; // Forward declare the TCommentDialog class.

{ ================================ }
{ TCommentConstructorForm 声明部分 }
{ ================================ }
  TCommentConstructorForm = class(TCustomModuleForm)
    pcCommentKinds: TPageControl;
    tbHeadComment: TTabSheet;
    tsCopyrightComment: TTabSheet;
    tsMethodComment: TTabSheet;
    gbAlignment: TGroupBox;
    lblLineWidth: TLabel;
    seLineWidth: TSpinEdit;
    lblCommentKeyChar: TLabel;
    cbCommentKeyChar: TComboBox;
    lblFillChar: TLabel;
    cbFillChar: TComboBox;
    cbEmptyLine: TCheckBox;
    gbCommentInfo: TGroupBox;
    lblUnit: TLabel;
    edtUnit: TEdit;
    lblAutor: TLabel;
    edtAuthor: TEdit;
    lblVer: TLabel;
    edtVer: TEdit;
    lblDate: TLabel;
    dtpDate: TDateTimePicker;
    lblDescription: TLabel;
    mmDescription: TMemo;
    lblLanguage: TLabel;
    cbLanguage: TComboBox;
    mmComment: TMemo;
    btnCopy: TButton;
    procedure FormShow(Sender: TObject);
    procedure AnySpinEditKeyPress(Sender: TObject; var Key: Char);
    procedure AnySpinEditChange(Sender: TObject);
    procedure edtUnitChange(Sender: TObject);
    procedure btnCopyClick(Sender: TObject);
    procedure mmCommentChange(Sender: TObject);
  private
    { Private declarations }
    FCommentDialog: TCommentDialog;
    procedure CreateCommentStrings;
    function MakeMidStr(EmptyStr: string; const ContentStr: string): string;
    procedure AddEmptyStrIfAlowed(const S: string);
    procedure AddCommentStr(ALineStr: string; const EmptyLine: string;
      const MaxLineLength: Integer);
  public
    { Public declarations }
  end;

{ ======================= }
{ TCommentDialog 声明部分 }
{ ======================= }
  TCommentDialog = class(TCustomModuleDialog)
  private
    FModuleForm: TCommentConstructorForm;
    FPageIndex: Integer;
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function Execute: Boolean; override;
  published
    property PageIndex: Integer read FPageIndex write FPageIndex
      default 0;
  end;

var
  CommentConstructorForm: TCommentConstructorForm;

implementation

{$R *.dfm}

resourcestring
  SDefultCommentDialogTitle = '注释生成器';

{ TCommentConstructorForm }

procedure TCommentConstructorForm.FormShow(Sender: TObject);
begin
  inherited;
  btnClose.SetFocus;
  dtpDate.Date := Date;
end;

procedure TCommentConstructorForm.AnySpinEditKeyPress(Sender: TObject;
  var Key: Char);
begin
  inherited;
  case Key of
    '0'..'9', #8:
    //发现这个begin..end可以去掉
    {begin
                    // do nothing
                  end; }
  else
    Key := #0;
    Beep;
  end;
end;

procedure TCommentConstructorForm.AnySpinEditChange(Sender: TObject);
begin
  inherited;
  try
    if StrToInt((Sender as TSpinEdit).Text) < (Sender as TSpinEdit).MinValue then
      (Sender as TSpinEdit).Text := IntToStr((Sender as TSpinEdit).MinValue);
  except
    (Sender as TSpinEdit).Text := IntToStr((Sender as TSpinEdit).MinValue);
  end;
  CreateCommentStrings;
end;

function TCommentConstructorForm.MakeMidStr(EmptyStr: string; const ContentStr: string): string;
var
  StrLen: integer;
begin
  StrLen := Length(ContentStr);
  Delete(EmptyStr, 5, StrLen);
  Insert(ContentStr, EmptyStr, 5);
  Result := EmptyStr;
end;

procedure TCommentConstructorForm.AddEmptyStrIfAlowed(const S: string);
begin
  if cbEmptyLine.Checked then
    mmComment.Lines.Add(S);
end;


const
  Blanks = '            ';


procedure TCommentConstructorForm.CreateCommentStrings;
const
  TCommentChar: array[0..2] of string =
  ('//%s//', '{%s}', '(*%s*)');
  TFillChar: array[0..5] of char =
  ('/', '=', '-', '#', '+', '*');
  TLanguageComment: array[0..1] of array[0..4] of string =
  (('Unit:       ', 'Author:     ',
    'Version:    ', 'Date:       ', 'Description:'),
    ('单元名:    ', '作者:      ',
    '版本:      ', '日期:      ', '用途与描述:'));
var
  FillCharCount, I: Integer;
  iLineStr, iEmptyLineStr, iDescriptionHead: string;
  FirstAndLastLineStr: string;
begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -