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

📄 fmeditor.pas

📁 代码变更管理工具。当对程序代码进行变更以后可以用改工具记录变更内容
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{*******************************************************}
{  Name    : 编辑和添加窗口                             }
{  Purpose : 实现对记录的编辑和添加操作操作             }
{  Author  : 龚 立 宏                                   }
{  BegDate : 2008-05-05                               	}
{*******************************************************}

unit FmEditor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls,
  UtDataMng, UtPubData;

type
  TfEditor = class(TForm)
    lblDevlpName: TLabel;
    lblType: TLabel;
    cbbDevpName: TComboBox;
    cbbType: TComboBox;
    lblTime: TLabel;
    dtpDate: TDateTimePicker;
    lblHourAndSecend: TLabel;
    mmoNotes: TMemo;
    lblNotes: TLabel;
    dtpDateTime: TDateTimePicker;
    lblDevpNotes: TLabel;
    mmoDevpNotes: TMemo;
    lblAllBranch: TLabel;
    lblEditBranch: TLabel;
    lstNotEditBranch: TListBox;
    btnAddBranch: TButton;
    btnDelBtanch: TButton;
    lstEditBranch: TListBox;
    btnSave: TButton;
    btnLogout: TButton;
    procedure btnSaveClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnAddBranchClick(Sender: TObject);
    procedure btnDelBtanchClick(Sender: TObject);
    procedure btnLogoutClick(Sender: TObject);
  private
    dataMng      : TDataMng;
    arrBranch    : ArrRecBranch;
    arrDeveloper : ArrRecDevp;
    fileStream   : TFileStream;
    isAddOp      : Boolean;
      // 用户的操作类型
    logFilePath  : string;
      // 保存最近10条记录的文件路径
    
    bugID        : Integer;
      // 用户选中记录的ID号
    currDevpName : string;
      // 用户的当前姓名
    function  getLstBoxSelectIndex(listBox: TListBox): arrSelectBranch;
      // 获取选中项的下标
    function  getDevpNameById(const aId: Integer): string;
      // 根据开发人员的Id来取姓名
    function  getBranchNameById(const aId: Integer): string;
      // 根据分支的Id来获取分支名称
    function  getBranchIdByName(const aName: string): Integer;
      // 根据分支的名称来获取分支的Id
    function getArrBranchIndexByName(const aName: string): Integer;
      // 根据分支的名称来获取它在ArrBranch数组中的下标
    procedure writeBugInfo();
      // 写人一条bug信息
    procedure readLastBugInfo(var aStrList: TStringList);
      // 读出最近10条bug记录信息
  public
    function init(const aDataMng: TDataMng): Integer;
      // 初始化窗体,方便一次创建或者多次创建的不同调用方式
    function exectue(const aRecLog: PRecLog): Integer;
      // 执行方法, 编辑和新增均调用这个函数
      // 这个地方可以有一个约定。如果传入的 aRecLog.id 为-1 那么认为是新增,否则认为是编辑
  end;

var
  fEditor: TfEditor;

implementation

uses
  FmChgLogMngMain;

{$R *.dfm}
function  TfEditor.getLstBoxSelectIndex(listBox: TListBox): arrSelectBranch;
var
  arr : arrSelectBranch; // 保存选中项的序号
  i, j: Integer;
begin
  Result := nil;
  j      := 0;
  SetLength(arr, listBox.Items.Count);
  for i := Low(arr) to High(arr) do
  begin
    arr[i] := -1;
  end;

  for i := 0 to listBox.Items.Count - 1 do
  begin
    if listBox.Selected[i]  then
    begin
      arr[j] := i;
      inc(j);
    end;
  end;
  Result := arr;
end;
//------------------------------------------------------------------------------

function TfEditor.getBranchNameById(const aId: Integer): string;
var
  i: Integer;
begin
  Result := '';
  for i := Low(arrBranch) to High(arrBranch) do    // Iterate
  begin
    if aId = arrBranch[i].id then
    Begin
      Break;
    end;
  end;
  Result := arrBranch[i].name;
end;
//------------------------------------------------------------------------------

function  TfEditor.getBranchIdByName(const aName: string): Integer;
var
  i: Integer;
