天天看點

Delphi ListView快速操作通用實作

Delphi ListView快速操作通用實作

作者:成曉旭

衆所周知,Delphi ListView類直接進行Add、Update、Delete操作的速度是比較慢的,尤其是當資料量較大時,比如資料量達到5000、10000、50000時,速度真是可以說是“慢得驚人”。其實快速操作的方法非常簡單,就當大家都知道了。在本人的工作中,很多項目都用到ListView,并且對速度的響應要求比較高,于是發生了快速操作ListView的代碼散布于多個項目大量子產品中的問題,并且,當界面層資料顯示要求發生改變時,自然發生“重複性代碼的通用問題”。考慮到對以前版本的相容性問題,也一直沒有引用第三方的成熟元件。鑒于:“程式中的重複代碼最易引發問題,必須消除”的實踐經驗,自己設計了一個比較通用的解決此類問題的類結構。當然,遠不是什麼“通用架構”了(眼下市面上很多人喜歡把自己做的無論什麼東西通稱為架構)。在采用此結構的項目中,很容易實作MVC模式,達到業務邏輯與界面顯示分離的低級的、基礎的要求。

(因為,目前CSDN的軟體上傳功能不可用,我隻有将部分代碼片斷放在文檔中,有需要完整源碼者,請留言)

類層次結構:

Delphi ListView快速操作通用實作

ListView基礎操作封裝在LVControler包中,核心的類是TCXXLVControler:

(說明:LVControler類是被封裝通用類結構内,外部使用者是不需要了解和通路的,是以不作介紹。)

Delphi ListView快速操作通用實作

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="[email protected]@[email protected]@[email protected]@[email protected]@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 281.25pt" type="#_x0000_t75"><imagedata src="file:///C:/DOCUME~1/CHENGX~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png" o:title="LVControler"></imagedata></shape>

傳統的ListView操作基類是TLVCommonClass,如果想用傳統的方法增、删、改ListView中的資料,可以直接從此類繼承。

Delphi ListView快速操作通用實作

<shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 372pt" type="#_x0000_t75"><imagedata src="file:///C:/DOCUME~1/CHENGX~1/LOCALS~1/Temp/msohtml1/01/clip_image003.png" o:title="CommonClass"></imagedata></shape>

源碼如下:

具體的一個從此類繼承下來的用于Socket界面顯示的TLVSocket的類Overvivw如下:

Delphi ListView快速操作通用實作

<shape id="_x0000_i1027" style="WIDTH: 367.5pt; HEIGHT: 315pt" type="#_x0000_t75"><imagedata src="file:///C:/DOCUME~1/CHENGX~1/LOCALS~1/Temp/msohtml1/01/clip_image005.png" o:title="commonSocket"></imagedata></shape>

源碼如下:

快速的ListView操作基類是TLVQuickClass,如果想用快速方法增、删、改ListView中的資料,可以直接從此類繼承。

Delphi ListView快速操作通用實作

<shape id="_x0000_i1028" style="WIDTH: 414.75pt; HEIGHT: 397.5pt" type="#_x0000_t75"><imagedata src="file:///C:/DOCUME~1/CHENGX~1/LOCALS~1/Temp/msohtml1/01/clip_image007.png" o:title="quickClass"></imagedata></shape>

主要方法:(可以看到,裡面沒有真正的Public方法,子類也僅需實作兩個Protected的virtual方法)

Delphi ListView快速操作通用實作

<shape id="_x0000_i1057" style="WIDTH: 414.75pt; HEIGHT: 370.5pt" type="#_x0000_t75"><imagedata src="file:///C:/DOCUME~1/CHENGX~1/LOCALS~1/Temp/msohtml1/01/clip_image012.png" o:title="method"></imagedata></shape>

源碼如下:

此類中,要求每個具體應用的子類必須實作的方法僅有兩個:CheckFound():根據具體應用檢測的資料是否已經存在;ProcOnDataDetail():用戶端ListView的OnData()事件的資料處理回調方法。下面是幾個具體實作的子類的OverView:

Delphi ListView快速操作通用實作

<shape id="_x0000_i1055" style="WIDTH: 414.75pt; HEIGHT: 303.75pt" type="#_x0000_t75"><imagedata src="file:///C:/DOCUME~1/CHENGX~1/LOCALS~1/Temp/msohtml1/01/clip_image014.png" o:title="Quick Client"></imagedata></shape>

具體的一個從此類繼承下來的用于Socket界面顯示的TLVQuickSocket的類Overvivw如下:

Delphi ListView快速操作通用實作

<shape id="_x0000_i1056" style="WIDTH: 415.5pt; HEIGHT: 291pt" type="#_x0000_t75"><imagedata src="file:///C:/DOCUME~1/CHENGX~1/LOCALS~1/Temp/msohtml1/01/clip_image016.png" o:title="quick socket"></imagedata></shape>

可以看出:子類實作了兩個抽象的虛方法,其它的方法,都是根據業務需要,類使用者自行增加的。

源碼如下:

Delphi ListView快速操作通用實作

// ------------------------------------------------------------------------------

Delphi ListView快速操作通用實作

//

Delphi ListView快速操作通用實作

// 産品名稱:成曉旭的個人軟體Delphi源碼庫

Delphi ListView快速操作通用實作

// 産品版本:CXXSoftdelphicodesourcelib1.0

Delphi ListView快速操作通用實作

// 子產品名稱:Delphi之ListView顯示控制類---應用層:Softsocket類定義單元

Delphi ListView快速操作通用實作

// 子產品描述:

Delphi ListView快速操作通用實作

// 單元檔案:unLVSoftSocket.pas-->unLVQuickSocket.pas

