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

📄 uncustomdisplay.pas

📁 本产品是开发LISTVIEW相关功能的可定制产品
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{---------------------------------------------------------------}
{                                                               }
{ The Source code for  定制显示类          Files                }
{ The Source code Compile By Delphi 6.0                         }
{ Author : Dpd                                                  }
{ CopyRight(C)   Chengdu SiFang Information Tech Co.,LTD.       }
{                                                               }
{defin time:  2006-08-02                                       }
{ Latest Changed :2006-08-09 FOR 增加行状态颜色显示功能         }
{                                                               }
{---------------------------------------------------------------}
//一、定制显示思路:
//1、分别将每个LISTVIEW要显示的列名称,字段名称、该列在数组(可显示列)中的序号
//保存在一个表中——可以定死;
//2、分别将每个LISTVIEW列要显示的列名称和宽度以及需要显示的位置(序号)保存在一
//个表中;
//3、LISTVIEW所在窗体创建时从对应表中取出需要显示的列名称、列宽度及在数组(可显
//示列)中的序号;
//4、根据步骤3,初始化显示LISTVIEW(按照设定顺序的列名称及列宽度);
//5、用户做查询操作后系统将所有可能需要显示的数据,逐行保存到一个动态数组中;
//6、根据步骤3中取出的显示列在数组中的序号显示各行记录;
//二、可以通用处理的部分:
//1、根据窗体名称从数据库中取需要显示的列名称、列宽度及在数组中的序号;
//2、初始化显示LISTVIEW(按照设定顺序的列名称及列宽度);
//3、根据取出的显示列在数组中的序号显示各行记录;
//三、使用方法:
//1、在进入报表窗体构造函数中创建该类,并调用函数IniCustomDisplay;
//2、在查询完毕数据后,调用函数ShowListView

unit unCustomDisplay;
interface
uses Windows, Messages, SysUtils, Variants,Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls,DB,DBTables,unCSort,unCDefine,unCDM;
Type
  //人工坐席TCP/IP通信类
//整个系统共用该数组类型,用于保存可用于定制显示的数据
  TListData = array[0..30] of string[30];
  PListData = ^TListData;
  TShowDataBuffer =unCustomDisplay.TListData;
  PShowDataBuffer = ^TShowDataBuffer;
  TCustomDisplay=Class(TObject)
    private
      { Private declarations }
      lSoueceParentName:TWinControl;
      Lstvaffair: TListView;//调用端所在窗体中的显示LISTVIEW
      FAsc:Boolean;//排序方式
      TotalDisplayColumNumber:integer; //总的显示列数量
      DatabaseName:string;             //外部系统访问数据库使用的数据库名
      SessionName:string;              //外部系统访问数据库使用的会话名
      StaffID:string;                  //操作员工工号
      bCustomShow:integer;            //是否只需要统一格式显示
      aStateColor: array[0..9] of LongInt;//Added by dpd 2006-08-08 for 添加行显示颜色随状态改变而改变的功能
      ReportForm:TForm;                 //SourceListView所在的窗体名称;
      ReportFormName:string;            //SourceListView所在的窗体名称;
      Function GetDisplayColum(ReportFormName:string):Integer;
    public
      colum:array of integer;//保存显示列在可显示数组中的位置
      aDataType:array of integer;//保存显示列在可显示数组中的位置
      nIconInArray:integer;    //nIconInArray表示需要进行图标/片显示的数组中的序号
      nIconToBaseStateSeq:integer;     //nIconBaseSeq是ImageList中从第几个图标开始的序号(从0开始计数)
      bShowStateColor:boolean;//Added by dpd 2006-08-08 for不同状态的指定列是否需要显示不同的颜色

      constructor Create;
      destructor Destroy; override;
      //从数据库取得待显示列,并初始化该LISTVIEW显示的列
      Function IniCustomDisplay(fReportFormName:TForm;lSourceListView:TListView;
        sDataBaseName,sSessionName,sStaffID:string;SoueceParentName:TWinControl):Integer;
      Function  ShowListView(var CListView:TListview;Item:TListItem;var CList:TList):PListData;//显示数据到LISTVIEW
      Procedure SourceViewColumnSort(const Column:Integer);//对指定的列进行排序,几乎不用
      Function ChgRowInPosition(var CList:TList;var nPosition, nColumn: integer;
        var str: string):Boolean;//对呈现数据列表中第nPosition行的第nColumn列用新字符串替换
      Function ShiftRowToBack(var nPosition: Integer; var CList: TList):Boolean;//主要用于在列表中增加行
      Function DeleteRow(var Position:integer;var CList:TList):Boolean; //删除指定LISTVIEW和LIST中的具体位置的行
      Function AddIconToColumn(var CListView:TListview;var nColumn, nIconSeq: Integer): Boolean;//向LISTVIEW列表指定列中增加指定的图标
      procedure RefreshListview(var CListview: TListView;var CList:TList);//显示或刷新LISTVIEW页面
      procedure SetStateColor; //设置LISTVIEW行状态颜色

  End;

Var
  CustomDisplay :TCustomDisplay;

implementation