begin
  for i := Low(arrBranch) to High(arrBranch) do
  begin
    if aName = arrBranch[i].name then
    begin
      Break;
    end;
  end;
  Result := arrBranch[i].Id;
end;
//------------------------------------------------------------------------------

function TfEditor.getArrBranchIndexByName(const aName: string): Integer;
var
  i: Integer;
begin
  for i :=Low(arrBranch) to High(arrBranch) do
  begin
    if arrBranch[i].name = aName then
    begin
      Break;
    end;
  end;
  Result := i;
end;
//------------------------------------------------------------------------------

procedure TfEditor.writeBugInfo();
var
  i, logLength, tempFileHandle              : Integer;
  tempNotes, tempDevNotes, tempModType      : string;
  tempDevName, tempDateTime, tempBranchName : string;
  noteSignStr, devpnoteSignStr, tempStr     : string;   // 标记是‘内容’还是‘注释’
  tempStrLst : TStringList;
begin
  tempStrLst := TStringList.Create();
  readLastBugInfo(tempStrLst);  // 先读取已有的记录
  if tempStrLst.count >= 10 then        // 将已有的记录写如到文件,并淘汰最老的记录
  begin
    tempFileHandle := 1;
    try
      DeleteFile(logFilePath);
      tempFileHandle := FileCreate(logFilePath);
    Finally
      FileClose(tempFileHandle);
    end;
    fileStream := TFileStream.Create(logFilePath,fmOpenReadWrite);
    fileStream.Position := 0;
    try
      for i := 1 to tempStrLst.Count - 1 do
      begin
        tempStr := tempStrLst[i];
        logLength := Length(tempStr);
        fileStream.writebuffer(logLength ,sizeof(Integer));
        fileStream.writebuffer(tempStr[1],logLength);
      end;
    finally
      fileStream.Free();
    end;
  end;
  tempModType    := cbbType.Text;
  tempDevName    := cbbDevpName.Text;
  tempDateTime   := DateToStr(dtpDate.Date) + ' ' + TimeToStr(dtpDateTime.Time) ;
  tempNotes      := mmoNotes.text;
  tempDevNotes   := mmoDevpNotes.text;
  tempBranchName := '';

  for i := 0 to lstEditBranch.Count - 1 do
  begin
    tempBranchName := tempBranchName + ';' + lstEditBranch.Items[i] ;
  end;
  tempBranchName := tempBranchName + ';';

  tempStr := '|' + tempDevName + '|' + tempModType + '|' + tempDateTime;
  if tempNotes <> '' then
  begin
    noteSignStr := 'notes';
    tempStr     := tempStr +'|' + noteSignStr + '|' + tempNotes;
  end;
  if tempDevNotes <> '' then
  begin
    devpnoteSignStr := 'devpnotes';
    tempStr         := tempStr + '|' + devpnoteSignStr + '|' + tempDevNotes;
  end;
  tempStr := tempStr + '|' + tempBranchName+ '|';

  logLength           := Length(tempStr);
  fileStream          := TFileStream.Create(logFilePath,fmOpenReadWrite);
  fileStream.Position := fileStream.Size;

  try
    fileStream.writebuffer(logLength, sizeof(Integer));
    fileStream.writebuffer(tempStr[1],logLength);
  finally
    fileStream.Free();
  end;
end;
//------------------------------------------------------------------------------

procedure TfEditor.readLastBugInfo(var aStrList: TStringList);
var
  tempStr   : string;
  logLength : Integer;
begin
  fileStream := TFileStream.Create(logFilePath,fmOpenReadWrite);
  fileStream.Position := 0;
  try
    while fileStream.Position < fileStream.Size   do
    begin
      fileStream.readBuffer(logLength, sizeof(Integer));
      Setlength(tempStr, logLength);
      fileStream.readBuffer(tempStr[1], logLength);
      aStrList.Add(tempStr);
    end;
  finally
    fileStream.Free();
  end;
end;
//------------------------------------------------------------------------------

procedure TfEditor.btnSaveClick(Sender: TObject);
var
  i, j    : Integer;
  aLogRec : RecLog;    // bug结构传给数据库运用
  temptype, tempTimeStr : string;
begin
  if (mmoNotes.text = '') and (mmoDevpNotes.text = '') then
  begin
    ShowMessage('请填写‘内容‘项');

⌨️ 快捷键说明

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