Delphi ListView快速操作通用實作

// 開發作者:成曉旭

Delphi ListView快速操作通用實作

// 備注:任何人使用此檔案時,請保留此段自述檔案,謝謝!

Delphi ListView快速操作通用實作

// 開發時間:2005-09-26

Delphi ListView快速操作通用實作

//

Delphi ListView快速操作通用實作

// 修改曆史:2006-06-16

Delphi ListView快速操作通用實作

// 修改描述:增加通過TList來高速增加、更新、删除資料

Delphi ListView快速操作通用實作

// 先用吧,以後再優化和完善

Delphi ListView快速操作通用實作

// 修改曆史:2006-07-10

Delphi ListView快速操作通用實作

// 修改描述:成功地将ListView的OnData事件的List對象移入此類中

Delphi ListView快速操作通用實作

// 修改曆史:2006-07-11

Delphi ListView快速操作通用實作

// 修改描述:重大重構:将此類分成兩個類:TLVSoftSocket-->TLVSoftSocket和TLVQuickSocket

Delphi ListView快速操作通用實作

// 以遵循SRP原則

Delphi ListView快速操作通用實作

// ------------------------------------------------------------------------------

Delphi ListView快速操作通用實作

unitunLVQuickSocket;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

interface

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

uses

Delphi ListView快速操作通用實作

ComCtrls,Classes,SysUtils,Windows,

Delphi ListView快速操作通用實作

unLVQuickClass,unLVDefine;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

type

Delphi ListView快速操作通用實作

TLVQuickSocket = class (TLVQuickClass)

Delphi ListView快速操作通用實作

private

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

protected

Delphi ListView快速操作通用實作

class functionCheckFound( const pData:Pointer; const aKey:variant): boolean ;override;

Delphi ListView快速操作通用實作

class procedureProcOnDataDetail( const pData:Pointer;varItem:TListItem);override;

Delphi ListView快速操作通用實作

public

Delphi ListView快速操作通用實作

constructorCreate();

Delphi ListView快速操作通用實作

destructorDestroy();override;

Delphi ListView快速操作通用實作

procedureInitListView(varlvTemp:TListView);

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

// 快速方法

Delphi ListView快速操作通用實作

// 暫時這樣增加,以後在重構到基類中

Delphi ListView快速操作通用實作

