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

📄 sbgl_ref.pas

📁 机房管理系统delphi源代码
💻 PAS
字号:
unit sbgl_ref;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  Tf_sbgl_ref = class(TForm)
    xsgb: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    CheckBox8: TCheckBox;
    CheckBox9: TCheckBox;
    CheckBox10: TCheckBox;
    CheckBox11: TCheckBox;
    CheckBox12: TCheckBox;
    CheckBox13: TCheckBox;
    CheckBox14: TCheckBox;
    CheckBox15: TCheckBox;
    CheckBox16: TCheckBox;
    GroupBox2: TGroupBox;
    CheckBox2: TCheckBox;
    sour_list: TListBox;
    dest_list: TListBox;
    s2ds: TSpeedButton;
    d2ss: TSpeedButton;
    s2da: TSpeedButton;
    d2sa: TSpeedButton;
    ClickCheck: TCheckBox;
    CheckBox0: TCheckBox;
    ups: TSpeedButton;
    downs: TSpeedButton;
    ok: TBitBtn;
    cancel: TBitBtn;
    sl_c: TListBox;
    dl_c: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    CheckBox17: TCheckBox;
    Label3: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure RefQu;
    procedure Init;
    procedure ClickCheckClick(Sender: TObject);
     procedure sour_listDblClick(Sender: TObject);
    procedure dest_listDblClick(Sender: TObject);
    Function CheckExistSour(s : string) : integer;
    Function CheckExistDest(s : string) : integer;
    procedure s2dsClick(Sender: TObject);
    procedure d2ssClick(Sender: TObject);
    procedure s2daClick(Sender: TObject);
    procedure d2saClick(Sender: TObject);
    procedure upsClick(Sender: TObject);
    procedure downsClick(Sender: TObject);
    procedure searchClick(Sender: TObject);
    procedure okClick(Sender: TObject);
    procedure cancelClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const numcount = 17;
var
  f_sbgl_ref: Tf_sbgl_ref;
  dis_pro : array[0..numcount] of TCheckBox;  //数组控件
  CheckFlag : integer;  //CheckBox是(1)否(0)处于人工修改状态
  i : integer;

implementation

uses sbgl, data, gbv;

{$R *.DFM}

procedure Tf_sbgl_ref.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  f_sbgl.Enabled:=True;
end;

procedure Tf_sbgl_ref.RefQu();
var dis_sql : string;  //SQL语句
    setnum : string;
    yypd : integer;
    wdate : TDateTime;
begin  //显示数据库
  wdate:=date;
  //预约判断
  with ds_data.Qu_zwb do
  begin
       Close;
       Open;
       for i:= 1 to RecordCount do
       begin
            //判断预约
            setnum:=FieldByName('setnum').AsString;
            With ds_data.Qu_yypd do
            begin
                 Close;
                 ParamByName('setnum').value:=setnum;
                 ParamByName('sjdate').AsDate:=wdate;
                 Open;
                 yypd:=RecordCount;
                 Close;
            end;

            //预约更新
            with ds_data.Qu_upf do
            begin
                 Close;
                 ParamByName('setnum').value:=setnum;
                 Open;
                 Edit;
                 FieldByName('fused').AsBoolean:=(yypd>0);
                 Post;
                 Close;
            end;
            Next;  //下一个座位
       end;
       Close;  //关闭座位表数据库
  end;

  ds_data.Qu_sbdp.Open;
  ds_data.Qu_sbsys.Open;

  //第一项必须显示
  dis_sql:='Select '+ds_data.Qu_sbsys.FieldByName('ch1').AsString+' '+
                     ds_data.Qu_sbsys.FieldByName('ch2').AsString;
  ds_data.Qu_sbdp.Next;
  ds_data.Qu_sbsys.Next;

  //显示其它各项
  for i:=1 to numcount do
  begin
       if ds_data.Qu_sbdp.FieldByName('display').AsBoolean then
          dis_sql:=dis_sql+','+ds_data.Qu_sbsys.FieldByName('ch1').AsString+' '+
                   ds_data.Qu_sbsys.FieldByName('ch2').AsString;
       if i=1 then  //记录setnum项的状态
          f_gbv.setnum.Checked:=ds_data.Qu_sbdp.FieldByName('display').AsBoolean;
       ds_data.Qu_sbdp.Next;
       ds_data.Qu_sbsys.Next;
  end;
  ds_data.Qu_sbdp.Close;
  ds_data.Qu_sbsys.Close;
  dis_sql:=dis_sql+' From sbgl';  //指向设备数据库

  //目标框若不为空,则排序
  if dest_list.Items.Count>0 then
  begin
       dis_sql:=dis_sql+' Order by ';
       //目标框排序
       for i:=1 to dest_list.Items.Count do
       begin
            if i>1 then dis_sql:=dis_sql+',';
            dis_sql:=dis_sql+dest_list.Items[i-1];
       end;

       //限制写数据库的操作
       f_sbgl.db_insert.Enabled:=False;
       f_sbgl.db_append.Enabled:=False;
       f_sbgl.db_delete.Enabled:=False;
       f_sbgl.db_post.Enabled:=False;
       f_sbgl.db_cancel.Enabled:=False;
  end
  else
  begin  //恢复写数据库的操作
       if ds_data.Qu_sbgl.RequestLive then
       begin
            f_sbgl.db_insert.Enabled:=True;
            f_sbgl.db_append.Enabled:=True;
            f_sbgl.db_delete.Enabled:=True;
            f_sbgl.db_post.Enabled:=True;
            f_sbgl.db_cancel.Enabled:=True;
       end;
  end;

  //初始化数据库
  ds_data.Qu_sbgl.Close;
  ds_data.Qu_sbgl.Sql.Clear;
  ds_data.Qu_sbgl.Sql.Add(dis_sql);
  ds_data.Qu_sbgl.Open;
