?? 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 + -