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

📄 rgtcommon.pas

📁 delphi开发的中国移动大客户管理系统,后台数据库为oracle
💻 PAS
字号:
unit RgtCommon;

interface
uses Windows,Registry,SysUtils, Classes,shellapi,dbtables,forms,comctrls,
     FileCtrl,db,winsock,stdctrls,Dialogs;
type
  TDataCode = class
    Code:string;

  end;
   //*********************下拉框的处理***********************************
    // 创建拉框 pSpace 为真预先加入的一个值,其code为空
    Procedure CreateComboBox(Combobox:TCombobox;pQuery:TQuery;pCode,pLabel:string;pSpace:string);overload;
    // 创建拉框 pSpace 为真预先加入的一个值,其code为空
    Procedure CreateComboBox(Combobox:TCombobox;pQuery:TQuery;pCode,pCode1,pLabel:string;pSpace:string);overload
    //释放内存
    Procedure FreeNode(Combobox:TCombobox);
    //根据Code 得到索引号
    Function GetCodeIndex(Combobox:TCombobox;pCode:string):integer;

   //**********************************************************************
   //********************建树**********************************************
    //释放节点
    procedure FreeTreeNode(treeview :TTreeview);
    //插入节点
    //不展开树
    Function InsertTreeNode(treeview :TTreeview;SNode:TTreeNode;
         pLabel:string;pData:string):TTreeNode;
    //树展开时临时地加上该城市下局向的用户
    ProceDure TreeExpand(Treeview :TTreeview;pQuery: TQuery;SNode:TTreeNode;P_jxdm,P_cityno,P_room :string);
   //**********************************************************************
implementation
//*************************************************************************
procedure CreateComboBox(Combobox: TCombobox; pQuery: TQuery;
  pCode,pLabel, pSpace: string);overload;
var Ldata:TDataCode;
begin
  FreeNode(Combobox);
  ComboBox.Clear;
  if pSpace<>'' then
  begin
    //先加一个空值
    Ldata:=TdataCode.Create;
    Ldata.Code:='';
    ComboBox.Items.AddObject(pSpace,Ldata);
  end;
  if not pQuery.Active then exit;
  //从数据库里取数据
  pQuery.First;
  while not pQuery.Eof do
  begin
    Ldata:=TdataCode.Create;
    Ldata.Code:=trim(pQuery.FieldByName(pCode).AsString);
    ComboBox.Items.AddObject(trim(pQuery.FieldByName(pLabel).AsString),Ldata);
    pQuery.Next;
  end;
end;

procedure CreateComboBox(Combobox: TCombobox;
  pQuery: TQuery; pCode,pCode1,pLabel: string; pSpace: string);overload
var Ldata:TDataCode;
begin
  FreeNode(Combobox);
  ComboBox.Clear;
  if pSpace<>'' then
  begin
    //先加一个空值
    Ldata:=TdataCode.Create;
    Ldata.Code:='';
    ComboBox.Items.AddObject(pSpace,Ldata);
  end;
  if not pQuery.Active then exit;
  //从数据库里取数据
  pQuery.First;
  while not pQuery.Eof do
  begin
    Ldata:=TdataCode.Create;
    Ldata.Code:=trim(pQuery.FieldByName(pCode).AsString)
              +'#'+trim(pQuery.FieldByName(pCode1).AsString);
    ComboBox.Items.AddObject(trim(pQuery.FieldByName(pLabel).AsString),Ldata);
    pQuery.Next;
  end;
end;

procedure FreeNode(Combobox: TCombobox);
var
  i:integer;
  Ldata:TDataCode;
begin
  for i:=0 to ComboBox.Items.Count - 1 do
  begin
    Ldata:=TdataCode(ComboBox.Items.Objects[i]);
    if Ldata <> nil then Ldata.Free;
  end;
end;

function GetCodeIndex(Combobox: TCombobox;
  pCode: string): integer;
var
  i:integer;
begin
  result:=0;
  for i:=0 to ComboBox.Items.Count - 1 do
  begin
    if (ComboBox.Items.Objects[i]<>nil) and (pCode = TDataCode(ComboBox.Items.Objects[i]).Code) then
    begin
       result:=i;
       break;
    end;
  end;
end;
//****************************************************************************

//*****************************************************************************
procedure FreeTreeNode(treeview: TTreeview);
var
  i:integer;
  pnode:pchar;
begin
  FOR i:=0 to TreeView.Items.Count - 1 do
  begin
     if TreeView.Items[i].Data<>nil then
     begin
       pnode:=pchar(TreeView.Items[i].Data);
       FreeMem(pnode);
     end;
  end;
end;
function InsertTreeNode(treeview: TTreeview;
  SNode: TTreeNode; pLabel, pData: string): TTreeNode;
var lNode:TTreeNode;
    lData:pchar;
    lChildNode:TTreeNode;
begin
  //--------------------------------------------------------
   //如果标签长度>255只取255
   if length(pLabel) >255 then pLabel :=copy(pLabel,0,255);
   //如果节点指针不为''
   if pData <> '' then
   begin
      GetMem(lData,length(pData)+1);
      move(pData[1],lData^,length(pData)+1);
   end
   else lData:=nil;
   lNode:=TreeView.Items.AddChildObject(SNode,pLabel,lData);
   //lNode.Selected:=True;
   result:=lNode;