end;

procedure Tf_sbgl_ref.FormShow(Sender: TObject);
begin
  Init;  //初始化控件

  //手动修改CheckBox
  CheckFlag:=1;
  ds_data.Qu_sbdp.Open;
  ds_data.Qu_sbsys.Open;
  for i:=0 to numcount do
  begin
       dis_pro[i].Caption:=ds_data.Qu_sbsys.FieldByName('ch2').AsString;
       dis_pro[i].OnClick:=ClickCheckClick;
       dis_pro[i].Checked:=ds_data.Qu_sbdp.FieldByName('display').AsBoolean;
       ds_data.Qu_sbdp.Next;
       ds_data.Qu_sbsys.Next;
  end;
  ds_data.Qu_sbdp.Close;
  ds_data.Qu_sbsys.Close;

  CheckFlag:=0;  //自动修改CheckBox
  ClickCheckClick(nil);  //调整CheckBox
end;

procedure Tf_sbgl_ref.Init();
begin
  //初始化数组控件
  dis_pro[0]:=CheckBox0;  dis_pro[1]:=CheckBox1;  dis_pro[2]:=CheckBox2;
  dis_pro[3]:=CheckBox3;  dis_pro[4]:=CheckBox4;  dis_pro[5]:=CheckBox5;
  dis_pro[6]:=CheckBox6;  dis_pro[7]:=CheckBox7;  dis_pro[8]:=CheckBox8;
  dis_pro[9]:=CheckBox9;  dis_pro[10]:=CheckBox10;  dis_pro[11]:=CheckBox11;
  dis_pro[12]:=CheckBox12;  dis_pro[13]:=CheckBox13;  dis_pro[14]:=CheckBox14;
  dis_pro[15]:=CheckBox15;  dis_pro[16]:=CheckBox16;  dis_pro[17]:=CheckBox17;

  //初始化ListBox
  sour_list.Items.Clear;  dest_list.Items.Clear;
  for i:=1 to sl_c.Items.Count do
      sour_list.Items.Add(sl_c.Items[i-1]);
  for i:=1 to dl_c.Items.Count do
      dest_list.Items.Add(dl_c.Items[i-1]);
end;
                 
procedure Tf_sbgl_ref.ClickCheckClick(Sender: TObject);
begin
  if CheckFlag=1 then exit;  //若手动修改则退出
  sour_list.Items.Clear;  //清空源框
  for i:=0 to numcount do
  begin
       if dis_pro[i].Checked=True then
       begin
            //若目标框不存在,则添加于源框
            if CheckExistDest(dis_pro[i].Caption)<0 then
                 sour_list.Items.add(dis_pro[i].Caption);
       end     
       else
          //若目标框存在,则删除
          if CheckExistDest(dis_pro[i].Caption)>=0 then
             dest_list.Items.Delete(CheckExistDest(dis_pro[i].Caption));
  end;
end;

procedure Tf_sbgl_ref.sour_listDblClick(Sender: TObject);
var index : integer;  //ListBox中的索引
begin  //从源框转移到目标框
  index:=sour_list.ItemIndex;
  if index<0 then exit;
  dest_list.Items.Add(sour_list.Items[index]);
  sour_list.Items.Delete(index);
end;

