📄 uncustomdisplay.pas
字号:
{---------------------------------------------------------------}
{ }
{ 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 + -