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

📄 group.pas

📁 这是一个正式的项目工程
💻 PAS
字号:
unit Group;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, ImgList, ActnList, StdCtrls, Buttons, ComCtrls, ExtCtrls,
  wsTypes,wsCores,MainDB;

type
  TfrmGroup = class(TForm)
    PanelSecond: TPanel;
    Splitter1: TSplitter;
    Panel2: TPanel;
    TreeViewSelect: TTreeView;
    Panel3: TPanel;
    Panel4: TPanel;
    PanelBottom: TPanel;
    ActionList1: TActionList;
    ActionReturn: TAction;
    ImageListTreeView: TImageList;
    PanelFirst: TPanel;
    Label7: TLabel;
    Label8: TLabel;
    LabelProject: TLabel;
    LabelHourse: TLabel;
    BitBtn1: TBitBtn;
    ListBoxProject: TListBox;
    ListBoxHourse: TListBox;
    ActionOK: TAction;
    Label9: TLabel;
    Label10: TLabel;
    LabelCurrentHourse: TLabel;
    LabelCurrentProject: TLabel;
    Panel1: TPanel;
    Panel5: TPanel;
    ListBoxExtension: TListBox;
    BitBtnReturn: TBitBtn;
    Splitter2: TSplitter;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    Panel9: TPanel;
    ListBoxCandiate: TListBox;
    BitBtnRight: TBitBtn;
    BitBtnLeft: TBitBtn;
    ActionLeft: TAction;
    ActionRight: TAction;
    procedure FormCreate(Sender: TObject);
    procedure ActionList1Update(Action: TBasicAction;
      var Handled: Boolean);
    procedure ListBoxProjectClick(Sender: TObject);
    procedure ListBoxHourseClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TreeViewSelectChanging(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    procedure TreeViewSelectChange(Sender: TObject; Node: TTreeNode);
    procedure ActionLeftExecute(Sender: TObject);
    procedure ActionRightExecute(Sender: TObject);
    procedure ActionReturnExecute(Sender: TObject);
    procedure ActionOKExecute(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    ProjectInfo :TProject;
    Procedure ShowLeft();
    Function  HasGrouped():Boolean;
  public
    strGroupID:String;
    { Public declarations }
  end;

var
  frmGroup: TfrmGroup;

implementation

{$R *.DFM}
Procedure TfrmGroup.ShowLeft();
begin
   ListBoxExtension.Items.Clear;
   with dmMainDB.qryPublic do
   begin
     Close;
     SQL.Clear;
     Sql.Add('Select ExtensionID,CodeMeaning from GE,CodeDetail Where (ProjectID=:ProjectID) and (HourseID=:HourseID) and (GroupID=:GroupID) and (ExtensionID=ACode) and (Class=:strClass)');
     ParamByName('ProjectID').AsString:=ProjectInfo.ProjectID;
     ParamByName('HourseID').AsString:=ProjectInfo.HourseID;
     ParamByName('GroupID').AsString:=strGroupID;
     ParamByName('StrClass').AsString:='E';

     Prepare;
     try
       Open;
     except
       ExecSql;
     end;
     While Not Eof do
     begin
       ListBoxExtension.Items.Append(FieldByName('CodeMeaning').AsString+' ['+FieldByName('ExtensionID').AsString+']');
       Next;
     end;
     Close;
   end;
end;

Function  TfrmGroup.HasGrouped():Boolean;
begin
   with dmMainDB.qryPublic do
   begin
     Close;
     SQL.Clear;
     Sql.Add('Select ExtensionID from GE Where (ProjectID=:ProjectID) and (HourseID=:HourseID) and (ExtensionID=:ExtensionID)');
     ParamByName('ProjectID').AsString:=ProjectInfo.ProjectID;
     ParamByName('HourseID').AsString:=ProjectInfo.HourseID;
     ParamByName('ExtensionID').AsString:=GetID(ListBoxCandiate.Items.Strings[ListBoxCandiate.ItemIndex]);
     Prepare;
     try
       Open;
     except
       ExecSql;
     end;
     if Not IsEmpty then
       Result:=True
     else
       Result:=False;
   end;

end;

procedure TfrmGroup.FormCreate(Sender: TObject);
begin
  with dmMainDB  do
  begin
    if ViewProjectID.State=dsInactive then
      ViewProjectID.Open
    else
      ViewProjectID.First;
    if ViewGroupID.State=dsInactive then
      ViewGroupID.open
    else
      ViewGroupID.First;
    if ViewPHG.State=dsInactive then
      ViewPHG.Open
    else
      ViewPHG.First;
    if ViewExtensionID.State=dsInactive then
      ViewExtensionID.Open
    else
      ViewExtensionID.First;
    if ViewPH.State=dsInactive then
       ViewPH.Open
    else
       ViewPH.First;
    if ViewExtensionID.State=dsInactive then
       ViewExtensionID.open
    else
       ViewExtensionID.First;

    if tbGE.State=dsInactive then
       tbGE.open
    else
       tbGE.First;

  end;

  PanelFirst.Align:=alClient;
  PanelSecond.Align:=alClient;
  PanelFirst.Visible:=True;
  PanelSecond.Visible:=False;
  LabelHourse.Caption:='';
  LabelProject.Caption:='';
  strGroupID:='';
  with dmMainDB.ViewProjectID  do
  begin
    try
      ListBoxProject.Items.BeginUpdate;
      ListBoxProject.Items.Clear;
      While Not Eof do
      begin
        ListBoxProject.Items.Append(FieldByName('CodeMeaning').AsString+' ['+FieldByName('ACode').AsString+']');
        Next;
      end;
      if ListBoxProject.Items.Count<>0 then
      begin
        ListBoxProject.ItemIndex:=0;
        LabelProject.Caption:=ListBoxProject.Items.Strings[ListBoxProject.ItemIndex];
      end;

    finally

     ListBoxProject.Items.EndUpdate;
   end;
 end;
   dmMainDB.ViewProjectID.First;
   ListBoxHourse.Items.Clear;
   with dmMainDB.ViewPH do
   begin
     First;
     While Not Eof do
     begin
       ListBoxHourse.Items.Append(FieldByName('HourseIDLookup').AsString+' ['+FieldByName('HourseID').AsString+']');
       Next;
     end;
   end;
end;

procedure TfrmGroup.ActionList1Update(Action: TBasicAction;
  var Handled: Boolean);
begin
  ActionOK.Enabled:=(LabelProject.Caption<>'') and (LabelHourse.Caption<>'');
  ActionLeft.Enabled:=((ListBoxCandiate.ItemIndex>=0) and (strGroupID<>''));
  ActionRight.Enabled:=((ListBoxExtension.ItemIndex>=0) and (strGroupID<>''));

end;

procedure TfrmGroup.ListBoxProjectClick(Sender: TObject);
begin
  LabelProject.Caption:=ListBoxProject.Items.Strings[ListBoxProject.ItemIndex];
  dmMainDB.ViewProjectID.Locate('ACode',GetID(ListBoxProject.Items.Strings[ListBoxProject.ItemIndex]),[loCaseInsensitive]);
  ListBoxHourse.Items.Clear;
  with dmMainDB.ViewPH do
  begin
    First;
    While Not Eof do
    begin
      ListBoxHourse.Items.Append(FieldByName('HourseIDLookup').AsString+' ['+FieldByName('HourseID').AsString+']');
      Next;
    end;
  end;
  LabelHourse.Caption:='';

end;

procedure TfrmGroup.ListBoxHourseClick(Sender: TObject);
begin
  LabelHourse.Caption:=ListBoxHourse.Items.Strings[ListBoxHourse.ItemIndex];

end;

procedure TfrmGroup.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

procedure TfrmGroup.TreeViewSelectChanging(Sender: TObject;
  Node: TTreeNode; var AllowChange: Boolean);
begin
  if Node.Level=1 then
  begin
    AllowChange:=True;
  end
  else
  begin
    AllowChange:=False;
  end;
end;

procedure TfrmGroup.TreeViewSelectChange(Sender: TObject; Node: TTreeNode);
begin
  strGroupID:=GetID(Node.Text);
  ShowLeft();
end;

procedure TfrmGroup.ActionLeftExecute(Sender: TObject);
begin
if not HasGrouped() then
begin
  With dmMainDB.tbGE do
  begin

    Append;
    FieldByName('ProjectID').asString:=ProjectInfo.ProjectID;
    FieldByName('HourseID').AsString:=ProjectInfo.HourseID;
    FieldByName('GroupID').AsString:=strGroupID;
    FieldByName('ExtensionID').AsString:=GetID(ListBoxCandiate.Items.Strings[ListBoxCandiate.ItemIndex]);
    Post;
  end;
  ShowLeft();
end
else
begin

  ListBoxExtension.Hint:=ListBoxCandiate.Items.Strings[ListBoxCandiate.ItemIndex]+'已经分组了';
  ShowMessage(ListBoxCandiate.Items.Strings[ListBoxCandiate.ItemIndex]+'已经分组了');
end;
end;

procedure TfrmGroup.ActionRightExecute(Sender: TObject);
begin
  With dmMainDB.tbGE do
  begin
    First;
    Locate('ProjectID;HourseID;GroupID;ExtensionID',VarArrayof([ProjectInfo.ProjectID,ProjectInfo.HourseID,strGroupID,GetID(ListBoxExtension.Items.Strings[ListBoxExtension.ItemIndex])]),[loCaseInsensitive]);
    Delete;
  end;
  ShowLeft();
end;

procedure TfrmGroup.ActionReturnExecute(Sender: TObject);
begin
  Close;
end;

procedure TfrmGroup.ActionOKExecute(Sender: TObject);
var
  CurrentNode,RootNode:TTreeNode;
begin
  PanelFirst.Visible:=False;
  PanelSecond.Visible:=True;
  LabelCurrentProject.Caption:=LabelProject.Caption;
  LabelCurrentHourse.Caption:=LabelHourse.Caption;

  With frmGroup do
  begin
    ProjectInfo.ProjectName:=GetName(LabelProject.Caption);
    ProjectInfo.ProjectID:=GetID(LabelProject.Caption);
    ProjectInfo.HourseName:=GetName(LabelHourse.Caption);
    ProjectInfo.HourseID:=GetID(LabelHourse.Caption);
  end;
 //
  With dmMainDB do
  begin
    ViewPHG.Filter:='ProjectID='+''''+ProjectInfo.ProjectID+''''+ ' and HourseID='+''''+ProjectInfo.HourseID+'''';
    ViewPHG.Filtered:=True;
    try
      TreeViewSelect.Items.BeginUpdate;
      RootNode:=TreeViewSelect.Items.Add(nil,ProjectInfo.HourseName +' ['+ProjectInfo.HourseID+']');
      RootNode.ImageIndex:=0;
      RootNode.StateIndex:=1;
      RootNode.SelectedIndex:=3;
      ViewPHG.First;
      while not ViewPHG.Eof do
      begin
        CurrentNode:=TreeViewSelect.Items.AddChild(RootNode,ViewPHG['GroupIDLookup']+' ['+ViewPHG['GroupID']+']');
        CurrentNode.ImageIndex:=0;
        CurrentNode.SelectedIndex:=3;
        ViewPHG.Next;
      end;
    finally
      TreeViewSelect.FullExpand;
      TreeViewSelect.Items.EndUpdate;
    end;
  end;
  if (TreeViewSelect.TopItem<>nil) and  (TreeViewSelect.TopItem.getFirstChild<>nil) then
  begin
    strGroupID:=GetID(TreeViewSelect.TopItem.getFirstChild.Text);
    TreeViewSelect.TopItem.getFirstChild.Selected:=True;
  end;
  ShowLeft();

   ListBoxCandiate.Items.Clear;
   with dmMainDB.ViewExtensionID do
   begin
     First;
     While Not Eof do
     begin
       ListBoxCandiate.Items.Append(FieldByName('CodeMeaning').AsString+' ['+FieldByName('ACode').AsString+']');
       Next;
     end;
   end;
end;

procedure TfrmGroup.FormDestroy(Sender: TObject);
begin
  with dmMainDB  do
  begin
    if ViewProjectID.State<>dsInactive then
       ViewProjectID.Close;
    if ViewGroupID.State<>dsInactive then
       ViewGroupID.Close;
    if ViewPHG.State<>dsInactive then
       ViewPHG.Close;
    if ViewPH.State<>dsInactive then
       ViewPH.Close;
    if ViewExtensionID.State<>dsInactive then
       ViewExtensionID.Close;
    if tbGE.State<>dsInactive then
       tbGE.Close;
  end;
end;

end.

⌨️ 快捷键说明

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