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 + -
显示快捷键?