constructor TCustomDisplay.Create;
var i:Integer;
begin
  inherited;
  TotalDisplayColumNumber:=0;//Ini
  bCustomShow:=1;
  StaffID:='';
  FAsc:=False;//假如原来是降序排序
  CMemo:=nil;
End;

destructor TCustomDisplay.Destroy;
begin
  inherited;
End;

//初始化窗体显示LISTVIEW
function TCustomDisplay.IniCustomDisplay(fReportFormName: TForm;
  lSourceListView: TListView; sDataBaseName,
  sSessionName,sStaffID: string;
  SoueceParentName:TWinControl): Integer;
begin
//将初始化参数取道类成员变量中
  DataBaseName:=sDataBaseName;
  SessionName:=sSessionName;
  StaffID:=sStaffID;     //取得员工工号
  ReportForm:=fReportFormName;
  ReportFormName:=ReportForm.Caption;
  Lstvaffair:=lSourceListView;
  lSoueceParentName:=SoueceParentName;
  //从数据库取得待显示列,并初始化该LISTVIEW显示的列
  GetDisplayColum(ReportFormName);
end;

//从数据库取得待显示列,并初始化该LISTVIEW显示的列
Function TCustomDisplay.GetDisplayColum(ReportFormName:string):Integer;
var qQryDB:TQuery;
    i:integer;
    str,str1,str2:string;
    NewColumn: TListColumn;
begin
  result:=1;
//从数据库取得待显示列
  str1:='SELECT BCUSTOMSHOW FROM SFRJSHOWCOLOR WHERE STAFFID='''+StaffID+'''';
  str:='SELECT  INARYSERIALID,DISPLAYTAB,CAPTION,'
      +' COLUMNNAME,WIDTH,DATATYPE FROM SFRJDISPLAYDETAIL A,SFRJTABLEDETAIL B '
      +'WHERE (A.TABLEDETAILID=B.TABLEDETAILID) AND FORMCAPTION ='''
      +ReportFormName+''' ORDER BY DISPLAYTAB ASC';
  str2:='SELECT  INARYSERIALID,DISPLAYTAB,CAPTION,'
      +' COLUMNNAME,WIDTH,DATATYPE FROM SFRJPERSONDISPLAY A,SFRJTABLEDETAIL B '
      +' WHERE (A.STAFFID='''+StaffID+''') AND (A.TABLEDETAILID=B.TABLEDETAILID) AND FORMCAPTION ='''
      +ReportFormName+''' ORDER BY DISPLAYTAB ASC';//Modied by dpd 2004-01-07 the old is Formname
  try
      //创建数据表,并为其指定数据库名称及会话名称
      qQryDB:=TQuery.Create(nil);//创建查询
      if DataBaseName<>'' then
         qQryDB.DatabaseName:=DataBaseName
      else
         qQryDB.DatabaseName:=CDM.dbData.DatabaseName;
      if SessionName<>'' then
         qQryDB.SessionName:=SessionName
      else
         qQryDB.SessionName:=CDM.dbData.SessionName;
      qQryDB.close;
      qQryDB.sql.Clear;
      qQryDB.sql.Add(Str1);//添加查询员工语句
      qQryDB.Open;//执行查询
      if (not qQryDB.eof) then
      begin
        qQryDB.First;
        bCustomShow:=qQryDB.FieldByName('BCUSTOMSHOW').AsInteger;
      end;
      qQryDB.close;
      qQryDB.sql.Clear;
      if bCustomShow=0 then
         qQryDB.sql.Add(Str)//添加统一查询语句
      else
         qQryDB.sql.Add(Str2);//添加个性化查询语句
      qQryDB.Open;//执行查询
      qQryDB.First;
      TotalDisplayColumNumber:=qQryDB.RecordCount;//取得查询到的记录数
      if TotalDisplayColumNumber>0 then//只有当有查询的记录数时才执行下面的操作
      begin
        setlength(colum,TotalDisplayColumNumber);
        setlength(aDataType,TotalDisplayColumNumber);
        i:=0;
        Lstvaffair.Columns.Clear;//为重新生成列而清空列
        //最多显示31列
        while ((not qQryDB.eof) and (i<TotalDisplayColumNumber)) do
        begin
           colum[i]:=qQryDB.FieldByName('INARYSERIALID').AsInteger;
           aDataType[i]:=qQryDB.FieldByName('DATATYPE').AsInteger;
           Lstvaffair.Parent := lSoueceParentName;//传递所属对象
           NewColumn := Lstvaffair.Columns.Add;//增加一列
           NewColumn.Caption := qQryDB.FieldByName('CAPTION').AsString;
           NewColumn.Width:=qQryDB.FieldByName('WIDTH').AsInteger * 8;//转为点阵
//           NewColumn.ImageIndex:=2;
           i:=i+1;
           qQryDB.Next;//取下一列
        end;
      end
      else
      begin
        if bCustomShow<>0 then
        Begin
          qQryDB.close;
          qQryDB.sql.Clear;
          qQryDB.sql.Add(Str);//添加统一查询语句
          qQryDB.Open;//执行查询
          qQryDB.First;

⌨️ 快捷键说明

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