procedureAddToLVSocketQuick( const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

procedureUpdateLVSocketQuick( const aUniqueID:integer; const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

procedureDeleteLVSocketQuick( const aUniqueID:integer; const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

procedureDeleteAllLVSocket(varlvTemp:TListView);

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureOnDataEvent(Item:TListItem);

Delphi ListView快速操作通用實作

functionGetDataCount():integer;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

implementation

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

... {TLVQuickSocket}

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVQuickSocket.AddToLVSocketQuick(

Delphi ListView快速操作通用實作

const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

AddItemDataToListView(@aSocketStatus,sizeof(aSocketStatus),lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

class functionTLVQuickSocket.CheckFound( const pData:Pointer;

Delphi ListView快速操作通用實作

const aKey:variant): boolean ;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

p: ^ TSocketStatusInfo;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

p: = pData;

Delphi ListView快速操作通用實作

Result: = (p.UniqueID = aKey);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

constructorTLVQuickSocket.Create;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

inheritedCreate();

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVQuickSocket.DeleteAllLVSocket(varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

DeleteAllListView(lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVQuickSocket.DeleteLVSocketQuick( const aUniqueID:integer;

Delphi ListView快速操作通用實作

const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

DeleteItemDataToListView(aUniqueID,@aSocketStatus,sizeof(aSocketStatus),lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

destructorTLVQuickSocket.Destroy;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

inheritedDestroy;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVQuickSocket.GetDataCount():integer;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = Self.GetLVListCount();

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVQuickSocket.InitListView(varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

InitListViewColumns(SocketStrBuffer,SocketWidthBuffer,lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVQuickSocket.OnDataEvent(Item:TListItem);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Self.OnDataToListView(Item);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

class procedureTLVQuickSocket.ProcOnDataDetail( const pData:Pointer;varItem:TListItem);

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

pSocket: ^ TSocketStatusInfo;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

// 這兩個有什麼不同?

Delphi ListView快速操作通用實作

// CopyMemory(pSocket,pData,sizeof(TSocketStatusInfo));

Delphi ListView快速操作通用實作

pSocket: = pData;

Delphi ListView快速操作通用實作

Item.Caption: = IntToStr(pSocket.GroupID);

Delphi ListView快速操作通用實作

Item.SubItems.Add(IntToStr(pSocket.UniqueID));

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.IPAddress);

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.SubItemName);

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.LoginTime);

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.SendNumber);

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.RecNumber);

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.Remark);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVQuickSocket.UpdateLVSocketQuick( const aUniqueID:integer;

Delphi ListView快速操作通用實作

const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

UpdateItemDataToListView(aUniqueID,@aSocketStatus,sizeof(aSocketStatus),lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

end.

小結:

應用此類結構實作ListView快速資料操作的優勢:

<!--[if !supportLists]-->1、 <!--[endif]-->可以快速實作MVC模式,達到界面顯示與業務邏輯的分離。在Controllor類中,執行個體化資料顯示子類,調用相應方法即可實作顯示資料的增、删、改。

<!--[if !supportLists]-->2、 <!--[endif]-->與原始的快速方法相比,封裝了記憶體資料List,大大簡化了List對象的操作(尤其是當有很多相同或者類似資料要求在不同Form的ListView中顯示時),并減少了List的建立、資料操作、釋放等操作時發生錯誤的可能性。

<!--[if !supportLists]-->3、 <!--[endif]-->簡化了多個相同、類似資料顯示的控制代碼,針對每個份要顯示的資料及ListView,隻需要執行個體化一個顯示子類,避免了直接應用原始的快速方法時,控制代碼分散在每一個具體Form類中的問題。

<!--[if !supportLists]-->4、 <!--[endif]-->對顯示資料的業務資訊份進行了集中,當要求顯示的資訊發生變化時,隻需在資料顯示子類這一個類中更改即可。

此通用類結構仍有些不足之處,歡迎有興趣的朋友繼續完善:

<!--[if !supportLists]-->1、<!--[endif]-->每個應用層類的外部調用方式非常類似(請參考開發的示例源碼),表明,有些通用的方法沒有進行更好的抽象。

<!--[if !supportLists]-->2、<!--[endif]-->快速通路基類對其子類的行為抽象不充分,導緻子類的應用層調用代碼非常類似。當初這樣設計的目的是想保持類結構有充分的可擴充性。其實完全可以将基類進行改良:将抽象的虛方法更換成接口,這樣,基類實作的更好的封裝,并且更好地滿足了“向穩定的方向依賴”和“針對接口程式設計”的設計原則。這樣,應用層還是要執行個體化一個自己業務需要的類來實作此接口。但Delphi的接口用起來不像是真正的接口,通常要從TInterfacedObject等類繼承,大大限制了類結構層次的演化。(因為在不支援多繼承的語言環境中,如果還想增加更高層次的抽象就不那麼容易了)。

<!--[if !supportLists]-->3、<!--[endif]-->目前的版本還沒有提供針對某列進行資料排序的功能。

Delphi ListView快速操作通用實作

// ------------------------------------------------------------------------------

Delphi ListView快速操作通用實作

//

Delphi ListView快速操作通用實作

// 産品名稱:成曉旭的個人軟體Delphi源碼庫

Delphi ListView快速操作通用實作

// 産品版本:CXXSoftdelphicodesourcelib1.0

Delphi ListView快速操作通用實作

// 子產品名稱:Delphi之ListView顯示控制類---外部應用層通用類定義單元

Delphi ListView快速操作通用實作

// 子產品描述:ListView快速操作方法類

Delphi ListView快速操作通用實作

// 單元檔案:unLVCommonClass.pas--->unLVQuickClass.pas

Delphi ListView快速操作通用實作

// 開發作者:成曉旭

Delphi ListView快速操作通用實作

// 備注:任何人使用此檔案時,請保留此段自述檔案,謝謝!

Delphi ListView快速操作通用實作

// 開發時間:2005-09-26

Delphi ListView快速操作通用實作

// 修改曆史:2006-05-31

Delphi ListView快速操作通用實作

// 修改描述:解決GetLVItemOrderByValue()的參數不靈活的問題

Delphi ListView快速操作通用實作

// 并解決Method'Create'hidesvirtualmethodofbasetype'TComponent'的問題

Delphi ListView快速操作通用實作

// 修改曆史:2006-06-16

Delphi ListView快速操作通用實作

// 修改描述:增加通過TList來高速增加、更新、删除資料

Delphi ListView快速操作通用實作

// 先用吧,以後再優化和完善

Delphi ListView快速操作通用實作

// 修改曆史:2006-07-10

Delphi ListView快速操作通用實作

// 修改描述:成功地将ListView的OnData事件的List對象移入此類中,并将其上移到其類

Delphi ListView快速操作通用實作

// 修改曆史:2006-07-11

Delphi ListView快速操作通用實作

// 修改描述:重大重構:将此類分成兩個類:TLVCommonClass-->TLVCommonClass和TLVQuickClass,

Delphi ListView快速操作通用實作

// 以遵循SRP原則

Delphi ListView快速操作通用實作

// ------------------------------------------------------------------------------

Delphi ListView快速操作通用實作

unitunLVQuickClass;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

interface

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

uses

Delphi ListView快速操作通用實作

SysUtils,Classes,ComCtrls,Windows,Variants,

Delphi ListView快速操作通用實作

unLVControler;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

const

Delphi ListView快速操作通用實作

SpecialItemOrder = - 1 ;

Delphi ListView快速操作通用實作

CSImg_Normal = 0 ;

Delphi ListView快速操作通用實作

CSImg_Running = 1 ;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

GetColumnOrder = 0 ;

Delphi ListView快速操作通用實作

type

Delphi ListView快速操作通用實作

TLVQuickClass = class (TInterfacedObject)

Delphi ListView快速操作通用實作

private

Delphi ListView快速操作通用實作

cxxLVC:TCXXLVControler;

Delphi ListView快速操作通用實作

lvDataList:TList;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

// 為ListView的Item的Data屬性查詢關鍵資料在TList中的索引号

Delphi ListView快速操作通用實作

class functionGetListDataIndexByKey( const listData:TList; const aKey:variant):integer;

Delphi ListView快速操作通用實作

// 快速

Delphi ListView快速操作通用實作

procedureClearLVDataList();

Delphi ListView快速操作通用實作

protected

Delphi ListView快速操作通用實作

// 注意:約定最後一項一定是ImageIndex

Delphi ListView快速操作通用實作

// tmpList:TStringList;

Delphi ListView快速操作通用實作

functionInitListViewColumns( const displayName:arrayofstring;

Delphi ListView快速操作通用實作

const displayWidth:arrayofinteger;

Delphi ListView快速操作通用實作

varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

// 子類必須實作

Delphi ListView快速操作通用實作

class functionCheckFound( const pData:Pointer; const aKey:variant): boolean ;virtual; abstract ;

Delphi ListView快速操作通用實作

class procedureProcOnDataDetail( const pData:Pointer;varItem:TListItem);virtual; abstract ;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

// 快速方法

Delphi ListView快速操作通用實作

// [注意:新方法中lvList不要求傳遞參數,保留以相容舊用戶端版本]

Delphi ListView快速操作通用實作

// 将pData資料加入List中,實作向ListView增加資料行

Delphi ListView快速操作通用實作

functionAddItemDataToListView( const pData:Pointer; const dataNumber:integer;

Delphi ListView快速操作通用實作

varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

// ;varlvList:TList=nil):boolean;

Delphi ListView快速操作通用實作

// 以aKey為關鍵值查找,并用pData資料更新List中滿足條件的記憶體塊,實作向ListView更新資料行

Delphi ListView快速操作通用實作

functionUpdateItemDataToListView( const aKey:variant; const pData:Pointer; const dataNumber:integer;

Delphi ListView快速操作通用實作

varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

// ;varlvList:TList=nil):boolean;

Delphi ListView快速操作通用實作

// 以aKey為關鍵值查找,并用pData資料删除List中滿足條件的記憶體塊,實作向ListView删除資料行

Delphi ListView快速操作通用實作

functionDeleteItemDataToListView( const aKey:variant; const pData:Pointer; const dataNumber:integer;

Delphi ListView快速操作通用實作

varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

// ;varlvList:TList=nil):boolean;

Delphi ListView快速操作通用實作

// 删除List中所有記憶體區,實作将ListView清空所有資料行

Delphi ListView快速操作通用實作

procedureDeleteAllListView(varlvTemp:TListView);

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

// ListVisw的OnData事件處理

Delphi ListView快速操作通用實作

procedureOnDataToListView(varItem:TListItem);

Delphi ListView快速操作通用實作

// ListVisw的OnData事件的ListCount

Delphi ListView快速操作通用實作

functionGetLVListCount():integer;

Delphi ListView快速操作通用實作

public

Delphi ListView快速操作通用實作

constructorCreate();overload;

Delphi ListView快速操作通用實作

destructorDestroy();override;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

implementation

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

... {TLVQuickClass}

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVQuickClass.AddItemDataToListView( const pData:Pointer;

Delphi ListView快速操作通用實作

const dataNumber:integer;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

// ;varlvList:TList):boolean;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

pTemp:Pointer;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

// 注意:要影響性能

Delphi ListView快速操作通用實作

// lvTemp.Items.BeginUpdate();

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

if NOT(Assigned(pData)andAssigned(lvTemp)andAssigned(lvDataList))thenExit;

Delphi ListView快速操作通用實作

// new(pTemp);

Delphi ListView快速操作通用實作

GetMem(pTemp,dataNumber);

Delphi ListView快速操作通用實作

lvTemp.OwnerData: = true ;

Delphi ListView快速操作通用實作

CopyMemory(pTemp,pData,dataNumber);

Delphi ListView快速操作通用實作

lvDataList.Add(pTemp);

Delphi ListView快速操作通用實作

Result: = true ;

Delphi ListView快速操作通用實作

// 注意:要影響性能

Delphi ListView快速操作通用實作

// lvTemp.Items.Count:=lvList.Count;

Delphi ListView快速操作通用實作

// lvTemp.Items.EndUpdate();

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVQuickClass.ClearLVDataList();

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

Loop:integer;

Delphi ListView快速操作通用實作

pTemp:Pointer;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if NOT(Assigned(lvDataList)and(lvDataList.Count > 0 ))thenExit;

Delphi ListView快速操作通用實作

for Loop: = 0 tolvDataList.Count - 1 do

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

pTemp: = (lvDataList.Items[Loop]);

Delphi ListView快速操作通用實作

if Assigned(pTemp)then

Delphi ListView快速操作通用實作

FreeMem(pTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

constructorTLVQuickClass.Create;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

inheritedCreate();

Delphi ListView快速操作通用實作

cxxLVC: = TCXXLVControler.Create();

Delphi ListView快速操作通用實作

// tmpList:=TStringList.Create();

Delphi ListView快速操作通用實作

lvDataList: = TList.Create();

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVQuickClass.DeleteAllListView(varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if NOT(Assigned(lvTemp)andAssigned(lvDataList)and(lvDataList.Count > 0 ))thenExit;

Delphi ListView快速操作通用實作

lvTemp.OwnerData: = true ;

Delphi ListView快速操作通用實作

lvTemp.Items.BeginUpdate();

Delphi ListView快速操作通用實作

while (lvDataList.Count > 0 ) do

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Dispose(lvDataList[ 0 ]);

Delphi ListView快速操作通用實作

lvDataList.Delete( 0 );

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

lvTemp.Items.Count: = lvDataList.Count;

Delphi ListView快速操作通用實作

lvTemp.Items.EndUpdate();

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVQuickClass.DeleteItemDataToListView( const aKey:variant;

Delphi ListView快速操作通用實作

const pData:Pointer; const dataNumber:integer;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

// varlvList:TList):boolean;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

colIndex:integer;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

// 注意:要影響性能

Delphi ListView快速操作通用實作

// lvTemp.Items.BeginUpdate();

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

if NOT(Assigned(pData)andAssigned(lvTemp)andAssigned(lvDataList)and(lvDataList.Count > 0 ))thenExit;

Delphi ListView快速操作通用實作

colIndex: = GetListDataIndexByKey(lvDataList,aKey);

Delphi ListView快速操作通用實作

if (colIndex <> SpecialItemOrder)and(colIndex >= 0 )and(colIndex <= lvDataList.Count - 1 )then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Dispose(lvDataList[colIndex]);

Delphi ListView快速操作通用實作

lvDataList.Delete(colIndex);

Delphi ListView快速操作通用實作

Result: = true ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

// 注意:要影響性能

Delphi ListView快速操作通用實作

// lvTemp.Items.Count:=lvList.Count;

Delphi ListView快速操作通用實作

// lvTemp.Items.EndUpdate();

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

destructorTLVQuickClass.Destroy;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

ClearLVDataList();

Delphi ListView快速操作通用實作

if Assigned(lvDataList)then

Delphi ListView快速操作通用實作

FreeAndNil(lvDataList);

Delphi ListView快速操作通用實作

if Assigned(cxxLVC)then

Delphi ListView快速操作通用實作

FreeAndNil(cxxLVC);

Delphi ListView快速操作通用實作

// ifAssigned(tmpList)then

Delphi ListView快速操作通用實作

// FreeAndNil(tmpList);

Delphi ListView快速操作通用實作

inheritedDestroy;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

class functionTLVQuickClass.GetListDataIndexByKey( const listData:TList;

Delphi ListView快速操作通用實作

const aKey:variant):integer;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

Loop:integer;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = SpecialItemOrder;

Delphi ListView快速操作通用實作

if NOTAssigned(listData)thenExit;

Delphi ListView快速操作通用實作

if listData.Count <= 0 thenExit;

Delphi ListView快速操作通用實作

for Loop: = 0 tolistData.Count - 1 do

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if CheckFound(listData[Loop],aKey)then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = Loop;

Delphi ListView快速操作通用實作

break ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVQuickClass.GetLVListCount():integer;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = 0 ;

Delphi ListView快速操作通用實作

if Assigned(lvDataList)then

Delphi ListView快速操作通用實作

Result: = lvDataList.Count;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVQuickClass.InitListViewColumns( const displayName:arrayofstring;

Delphi ListView快速操作通用實作

const displayWidth:arrayofinteger;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

if Assigned(cxxLVC)then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

cxxLVC.InitLVColumns(displayName,displayWidth,lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVQuickClass.OnDataToListView(varItem:TListItem);

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

pTemp:Pointer;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

// 以後要移到類中,做成回調

Delphi ListView快速操作通用實作

if NOTAssigned(lvDataList)thenExit;

Delphi ListView快速操作通用實作

if lvDataList.Count <= 0 thenExit;

Delphi ListView快速操作通用實作

if Item.Index > lvDataList.CountthenExit;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

pTemp: = lvDataList[Item.Index];

Delphi ListView快速操作通用實作

ProcOnDataDetail(pTemp,Item);

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

Item.ImageIndex: = 1 ;

Delphi ListView快速操作通用實作

Item.Data: = pTemp;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVQuickClass.UpdateItemDataToListView( const aKey:variant;

Delphi ListView快速操作通用實作

const pData:Pointer; const dataNumber:integer;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

// varlvList:TList):boolean;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

colIndex:integer;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

// 注意:要影響性能

Delphi ListView快速操作通用實作

// lvTemp.Items.BeginUpdate();

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

if NOT(Assigned(pData)andAssigned(lvTemp)andAssigned(lvDataList)and(lvDataList.Count > 0 ))thenExit;

Delphi ListView快速操作通用實作

colIndex: = GetListDataIndexByKey(lvDataList,aKey);

Delphi ListView快速操作通用實作

if (colIndex <> SpecialItemOrder)and(colIndex >= 0 )and(colIndex <= lvDataList.Count - 1 )then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

CopyMemory(lvDataList[colIndex],pData,dataNumber);

Delphi ListView快速操作通用實作

Result: = true ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

// 注意:要影響性能

Delphi ListView快速操作通用實作

// lvTemp.Items.Count:=lvList.Count;

Delphi ListView快速操作通用實作

// lvTemp.Items.EndUpdate();

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

end.

Delphi ListView快速操作通用實作

// ------------------------------------------------------------------------------

Delphi ListView快速操作通用實作

//

Delphi ListView快速操作通用實作

// 産品名稱:成曉旭的個人軟體Delphi源碼庫

Delphi ListView快速操作通用實作

// 産品版本:CXXSoftdelphicodesourcelib1.0

Delphi ListView快速操作通用實作

// 子產品名稱:Delphi之ListView顯示控制類---應用層:Softsocket類定義單元

Delphi ListView快速操作通用實作

// 子產品描述:

Delphi ListView快速操作通用實作

// 單元檔案:unLVSoftSocket.pas-->unLVSocket.pas

Delphi ListView快速操作通用實作

// 開發作者:成曉旭

Delphi ListView快速操作通用實作

// 備注:任何人使用此檔案時,請保留此段自述檔案,謝謝!

Delphi ListView快速操作通用實作

// 開發時間:2005-09-26

Delphi ListView快速操作通用實作

//

Delphi ListView快速操作通用實作

// 修改曆史:2006-06-16

Delphi ListView快速操作通用實作

// 修改描述:增加通過TList來高速增加、更新、删除資料

Delphi ListView快速操作通用實作

// 先用吧,以後再優化和完善

Delphi ListView快速操作通用實作

// 修改曆史:2006-07-10

Delphi ListView快速操作通用實作

// 修改描述:成功地将ListView的OnData事件的List對象移入此類中

Delphi ListView快速操作通用實作

// 修改曆史:2006-07-11

Delphi ListView快速操作通用實作

// 修改描述:重大重構:将此類分成兩個類:TLVSoftSocket-->TLVSocket和TLVQuickClass

Delphi ListView快速操作通用實作

// 以遵循SRP原則

Delphi ListView快速操作通用實作

// ------------------------------------------------------------------------------

Delphi ListView快速操作通用實作

unitunLVSocket;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

interface

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

uses

Delphi ListView快速操作通用實作

ComCtrls,Classes,SysUtils,Windows,

Delphi ListView快速操作通用實作

unLVCommonClass,unLVDefine;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

type

Delphi ListView快速操作通用實作

TLVSocket = class (TLVCommonClass)

Delphi ListView快速操作通用實作

private

Delphi ListView快速操作通用實作

// 注意:此方法與順序嚴重藕合

Delphi ListView快速操作通用實作

functionSaveSerialStatusToStringList( const aSocketStatus:TSocketStatusInfo): boolean ;

Delphi ListView快速操作通用實作

protected

Delphi ListView快速操作通用實作

class functionCheckFound( const pData:Pointer; const aKey:variant): boolean ;override;

Delphi ListView快速操作通用實作

class procedureProcOnDataDetail( const pData:Pointer;varItem:TListItem);override;

Delphi ListView快速操作通用實作

public

Delphi ListView快速操作通用實作

constructorCreate();

Delphi ListView快速操作通用實作

destructorDestroy();override;

Delphi ListView快速操作通用實作

procedureInitListView(varlvTemp:TListView);

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

// 傳統方法

Delphi ListView快速操作通用實作

procedureAddToLVSocket( const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

procedureUpdateLVSocket( const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

procedureDeleteLVSocket( const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

implementation

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

... {TLVSocket}

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVSocket.AddToLVSocket(

Delphi ListView快速操作通用實作

const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if SaveSerialStatusToStringList(aSocketStatus)then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

AddDataToListView(tmpList,lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

class functionTLVSocket.CheckFound( const pData:Pointer;

Delphi ListView快速操作通用實作

const aKey:variant): boolean ;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

p: ^ TSocketStatusInfo;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

p: = pData;

Delphi ListView快速操作通用實作

Result: = (p.UniqueID = aKey);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

constructorTLVSocket.Create;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

inheritedCreate();

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVSocket.DeleteLVSocket(

Delphi ListView快速操作通用實作

const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if SaveSerialStatusToStringList(aSocketStatus)then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

DeleteDataFromListView(tmpList,lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

destructorTLVSocket.Destroy;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

inheritedDestroy;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVSocket.InitListView(varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

InitListViewColumns(SocketStrBuffer,SocketWidthBuffer,lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

class procedureTLVSocket.ProcOnDataDetail( const pData:Pointer;varItem:TListItem);

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

pSocket: ^ TSocketStatusInfo;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

// 這兩個有什麼不同?

Delphi ListView快速操作通用實作

// CopyMemory(pSocket,pData,sizeof(TSocketStatusInfo));

Delphi ListView快速操作通用實作

pSocket: = pData;

Delphi ListView快速操作通用實作

Item.Caption: = IntToStr(pSocket.GroupID);

Delphi ListView快速操作通用實作

Item.SubItems.Add(IntToStr(pSocket.UniqueID));

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.IPAddress);

Delphi ListView快速操作通用實作

// Item.SubItems.Add(IntToStr(pSocket.CommServerPort));

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.SubItemName);

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.LoginTime);

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.SendNumber);

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.RecNumber);

Delphi ListView快速操作通用實作

Item.SubItems.Add(pSocket.Remark);

Delphi ListView快速操作通用實作

// Item.SubItems.Add(pSocket.IPAddress);

Delphi ListView快速操作通用實作

// Item.SubItems.Add(pSocket.IPAddress);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVSocket.SaveSerialStatusToStringList(

Delphi ListView快速操作通用實作

const aSocketStatus:TSocketStatusInfo): boolean ;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

if Assigned(tmpList)then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

tmpList.Clear();

Delphi ListView快速操作通用實作

tmpList.Add(IntToStr(aSocketStatus.GroupID));

Delphi ListView快速操作通用實作

tmpList.Add(IntToStr(aSocketStatus.UniqueID));

Delphi ListView快速操作通用實作

tmpList.Add(aSocketStatus.IPAddress);

Delphi ListView快速操作通用實作

tmpList.Add(aSocketStatus.SubItemName);

Delphi ListView快速操作通用實作

tmpList.Add(aSocketStatus.LoginTime);

Delphi ListView快速操作通用實作

tmpList.Add(aSocketStatus.SendNumber);

Delphi ListView快速操作通用實作

tmpList.Add(aSocketStatus.RecNumber);

Delphi ListView快速操作通用實作

tmpList.Add(IntToStr(CSImg_Running));

Delphi ListView快速操作通用實作

Result: = true ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVSocket.UpdateLVSocket(

Delphi ListView快速操作通用實作

const aSocketStatus:TSocketStatusInfo;varlvTemp:TListView);

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if SaveSerialStatusToStringList(aSocketStatus)then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

UpdateDataFromListView(tmpList,lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

end.

Delphi ListView快速操作通用實作

// ------------------------------------------------------------------------------

Delphi ListView快速操作通用實作

//

Delphi ListView快速操作通用實作

// 産品名稱:成曉旭的個人軟體Delphi源碼庫

Delphi ListView快速操作通用實作

// 産品版本:CXXSoftdelphicodesourcelib1.0

Delphi ListView快速操作通用實作

// 子產品名稱:Delphi之ListView顯示控制類---外部應用層通用類定義單元

Delphi ListView快速操作通用實作

// 子產品描述:ListView傳統操作方法類

Delphi ListView快速操作通用實作

// 單元檔案:unLVCommonClass.pas

Delphi ListView快速操作通用實作

// 開發作者:成曉旭

Delphi ListView快速操作通用實作

// 備注:任何人使用此檔案時,請保留此段自述檔案,謝謝!

Delphi ListView快速操作通用實作

// 開發時間:2005-09-26

Delphi ListView快速操作通用實作

// 修改曆史:2006-05-31

Delphi ListView快速操作通用實作

// 修改描述:解決GetLVItemOrderByValue()的參數不靈活的問題

Delphi ListView快速操作通用實作

// 并解決Method'Create'hidesvirtualmethodofbasetype'TComponent'的問題

Delphi ListView快速操作通用實作

// 修改曆史:2006-06-16

Delphi ListView快速操作通用實作

// 修改描述:增加通過TList來高速增加、更新、删除資料

Delphi ListView快速操作通用實作

// 先用吧,以後再優化和完善

Delphi ListView快速操作通用實作

// 修改曆史:2006-07-10

Delphi ListView快速操作通用實作

// 修改描述:成功地将ListView的OnData事件的List對象移入此類中,并将其上移到其類

Delphi ListView快速操作通用實作

// 修改曆史:2006-07-11

Delphi ListView快速操作通用實作

// 修改描述:重大重構:将此類分成兩個類:TLVCommonClass-->TLVCommonClass和TLVQuickClass

Delphi ListView快速操作通用實作

// 以遵循SRP原則

Delphi ListView快速操作通用實作

// ------------------------------------------------------------------------------

Delphi ListView快速操作通用實作

unitunLVCommonClass;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

interface

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

uses

Delphi ListView快速操作通用實作

SysUtils,Classes,ComCtrls,Windows,Variants,

Delphi ListView快速操作通用實作

unLVControler,unLVInterface;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

const

Delphi ListView快速操作通用實作

SpecialItemOrder = - 1 ;

Delphi ListView快速操作通用實作

CSImg_Normal = 0 ;

Delphi ListView快速操作通用實作

CSImg_Running = 1 ;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

GetColumnOrder = 0 ;

Delphi ListView快速操作通用實作

type

Delphi ListView快速操作通用實作

TLVCommonClass = class (TInterfacedObject,ILVControllor)

Delphi ListView快速操作通用實作

private

Delphi ListView快速操作通用實作

cxxLVC:TCXXLVControler;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

class functionStrIsNumber( const str:PChar): boolean ;

Delphi ListView快速操作通用實作

functionGetLVItemOrderByValue( const lvTemp:TListView; const aKeyValue:string; const columnOrder:integer = SpecialItemOrder):integer;

Delphi ListView快速操作通用實作

procedureCommonListItemProcess( const dataList:TStringList;varliTemp:TListItem; const isUpdate: boolean );

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

protected

Delphi ListView快速操作通用實作

// 注意:約定最後一項一定是ImageIndex

Delphi ListView快速操作通用實作

tmpList:TStringList;

Delphi ListView快速操作通用實作

functionInitListViewColumns( const displayName:arrayofstring;

Delphi ListView快速操作通用實作

const displayWidth:arrayofinteger;

Delphi ListView快速操作通用實作

varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

functionAddDataToListView( const dataList:TStringList;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

functionUpdateDataFromListView( const dataList:TStringList;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

// 注意:删除的鍵值預設以SubItem[0]為标準

Delphi ListView快速操作通用實作

functionDeleteDataFromListView( const dataList:TStringList;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

// 子類必須實作

Delphi ListView快速操作通用實作

class functionCheckFound( const pData:Pointer; const aKey:variant): boolean ;virtual; abstract ;

Delphi ListView快速操作通用實作

class procedureProcOnDataDetail( const pData:Pointer;varItem:TListItem);virtual; abstract ;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

public

Delphi ListView快速操作通用實作

constructorCreate();overload;

Delphi ListView快速操作通用實作

destructorDestroy();override;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

implementation

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

... {TLVCommonClass}

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVCommonClass.AddDataToListView( const dataList:TStringList;

Delphi ListView快速操作通用實作

varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

liTemp:TListItem;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

if dataList.Count > 0 then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

lvTemp.Items.BeginUpdate();

Delphi ListView快速操作通用實作

liTemp: = lvTemp.Items.Add();

Delphi ListView快速操作通用實作

CommonListItemProcess(dataList,liTemp, false );

Delphi ListView快速操作通用實作

// liTemp.Caption:=dataList.Strings[dataIndex];

Delphi ListView快速操作通用實作

// Inc(dataIndex);

Delphi ListView快速操作通用實作

// while(dataIndex<dataList.Count)do

Delphi ListView快速操作通用實作

// begin

Delphi ListView快速操作通用實作

// liTemp.SubItems.Add(dataList.Strings[dataIndex]);

Delphi ListView快速操作通用實作

// Inc(dataIndex);

Delphi ListView快速操作通用實作

// end;

Delphi ListView快速操作通用實作

lvTemp.Items.EndUpdate();

Delphi ListView快速操作通用實作

Result: = true ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

procedureTLVCommonClass.CommonListItemProcess( const dataList:TStringList;

Delphi ListView快速操作通用實作

varliTemp:TListItem; const isUpdate: boolean );

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

dataIndex:integer;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

dataIndex: = 0 ;

Delphi ListView快速操作通用實作

liTemp.Caption: = dataList.Strings[dataIndex];

Delphi ListView快速操作通用實作

Inc(dataIndex);

Delphi ListView快速操作通用實作

while (dataIndex < dataList.Count) do

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if (dataIndex = dataList.Count - 1 )andStrIsNumber(PChar(dataList.Strings[dataIndex]))then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

liTemp.ImageIndex: = StrToInt(dataList.Strings[dataIndex]);

Delphi ListView快速操作通用實作

end

Delphi ListView快速操作通用實作

else

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if isUpdatethen

Delphi ListView快速操作通用實作

liTemp.SubItems[dataIndex - 1 ]: = dataList.Strings[dataIndex]

Delphi ListView快速操作通用實作

else

Delphi ListView快速操作通用實作

liTemp.SubItems.Add(dataList.Strings[dataIndex]);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

Inc(dataIndex);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

constructorTLVCommonClass.Create;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

inheritedCreate();

Delphi ListView快速操作通用實作

cxxLVC: = TCXXLVControler.Create();

Delphi ListView快速操作通用實作

tmpList: = TStringList.Create();

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVCommonClass.DeleteDataFromListView(

Delphi ListView快速操作通用實作

const dataList:TStringList;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

colIndex:integer;

Delphi ListView快速操作通用實作

// liTemp:TListItem;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

if dataList.Count > 0 then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

colIndex: = GetLVItemOrderByValue(lvTemp,dataList.Strings[GetColumnOrder + 1 ],GetColumnOrder);

Delphi ListView快速操作通用實作

if (colIndex <> SpecialItemOrder)andAssigned(cxxLVC)then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

cxxLVC.DeleteItemByIndex(lvTemp,colIndex);

Delphi ListView快速操作通用實作

Result: = true ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

destructorTLVCommonClass.Destroy;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if Assigned(cxxLVC)then

Delphi ListView快速操作通用實作

FreeAndNil(cxxLVC);

Delphi ListView快速操作通用實作

if Assigned(tmpList)then

Delphi ListView快速操作通用實作

FreeAndNil(tmpList);

Delphi ListView快速操作通用實作

inheritedDestroy;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVCommonClass.GetLVItemOrderByValue( const lvTemp:TListView;

Delphi ListView快速操作通用實作

const aKeyValue:string; const columnOrder:integer):integer;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

Loop:integer;

Delphi ListView快速操作通用實作

isOK: boolean ;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = SpecialItemOrder;

Delphi ListView快速操作通用實作

isOK: = false ;

Delphi ListView快速操作通用實作

for Loop: = 0 tolvTemp.Items.Count - 1 do

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if columnOrder <> SpecialItemOrderthen

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

if (columnOrder >= 0 )and(columnOrder < lvTemp.Columns.Count)then

Delphi ListView快速操作通用實作

isOK: = (lvTemp.Items[Loop].SubItems[columnOrder] = aKeyValue);

Delphi ListView快速操作通用實作

end

Delphi ListView快速操作通用實作

else

Delphi ListView快速操作通用實作

isOK: = (lvTemp.Items[Loop].Caption = aKeyValue);

Delphi ListView快速操作通用實作

if isOKthen

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = Loop;

Delphi ListView快速操作通用實作

break ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVCommonClass.InitListViewColumns( const displayName:arrayofstring;

Delphi ListView快速操作通用實作

const displayWidth:arrayofinteger;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

if Assigned(cxxLVC)then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

cxxLVC.InitLVColumns(displayName,displayWidth,lvTemp);

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

class functionTLVCommonClass.StrIsNumber( const str:PChar): boolean ;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

p:Char;

Delphi ListView快速操作通用實作

i:integer;

Delphi ListView快速操作通用實作

functionCheckHex(p:Char): boolean ;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

k:Byte;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

k: = Ord(P);

Delphi ListView快速操作通用實作

Result: = ((k >= 48 )and(k <= 57 ))or((k >= 65 )and(k <= 70 ))or((k >= 97 )and(k <= 102 ));

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

try

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

for i: = 0 toLength(str) - 1 do

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

p: = str[i];

Delphi ListView快速操作通用實作

Result: = CheckHex(p);

Delphi ListView快速操作通用實作

if NOTResultthen

Delphi ListView快速操作通用實作

break ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

except

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

functionTLVCommonClass.UpdateDataFromListView(

Delphi ListView快速操作通用實作

const dataList:TStringList;varlvTemp:TListView): boolean ;

Delphi ListView快速操作通用實作

var

Delphi ListView快速操作通用實作

colIndex:integer;

Delphi ListView快速操作通用實作

liTemp:TListItem;

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

Result: = false ;

Delphi ListView快速操作通用實作

if dataList.Count > 0 then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

colIndex: = GetLVItemOrderByValue(lvTemp,dataList.Strings[GetColumnOrder + 1 ],GetColumnOrder);

Delphi ListView快速操作通用實作

if (colIndex <> SpecialItemOrder)then

Delphi ListView快速操作通用實作

begin

Delphi ListView快速操作通用實作

lvTemp.Items.BeginUpdate();

Delphi ListView快速操作通用實作

liTemp: = lvTemp.Items[colIndex];

Delphi ListView快速操作通用實作

CommonListItemProcess(dataList,liTemp, true );

Delphi ListView快速操作通用實作

// liTemp.Caption:=dataList.Strings[dataIndex];

Delphi ListView快速操作通用實作

// Inc(dataIndex);

Delphi ListView快速操作通用實作

// while(dataIndex<dataList.Count)do

Delphi ListView快速操作通用實作

// begin

Delphi ListView快速操作通用實作

// liTemp.SubItems[dataIndex-1]:=dataList.Strings[dataIndex];

Delphi ListView快速操作通用實作

// Inc(dataIndex);

Delphi ListView快速操作通用實作

// end;

Delphi ListView快速操作通用實作

lvTemp.Items.EndUpdate();

Delphi ListView快速操作通用實作

Result: = true ;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作

end;

Delphi ListView快速操作通用實作
Delphi ListView快速操作通用實作

end.