procedure Tf_sbgl_ref.dest_listDblClick(Sender: TObject);
var index : integer;  //ListBox中的索引
begin  //从目标框转移到源框
  index:=dest_list.ItemIndex;
  if index<0 then exit;
  sour_list.Items.Clear;
  for i:=0 to numcount do
  begin
       if dis_pro[i].Checked=True then
          if CheckExistDest(dis_pro[i].Caption)<0 then
             //若目标框不存在,则添加于源框
             sour_list.Items.add(dis_pro[i].Caption)
          else
             if CheckExistDest(dis_pro[i].Caption)=index then
                //若目标框存在,且是被转移项,则添加于源框
                sour_list.Items.add(dis_pro[i].Caption);
  end;
  dest_list.Items.Delete(index);  //删除目标框中的index项
end;

Function Tf_sbgl_ref.CheckExistSour(s : string) : integer;
var index : integer;  //ListBox中的索引
begin
  Result:=-1;
  for index:=1 to sour_list.Items.Count do
      if sour_list.Items[index-1]=s then
      begin  //框中存在该项
           Result:=index-1;
           break;
      end;
end;

Function Tf_sbgl_ref.CheckExistDest(s : string) : integer;
var index : integer;  //ListBox中的索引
begin
  Result:=-1;
  for index:=1 to dest_list.Items.Count do
      if dest_list.Items[index-1]=s then
      begin  //框中存在该项
           Result:=index-1;
           break;
      end;
end;

procedure Tf_sbgl_ref.s2dsClick(Sender: TObject);
begin  //从源框转移到目标框
  sour_listDblClick(nil);
end;

procedure Tf_sbgl_ref.d2ssClick(Sender: TObject);
begin  //从目标框转移到源框
  dest_listDblClick(nil);
end;

procedure Tf_sbgl_ref.s2daClick(Sender: TObject);
begin  //从源框全部转移到目标框
  for i:=1 to sour_list.Items.Count do
      dest_list.Items.add(sour_list.Items[i-1]);
  sour_list.Items.Clear;
end;

procedure Tf_sbgl_ref.d2saClick(Sender: TObject);
begin  //从目标框全部转移到源框
  if dest_list.Items.Count<=0 then exit;
  sour_list.Items.Clear;
  dest_list.Items.Clear;
  for i:=0 to numcount do
      if dis_pro[i].Checked=True then
         sour_list.Items.add(dis_pro[i].Caption);
end;

procedure Tf_sbgl_ref.upsClick(Sender: TObject);
var index : integer;  //ListBox中的索引
begin  //上调选项
  index:=dest_list.ItemIndex;
  if (index<=0) or (index>dest_list.Items.Count-1) then exit;
  dest_list.Items.Exchange(index-1,index);
  dest_list.ItemIndex:=index-1;
end;

procedure Tf_sbgl_ref.downsClick(Sender: TObject);
var index : integer;  //ListBox中的索引
begin  //下调选项
  index:=dest_list.ItemIndex;
  if (index<0) or (index>=dest_list.Items.Count-1) then exit;
  dest_list.Items.Exchange(index,index+1);
  dest_list.ItemIndex:=index+1;
end;

procedure Tf_sbgl_ref.searchClick(Sender: TObject);
begin
  Application.MessageBox('本功能注册后才可使用。', '提示', Mb_OK);
end;

procedure Tf_sbgl_ref.okClick(Sender: TObject);
var ItemNum : integer;  //数组控件数目
begin
  //将CheckBox状态写入数据库
  ds_data.Qu_sbdp.Open;
  for i:=0 to numcount do
  begin
       with ds_data.Qu_sbdp do
       begin
            Edit;
            FieldByName('display').AsBoolean:=dis_pro[i].Checked;
            Post;
            Next;
       end;
  end;
  ds_data.Qu_sbdp.Close;

  //将ListBox状态写入ListBox的copy
  sl_c.Items.Clear;  dl_c.Items.Clear;
  for i:=1 to sour_list.Items.Count do
      sl_c.Items.Add(sour_list.Items[i-1]);
  for i:=1 to dest_list.Items.Count do
      dl_c.Items.Add(dest_list.Items[i-1]);

  RefQu;  //调整显示
  f_sbgl_ref.Close;
end;

procedure Tf_sbgl_ref.cancelClick(Sender: TObject);
begin
  //初始化ListBox
  sour_list.Items.Clear;  dest_list.Items.Clear;
  for i:=1 to sl_c.Items.Count do
      sour_list.Items.Add(sl_c.Items[i-1]);
  for i:=1 to dl_c.Items.Count do
      dest_list.Items.Add(dl_c.Items[i-1]);
  f_sbgl_ref.Close;
end;

end.

⌨️ 快捷键说明

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