📄 ucommentconstructorform.pas
字号:
{-----------------------------------------------------------------------------}
{
{ 单元名: 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 + -