end;
procedure TreeExpand(Treeview: TTreeview;pQuery: TQuery;
  SNode: TTreeNode;P_jxdm,P_cityno,P_room :string);
var
  lTreeNode,NewRyNode,NewJXNode:TTreeNode;
  str1,str2,str3,str4 :string;
begin
  //如果是临时结点就删除
  lTreeNode :=SNode.getFirstChild;
  if lTreeNode=nil then exit;
  if lTreeNode.Text<>'TEMP' then exit;
  if lTreeNode.Text='TEMP' then
  lTreeNode.Delete;
  //t_d_county县
  case SNode.Level of
  0:begin
      with pQuery do
      begin
        close;
        pQuery.sql.text :='select OFF_NO_HOME,CITYNO,HOME_NAME from T_D_COUNTY where CITYNO='+#39+pchar(SNode.Data)+#39;
        open;
        first;
        while not Eof do
        begin
          str1 :=Fields[0].AsString;
          str2 :=Fields[1].AsString;
          str3 :=Fields[2].AsString;
          //先把第一层建出来
          NewJXNode:=
          InsertTreeNode(TreeView,SNode,str3,str1+'#'+str2);
          //TreeViewRy.Items.Add(nil,Fields[0].AsString+':'+Fields[1].AsString);
          NewJXNode.ImageIndex := 0;
          NewJXNode.SelectedIndex := 1;
          //***************判断该县下有没关系室有没有,如果速度慢去掉*****************
          //QueryTmp2.close;
          //QueryTmp2.sql.text :='select count(ROOMID) from T_D_ROOM '+
          //' where CITYNO='+#39+str2+#39+' and OFF_NO_HOME='+#39+str1+#39;
          //QueryTmp2.open;
          //if QueryTmp2.fields[0].asinteger >0 then
          //begin
            //加入临时结点来强行加上+号
            InsertTreeNode(TreeView,NewJXNode,'TEMP'
                ,'TEMP');
          //end;
          //************************************************************
          //这样建树肯定不行的,一次行建树了,慢!
          {
          if (jbdm=0)or(jx=QueryTmp1.Fields[0].AsInteger) then
            InitJxry(NewJxNode,QueryTmp1.Fields[0].AsInteger);//增加单个局向内的人员  }
          Next;
        end;{while}
      end;
    end;
  1:begin //加关系室
      with pQuery do
      begin
        close;
        pQuery.sql.text :=
        'select ROOMID,OFF_NO_HOME,CITYNO,ROOM_NAME from T_D_ROOM where CITYNO='
        +#39+p_cityno+#39+' and OFF_NO_HOME='+#39+p_jxdm+#39;
        open;
        first;
        while not Eof do
        begin
          str1 :=Fields[0].AsString;
          str2 :=Fields[1].AsString;
          str3 :=Fields[2].AsString;
          str4 :=Fields[3].AsString;
          //先把第一层建出来
          NewJXNode:=
          InsertTreeNode(TreeView,SNode,str4,str2+'#'+str3+'#'+str1);
          //TreeViewRy.Items.Add(nil,Fields[0].AsString+':'+Fields[1].AsString);
          NewJXNode.ImageIndex := 0;
          NewJXNode.SelectedIndex := 1;
          //***************判断该县下有没关系室有没有,如果速度慢去掉*****************
          //QueryTmp2.close;
          //QueryTmp2.sql.text :='select count(WK_NO) from T_F_MANAGER '+
          //' where CITYNO='+#39+str3+#39+' and OFF_NO_HOME='+#39+str2+#39
          //+' and RoomId='+#39+str1+#39;
          //QueryTmp2.open;
          //if QueryTmp2.fields[0].asinteger >0 then
          //begin
            //加入临时结点来强行加上+号
            InsertTreeNode(TreeView,NewJXNode,'TEMP'
                ,'TEMP');
          //end;
          //************************************************************
          //这样建树肯定不行的,一次行建树了,慢!
          {
          if (jbdm=0)or(jx=QueryTmp1.Fields[0].AsInteger) then
            InitJxry(NewJxNode,QueryTmp1.Fields[0].AsInteger);//增加单个局向内的人员  }
          Next;
        end;{while}
      end;
    end;
  2:begin
      //加用户
      with pQuery do
      begin
        close;
        sql.clear;
        sql.add('select WK_NO,NAME,STAT from T_F_MANAGER');
        sql.add(' where Off_No_Home=:p1 and CITYNO=:p2 and RoomId=:p3 order by WK_NO,STAT');
        ParamByName('p1').Asstring :=P_jxdm;
        ParamByName('p2').Asstring :=P_cityno;
        ParamByName('p3').Asstring :=P_room;
        open;
        first;
        while not Eof do
        begin
           str1 :=Fields[0].AsString;
           str2 :=Fields[1].AsString;
           NewRyNode :=InsertTreeNode(TreeView,SNode,str1+':'+str2,str1);
           if FieldByName('STAT').AsString='0' then
            begin
              NewRyNode.ImageIndex := 6;
              NewRyNode.SelectedIndex := 7;
            end
           else
            begin   //linlong 2003.03.15
              NewRyNode.ImageIndex := 8;
              NewRyNode.SelectedIndex := 8;
            end;
          Next;
        end;{while}
      end;{with}
    end;
  end;//end case
end;
//*****************************************************************************
end.
 

⌨️ 快捷键说明

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