mainpas.pas
来自「DELPHI 编写个人工作计划事务管理软件」· PAS 代码 · 共 1,690 行 · 第 1/5 页
PAS
1,690 行
for J := 0 to Item[I].SubItems.Count - 1 do begin
LVTS_String := LVTS_String + Trim(LVTS_List.Columns.Items[J + 1].Caption);
LVTS_String := LVTS_String + ' : ' + Trim(Item[I].SubItems.Strings[J]) + #13#10;
end;
LVTS_Str.Add(LVTS_String);
LVTS_Str.Add(#13#10);
end;
end;
end;
//---- 修改信息列表数值 ----//
Procedure TMainForm.ModifyListView(MLV_Str : TStringList);
var MLV_Item : TListItem;
I : Integer;
begin
MLV_Item := JihuaListView.Selected;
MLV_Item.SubItems.Clear;
With MLV_Item.SubItems do begin
for I := 1 to MLV_Str.Count - 1 do
Add(Trim(MLV_Str[I]));
end;
end;
Procedure TMainForm.DateRecordToStr(var DRT_Str : TStringList);//---- 数据记录到字串列表 ----//
begin
With DRT_Str do begin
Clear;
With ADOQuery do begin
First;
While(Not Eof) do begin
Add('编号 : ' + Trim(FieldByName('ID').AsString));
Add('星期 : ' + FormatDateTime('ddd', FieldByName('CreateDate').AsDateTime));
Add('姓名 : ' + Trim(FieldByName('JihuaName').AsString));
Add('工作计划 : ' + Trim(FieldByName('JihuaMain').AsString));
Add('创建时间 : ' + Trim(FieldByName('CreateDate').AsString));
Add('预计日期 : ' + Trim(FieldByName('EndDate').AsString));
Add('急缓情度 : ' + GetLevelString(FieldByName('LevelStatus').AsInteger));
Add('当前状况 : ' + Trim(FieldByName('JihuaStatus').AsString));
Add('完成日期 : ' + Trim(FieldByName('FinishDate').AsString));
Add('计划说明 : ' + Trim(FieldByName('JihuaRemark').AsString));
Add('计划备注 :' + Trim(FieldByName('Remark').AsString));
Add(#13#10);
Next;
Application.ProcessMessages;
end;
end;
end;
end;
//---- 显示与刷新列表框 ----//
Procedure TMainForm.FlushListView(FLV_Tag : Boolean);
begin
if FLV_Tag = TRUE then begin
DataSource.DataSet := Nil;
PageControl.Visible := FALSE;
JihuaListView.Visible := TRUE;
JihuaListView.Align := alClient;
FileOutput.Enabled := FALSE;
end else begin
DataSource.DataSet := ADOQuery;
PageControl.Visible := TRUE;
PageControl.Align := alClient;
PageControl.ActivePageIndex := 0;
JihuaListView.Visible := FALSE;
FlushResultBut(FALSE);
end;
end;
//---- 显示与刷新周选择 ----//
Procedure TMainForm.FlushWeekParle(FWP_Tag : Boolean);
begin
WeekSelPanel.Visible := FWP_Tag;
FWeekSpeedBut.Enabled := FWP_Tag;
NWeekSpeedBut.Enabled := FALSE;
LWeekSpeedBut.Enabled := FWP_Tag;
end;
//---- 显示与刷新排序列表 ----//
Procedure TMainForm.FlushSortBox(FSB_Tag : Boolean);
begin
ListAnLabel.Visible := FSB_Tag;
CB_RecordSort.Clear;
CB_RecordSort.ItemIndex := -1;
CB_RecordSort.Visible := FSB_Tag;
end;
//----- 刷新结果信息选框 ----//
Procedure TMainForm.FlushResultInfo(FRI_Tag : Boolean);
begin
ResultInfoLabel.Visible := FRI_Tag;
CB_ResultInfo.ItemIndex := 0;
CB_ResultInfo.Visible := FRI_Tag;
ListAnLabel.Visible := Not FRI_Tag;
CB_RecordSort.Visible := Not FRI_Tag;
end;
//----- 设定数据表格单元格宽度 ----//
Procedure TMainForm.FlushDBGridWith();
var I : Integer;
begin
For I := 0 to DBGrid.Columns.Count - 1 do
if I = 0 then DBGrid.Columns.Items[I].Width := 40
else if I = 2 then DBGrid.Columns.Items[I].Width := 135
else if I = 3 then DBGrid.Columns.Items[I].Width := 135
else if I = 4 then DBGrid.Columns.Items[I].Width := 60
else if I = 7 then DBGrid.Columns.Items[I].Width := 60
else if I = 8 then DBGrid.Columns.Items[I].Width := 135
else if I = 9 then DBGrid.Columns.Items[I].Width := 135
else DBGrid.Columns.Items[I].Width := 55;
end;
//---- 刷新结果标格 ----//
Procedure TMainForm.FlushResultListView(FRLV_Tag : Integer);
var FRLV_Str : TStringList;
I : Integer;
begin
TreeView.Items.Clear;
FRLV_Str := TStringList.Create;
Try
GetColumnsStr(FRLV_Tag, FRLV_Str); //==== 获取信息列表栏名 ====//
ResultListView.Clear;
ResultListView.Columns.Clear;
For I := 0 to FRLV_Str.Count - 1 do begin
With ResultListView.Columns.Add do begin
Caption := Trim(FRLV_Str[I]);
AlignMent := taCenter;
Case I + 1 of
1 : Width := 40;
2 : Width := 100;
3 : Width := 80;
4 : Width := 80;
5 : Width := 80;
6 : Width := 80;
7 : Width := 60;
8 : Width := 130;
else Width := 50;
end;
end;
end;
Finally
FRLV_Str.Free;
end;
end;
//---- 获取信息列表栏名 ----//
Procedure TMainForm.GetColumnsStr(GCS_Tag : Integer; var GCS_Str : TStringList);
begin
GCS_Str.Clear; //---- 清空字串列表 ----//
With GCS_Str do begin
Add('编号');
Add('工作计划');
Add('创建日期');
Add('预计日期');
Add('计划急缓');
Add('当前状况');
Add('完成日期');
Add('计划说明');
end;
end;
//---- 取得结果信息字串 ----//
Function TMainForm.GetInfoStr(GIS_String : String) : String;
begin
if CompareStr('创建日期', GIS_String) = 0 then Result := 'CreateDate'
else if CompareStr('预计日期', GIS_String) = 0 then Result := 'EndDate'
else if CompareStr('计划急缓', GIS_String) = 0 then Result := 'LevelStatus'
else if CompareStr('当前状况', GIS_String) = 0 then Result := 'JihuaStatus'
else if CompareStr('完成日期', GIS_String) = 0 then Result := 'FinishDate'
else Result := 'JihuaStatus';
end;
//---- 显示信息树内容 ----//
Procedure TMainForm.ShowInfoTree(SIT_Str : String);
var SIT_TempStr, Temp_Str : String;
Root_Name, Sun_Name : TStringList;
I, J : Integer;
Root_Node : TTreeNode;
begin
SIT_TempStr := GetInfoStr(Trim(CB_ResultInfo.Text));
Root_Name := TStringList.Create;
Sun_Name := TStringList.Create;
Try
if ADOQuery.Active = TRUE then begin
With ADOQuery do begin
First;
While(Not Eof) do begin
Temp_Str := Trim(FieldByName('JihuaName').AsString);
if Temp_Str = '' then Temp_Str := 'NULL';
if CheckStrHave(Temp_Str, Root_Name) = FALSE then
Root_Name.Add(Temp_Str);
if CompareText('CreateDate', SIT_TempStr) = 0 then begin
Temp_Str := FormatDateTime('yyyy-MM-dd',FieldByName(SIT_TempStr).AsDateTime);
if Temp_Str = '' then Temp_Str := 'NULL';
if CheckStrHave(Temp_Str, Sun_Name) = FALSE then Sun_Name.Add(Temp_Str);
end else begin
if CompareText('LevelStatus', SIT_TempStr) = 0 then begin
Temp_Str := GetLevelString(FieldByName(SIT_TempStr).AsInteger);
if Temp_Str = '' then Temp_Str := 'NULL';
if CheckStrHave(Temp_Str, Sun_Name) = FALSE then Sun_Name.Add(Temp_Str);
end else begin
Temp_Str := Trim(FieldByName(SIT_TempStr).AsString);
if Temp_Str = '' then Temp_Str := 'NULL';
if CheckStrHave(Temp_Str, Sun_Name) = FALSE then Sun_Name.Add(Temp_Str);
end;
end;
Next;
Application.ProcessMessages;
end;
end;
end;
For I := 0 to Root_Name.Count - 1 do begin
Root_Node := TreeView.Items.Add(Nil, Root_Name[I]);
For J := 0 to Sun_Name.Count - 1 do begin
TreeView.Items.AddChild(Root_Node, Sun_Name[J]);
end;
end;
Finally
Root_Name.Free;
Sun_Name.Free;
end;
end;
//---- 检查字符串是否存在 ----//
Function TMainForm.CheckStrHave(CSH_String : String; CSH_Str : TStringList) : Boolean;
var I : Integer;
begin
For I := 0 to CSH_Str.Count - 1 do begin
if CompareText(CSH_String, CSH_Str[I]) = 0 then break;
end;
if I >= CSH_Str.Count then Result := FALSE
else Result := TRUE;
end;
//==== 获取一行数据到字符列表 ====//
Procedure TMainForm.GetLineDateStr(var GLDS_Str : TStringList);
begin
With ADOQuery do begin
With GLDS_Str do begin
Clear;
Add(Trim(FieldByName('ID').AsString)); //==== 计划的序列编号爱 ====//
Add(Trim(FieldByName('JihuaMain').AsString)); //==== 工作计划内容来噢 ====//
Add(FormatDateTime('yyyy-MM-dd', FieldByName('CreateDate').AsDateTime));
Add(Trim(FieldByName('EndDate').AsString));
Add(GetLevelString(FieldByName('LevelStatus').AsInteger));
Add(Trim(FieldByName('JihuaStatus').AsString));
Add(Trim(FieldByName('FinishDate').AsString));
Add(Trim(FieldByName('JihuaRemark').AsString)); //==== 工作计划内容说明 ====//
end;
end;
end;
//==== 把一行数据加入结果信息 ====//
Procedure TMainForm.ShowDateToView(SDTV_Str : TStringList);
var I : Integer;
begin
if SDTV_Str.Count > 0 then begin
With ResultListView.Items.Add do begin
Caption := SDTV_Str[0];
For I:= 1 to SDTV_Str.Count - 1 do SubItems.Add(SDTV_Str[I]);
end;
end;
end;
{**************************************}
{******** 主窗体运行的过程代码 ********}
{**************************************}
procedure TMainForm.FormCreate(Sender: TObject);
var FC_CheckOk : Boolean;
FC_SqlStr : String;
begin
//==== 窗体创建时的代码 ====//
Share_Str := TStringList.Create; //==== 创建公用字串变量 ====//
Share_SqlStr := ''; //==== 全局查询变量清空 ====//
Share_DateCount := 0; //==== 计划任务编号统计 ====//
DateIsHave := FALSE; //==== 用于标记当天有无计划 ===//
FlushListView(TRUE); //==== 刷新信息显示控件 ====//
FlushWeekParle(FALSE); //==== 隐藏周统计面板件 ====//
FlushResultInfo(FALSE);
FlushSortBox(FALSE); //==== 隐藏排序操作控件 ====//
FlushResultBut(FALSE); //==== 隐藏修改删除操作 ====//
StatusBar.Panels[3].Text := FormatDateTime('hh:mm:ss', Time());
StatusBar.Panels[0].Text := '就绪';
StatusBar.Panels[1].Text := '';
StatusBar.Panels[2].Text := '';
FC_CheckOk := LoginDatabase();
if FC_CheckOk = FALSE then Exit;
if Share_LogName <> '' then begin
{-------------- 设置用户可操作性 -------------}
if Share_Level <= 2 then begin
ManageOption.Enabled := TRUE;
OptionToolBut.Enabled := TRUE;
end else begin
ManageOption.Enabled := FALSE;
OptionToolBut.Enabled := FALSE;
end;
FlushDataBut(TRUE);
StatusBar.Panels[4].Text := '#当前操作用户 : ' + Share_LogName + ' #姓名 : ' + Share_NameDesc + ' #权限 : ' + GetUseLevelStr(Share_Level);
{--------------- 统计总共有多少条记录 ---------------}
FC_SqlStr := 'SELECT COUNT(*) AS Sum_Part FROM JihuaTable';
FC_CheckOk := DataBaseSearch(FC_SqlStr, 1);
if FC_CheckOk = FALSE then begin
StatusBar.Panels[2].Text := '统计记录出错';
Exit;
end else Share_DateCount := ADOQuery.FieldByName('Sum_Part').AsInteger;
SearchWeekClick(SearchWeek); //==== 显示一周内工作计划 ====//
end else begin
FlushDataBut(FALSE);
StatusBar.Panels[4].Text := '用户没有登陆';
end;
end;
procedure TMainForm.SystemTimerTimer(Sender: TObject);
begin
//---- 运行系统时间 ----//
StatusBar.Panels[3].Text := FormatDateTime('hh:mm:ss', Time());
end;
{****************************************}
{******** 主菜单命令时的过程代码 ********}
{****************************************}
procedure TMainForm.FileNewsClick(Sender: TObject);
var FNC_CheckOk : Boolean;
FNC_Str : TStringList;
FNC_SqlStr, FNC_TempStr : String;
I : Integer;
begin
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?