📄 fmeditor.pas
字号:
{*******************************************************}
{ 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 + -