




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、移動程序 listview 可視化定制控件GYListView 控件安裝使用說明支持 Windows,mac,ios,android 所有平臺(此文件版本 5.0 forD10.1update2 2017-04-28)作者:高勇前言:控件會留下您的私人信息,請不要擴(kuò)散,這樣可以保證升級。技術(shù)支持請加入:GYListView 控件 208126593, 否則不能夠升級。贊助地址: 24548/詳情:2.0 forD10.1update2 2017-04-18 更新說明:1、修正上一版本顯示出數(shù)據(jù)后,在滑動的過程中有可能數(shù)據(jù)消失的 bug;2、將每個(gè) item 的文本字段由原來的 15 個(gè)增加到
2、20 個(gè);3、修改了當(dāng)窗體寬度發(fā)生變化時(shí),更新 item 里字段顯示位置的算法,更加快捷與實(shí)用了。3.0 forD10.1update2 2017-04-19 更新說明:1、新增加一個(gè)通用的 ListView1GetData 過程,用來通過 3 層分頁數(shù)據(jù)集,再導(dǎo)入到 ListView1 的過程,采用線程的方式,增加時(shí)的動畫提示窗口。2、新增加 listview 里圖片的導(dǎo)入方式,支持從本機(jī)或者網(wǎng)絡(luò)直接導(dǎo)入圖片,線程異步方式實(shí)現(xiàn)。3、新增更加簡潔的item 內(nèi)的文字,圖片和按鈕的函數(shù),原來的太長了。4、新增加所有同一個(gè)模板下的 item 內(nèi)同一個(gè)文本字段的統(tǒng)計(jì)功能,可以單獨(dú)統(tǒng)計(jì),也可以一次統(tǒng)計(jì)
3、所有 20 個(gè)文本字段的各自的和。5、新增上拉增加一組數(shù)據(jù)和下拉刷新的示例,修正與自帶本地搜索的問題,解決上滑與下滑的問題。6、新增加點(diǎn)擊不同模板下的 item 內(nèi)的不同控件的響應(yīng)示例,item 內(nèi)的任何文本,圖片等都可以成為一個(gè)按鈕,點(diǎn)擊后不但有動畫效果,還可以執(zhí)行你的任何代碼。3.5 forD10.1update2 2017-04-20 更新說明:1、新增可以讓任何文本,自動根據(jù)文字內(nèi)容進(jìn)行變高,其下的控件自下調(diào)整,被覆蓋。2、新增可以讓任何文本點(diǎn)擊后展開,再點(diǎn)擊后會收攏。3、新增加另一種不帶圖片文件名的4、修復(fù)導(dǎo)入同一張圖片會異常的 bug。的圖片的兼容。5、修復(fù)搜索框不可見時(shí),程序出錯(cuò)
4、的 bug。6、修復(fù) 2 處內(nèi)存泄漏。4.0 forD10.1update2 2017-04-21 更新說明:1、新增可以讓任何文本,進(jìn)行編輯,編輯后可以立即調(diào)整文本顯示高度,及其它控件的位置。2、解決要編輯的文本被輸入法檔住的難題。3、解決編輯時(shí)與數(shù)據(jù)更新的。4、解決編輯時(shí),可能對窗體其它按鈕進(jìn)行誤操作的。5、解決編輯時(shí),和橫屏的。6、解決編輯時(shí),編輯框的大小、位置和顏色盡量與原有文本一致。4.5 forD10.1update2 2017-04-24 更新說明:1、新增可以設(shè)定從網(wǎng)上錄的尷尬事情出現(xiàn)。的圖片的緩存目錄名稱,避免所有 app 使用同一目2、增加了刪除緩存圖片的調(diào)用示例。5.0
5、forD10.1update2 2017-04-26 更新說明:1、新增在沒有選擇行的情況下,可以將當(dāng)前行上下移動指定行數(shù)。2、新增編輯 text 時(shí),可以指定鍵盤類型:如編輯移動的行數(shù)時(shí)指定為數(shù)字鍵盤。3、新增行選擇功能,可以設(shè)置為單選或者多選,可以更換選擇狀態(tài)圖片,可以執(zhí)行全選(單選時(shí)無效),全不選或者反選(單選時(shí)無效)。 4、新增下拉列表編輯功能。5、新增時(shí)間編輯功能。6、新增日期編輯功能。7、新增加圖片的按比例顯示的功能,如顯示星級等等。8、新增加刪除指定的行。9、新增加刪除所有選定的行。一、安裝說明(僅僅支持 Delphi 10.1update2):1、將目錄 GYListView
6、拷貝到一個(gè)固定目錄,例如“D: RADStudio10.1update2Kongjian”下。準(zhǔn)備好我們的路徑字符串,這里是如下(紅色部分不要修改): D:RADStudio10.1update2KongjianGYListViewDCUFMXXE10$(Platform)Release說明:“D: RADStudio10.1update2Kongjian”請根據(jù)實(shí)際情況調(diào)整,其它不用變更。2、打開 Delphi,添加路徑:(下圖中的路徑以您的實(shí)際路徑為準(zhǔn))你添加的路徑一定要移動到最上面。每個(gè)平臺都要添加路徑,這是常識,當(dāng)然,你保證不編譯到該平臺,也是可以不用添加的。3、安裝控件:二、使用說明
7、:使用 demo 中,每個(gè)窗口基本。1、首先看看form1 的界面:說明:GY1ListItem 為 listview 的可視化設(shè)計(jì)模板,用來輔助設(shè)計(jì)listview 的 item 內(nèi)的控件的布局及外觀,一個(gè)窗口中最多可以有 10 個(gè)模板,命名規(guī)則為 GY1ListItem,GY2ListItem, GY3ListItem, ,GY10ListItem,哪個(gè) listview 要用它,就把它放置在哪個(gè) listview 中,一個(gè)listview 中可以有多個(gè),align 為 bottom。在這個(gè) item 設(shè)計(jì)模板中:可以放置最多 12 個(gè) TImage 圖片控件,如 GY1Image,GY1
8、Image00,GY1Image01, GY1Image02,.,GY1Image10;(GY1Image 可以專門用來放置星級圖片,GY1Image00 專門用來放置行選擇狀態(tài)的圖片)可以放置最多 20 個(gè) TText 字符控件,如GY1Text01,GY1Text02, ,GY1Text20;可以放置最多 5 個(gè) TButton 按鈕,如GY1TextButton01, ,GY1TextButton05。每一個(gè)模板里的這 22 個(gè)控件,其前綴如 GY1 要與該模板的前綴一致。如模板 GY2ListItem內(nèi)的控件都要是GY2 開頭的。文件名有嚴(yán)格的規(guī)律,請不要隨便更改為其它名稱,否則將會出
9、問題。控件的名稱最后兩個(gè)字要嚴(yán)格按 01,02,開始編號,切記,中間不得有缺項(xiàng),必須要連續(xù)。每類控件不超過最多數(shù)即可。(GY1Image,GY1Image00 在連續(xù)性要求上沒有要求,不用也沒有關(guān)系)如何使用該控件:安裝好該控件,再從本控件的 demo 中拷貝一個(gè) listview 控件到你的目標(biāo)窗口即可。新版本的強(qiáng)大功能的圖解說明:5.0 新版本的基本用法都在 form1 里面,請?jiān)敿?xì)閱讀初始化為:page := 1;procedure TForm1.ListView1GetData; / 通用標(biāo)準(zhǔn)varargs: array 0 . 2 of Variant; LItem: TListVi
10、ewItem;rem: Variant; begin$IF DEFINED(IOS) or DEFINED(ANDROID)/ if SJDM.SJGY.GetNetworkState = '0' then/ begin/ SJDM.SJGY.ToastConfirm('請打開網(wǎng)絡(luò)連接', self, 1.5);/ exit;/ end;$ENDIFself.Focused := nil;ListViewImageCacheFolderName := 'GYlistviewDemoImageCache' / 設(shè)置 ListView 導(dǎo)入圖片時(shí)的緩
11、存目錄名稱(防止不同 app 使用同一個(gè)文件夾)SetListView(ListView1, GY1ListItem); / 要用到的模板必須這樣調(diào)用一下SetListView(ListView1, GY2ListItem); / 要用到的模板必須這樣調(diào)用一下if page = 1 then / 如果是第一頁,清空內(nèi)存圖片緩存,這個(gè)前提是事先沒有預(yù)存圖片,否則不要刪除程序預(yù)存圖片begin / 相當(dāng)于重新加載數(shù)據(jù)/ ListView1.Images.Source.Clear; ListView1.ScrollViewPos := 0; ListView1.Items.Clear;Initial
12、izeItemCheck(ListView1, true); / 初始化設(shè)置 Item 的選擇方式,單選false 還是多選 true,前提是您要先設(shè)置好模板內(nèi)的 GY1Image00,這個(gè)選擇圖標(biāo)end;的/ 以下給客戶端要上傳給服務(wù)端的參數(shù)賦值args0 := page; / 頁碼ID 號/ args1 := form1.id; /MyWaitShow('正在,請稍后', self);TThread.CreateAnonymousThread( / 創(chuàng)建一個(gè)單線程,完成一個(gè)沒有界面交互的任務(wù)procedure vars, temps: string;begin / 線程里的
13、一些代碼。sleep(300); / 代替下一句,模擬時(shí)間/ rem := DM.SQLOpen('GY_SimpleService1', '', 'cx_MyGroup', args, AkbmMemTable); /3 層rem := '1' / 臨時(shí)模擬數(shù)據(jù)庫if rem = '1' then / 如果beginTThread.Synchronize(TThread.CurrentThread, procedure / 處理界面交互代碼寫這里vari: Integer; h: Single;begin/ if
14、 AkbmMemTable.RecordCount > 0 then/返回的數(shù)據(jù)集if true then / 模擬代替上一行beginListView1.BeginUpdate;if ListView1.ItemCount > 0 thenListView1.Items.Delete(ListView1.ItemCount - 1); / 刪除最后和統(tǒng)計(jì)條,添加完畢數(shù)據(jù)后再加/ for i := 1 to AkbmMemTable.RecordCount do for i := 1 to Edit1.Text.ToInteger do / 模擬代碼beginLItem := Li
15、stView1.Items.Add; / ListView1 增加一行GYListviewSetSetings(self, LItem, 'GY1', true); / 給新增加的這一行指定模板,參數(shù)的意思是,(本窗口,要指定模板的 item,模板的前綴字符串,是否把模板中的控件值直接賦值到 item 對應(yīng)的控件中)/ 以下這一行,要放在其它文本賦值的前面SetItemIsCheck(self, ListView1, LItem, false); / 設(shè)置 item 的默認(rèn)不選擇,如果 SetItemIsCheck(self,ListView1,LItem,true)就是默認(rèn)選
16、擇/ 新版本控件用法(當(dāng)然原來的方法照樣可以用):/ 給每個(gè)字段賦值GetText('01', LItem).Text := '總第' + inttostr(LItem.Index + 1) + '行:' + GetText('01', LItem).Text; GetText('02', LItem).Text := '第' + inttostr(i) + '行:' + GetText('02', LItem).Text;GetText('03',
17、LItem).Text := FormatDateTime('hh:mm', Now); GetText('04', LItem).Text := inttostr(i);/ 我們希望 Text05 是變高字符串temps := '天舟一號貨運(yùn)飛船發(fā)射升空后,將進(jìn)入高度約 380 公里的運(yùn)行軌道,之后將與在軌運(yùn)行的天宮二號空間對接。天舟一號將裝載超過 6 噸的物資與設(shè)備飛向太空。'GetText('05', LItem).Text := temps.Substring(randomrange(0, temps.Length - 1
18、0); / 取隨機(jī)長度的字符串進(jìn)行自動交會h := SetTextHeight('05', LItem, true); / 重新指定該 Text 的高度和 item 的高度,返回值為item 增加的高度,為 true 時(shí)自動調(diào)整其下面的控件的位置GetText('06', LItem).Text := temps.Substring(randomrange(0, temps.Length - 10); / 取隨機(jī)長度的字符串h := SetTextHeight('06', LItem, true); / 重新指定該 Text 的高度和 item
19、的高度,返回值為item 增加的高度,為 true 時(shí)自動調(diào)整其下面的控件的位置/ 給每個(gè)圖片賦值$IFDEF MSWINDOWS / 電腦上,為了演示第一個(gè)從本地直接取圖片if i = 1 thenGetBitmapFromFile('01', LItem, '.圖標(biāo)120x120.png', ListView1, 120) / else if i = 2 then / 如果是以下地址,要求第一個(gè)參數(shù)ver=效,可能被刪除了,會載入設(shè)計(jì)時(shí)模板的圖片GetBitmapFromFile('01', LItem, 'else if i = 3
20、 then / 可以重新指定圖片邊長為 120(生成最大正方形圖片) GetBitmapFromFile('01', LItem, 'else if i = 4 then / GetBitmapFromFile('01', LItem, 'else if i = 5 then從本地直接取圖片0(等號右邊的字符串)可以代表圖片名稱,如果無0', ListView1, 120)', ListView1, 120)', ListView1, 120)GetBitmapFromFile('01', LItem, &
21、#39;else if i = 6 thenGetBitmapFromFile('01', LItem, '.4.png', ListView1) / 從本地直接取圖片上,全部從網(wǎng)絡(luò)取圖', ListView1, 120)$ELSE /程中從網(wǎng)絡(luò)直接取圖片 /可以重新指定圖片邊長為 120(生成最大正方形圖片)if i = 1 then /GetBitmapFromFile('01', LItem, 'else if i = 2 then / 如果是以下地址,要求第一個(gè)參數(shù)ver=效,可能被刪除了,會載入設(shè)計(jì)時(shí)模板的圖片GetBi
22、tmapFromFile('01', LItem, ' else if i = 3 thenGetBitmapFromFile('01', LItem, ' else if i = 4 thenGetBitmapFromFile('01', LItem, ' else if i = 5 thenGetBitmapFromFile('01', LItem, ' else if i = 6 thenGetBitmapFromFile('01', LItem, '$ENDIFels
23、eGetImage('01', LItem).ImageIndex := randomrange(0, 16); /的話,就不能這樣設(shè)置了', ListView1, 120)0(等號右邊的字符串)可以代表圖片名稱,如果無0', ListView1, 120)', ListView1, 120)', ListView1, 120)', ListView1, 120)', ListView1, 120)指定 ListView1 所綁定的 ImageList1 的圖片序號,事先保存有圖片的,沒有GetImage('02'
24、, LItem).Bitmap := GY1Image02.Bitmap;SetImageRateNum(self, LItem, randomrange(1, 5), 5); / 不指定時(shí)默認(rèn)為設(shè)置GY1Image 的顯示比例,randomrange(1, 5)是,5 是分母。可以用來顯示星級SetImageRateNum(self, LItem, randomrange(1, 5), 5, '06'); / 設(shè)置 GY1Image06 的顯示比例/ AkbmMemTable.next;end;LItem := ListView1.Items.Add; / ListView1
25、 增加一行 增加統(tǒng)計(jì)條GYListviewSetSetings(self, LItem, 'GY2', true); / 用的是模板 2 GetText('01', LItem).Text := 'GY1Text04 合計(jì):'/ GetText('02', LItem).Text := GlTextSum(ListView1, 'GY1', '04'); /只求一個(gè)字段的和lTextSum(ListView1, 'GY1'); / 一次返回所有 20 個(gè)字段的各自求和,一定要先賦值給
26、變量,免得多次重復(fù)計(jì)算s := GGetText('02', LItem).Text := NString('#', s, 4); / 取第 4 個(gè)字段,即所有模板為GY1 的行內(nèi)Text04 的和ListView1.EndUpdate;ListView1CanLoad := true; / 標(biāo)識本頁數(shù)據(jù)加載完畢MyWaithide(self); endelse beginTThread.Synchronize(TThread.CurrentThread, procedure / 處理界面交互代碼寫這里beginListView1CanLoad := false
27、; / 到達(dá)最后一頁了MyWaithide(self); end);end;end);endelse / 如果出錯(cuò)了beginTThread.Synchronize(TThread.CurrentThread, procedure / 處理界面交互代碼寫這里beginListView1CanLoad := true; / 標(biāo)識數(shù)據(jù)可以重新加載MyWaithide(self);ToastConfirm('失敗,請稍后重試', self, 1); / rem 會返回錯(cuò)誤信息end);end; end).Start;end;procedure TForm1.ListView1Item
28、ClickEx(const Sender: TObject; ItemIndex: Integer; const Ref LocalClickPos: TPointF; const ItemObject: TListItemDrawable);varPicTempFile, s,i, k, m: Integer;: string;LItem, atempLItem: TListViewItem;beginif ListView1.EditMode = true then / 如果在編輯狀態(tài),則不執(zhí)行點(diǎn)擊exit;LItem := TListViewItem(ListView1.Items.It
29、emItemIndex);:= GetText('99', LItem).Text;/if= 'GY1' then / 如果用的是模板 1,一個(gè)窗體最多 10 個(gè)模板 (先要模板,這樣你才知道布局)beginif ItemObject <> nil then / 如果點(diǎn)擊了 item 內(nèi)的某個(gè)控件beginif ItemObject.Name = 'I' then / 點(diǎn)擊代表選擇的這張圖片,模板中由GY1Image00 指定beginShowHitEffect(ItemObject, $FFFF0000, 50); / 執(zhí)行點(diǎn)擊動態(tài)
30、效果ChangeItemCheck(self, LItem, ListView1); / 點(diǎn)擊 Image 圖片后,更改圖片并返回當(dāng)前行的 check 狀態(tài):LItem.Tag:=1 如果為 1 表示選擇了,為 0 表示沒有選擇m := 0; / 以下求所有已經(jīng)選擇的 Text04 的和for i := 0 to ListView1.ItemCount - 1 do beginatempLItem := TListViewItem(ListView1.Items.Itemi);if atempLItem.HasSelected = true then / 表示選擇了該行m := m + Get
31、Text('04', atempLItem).Text.ToInteger;end;ToastConfirm('共選擇' + ListView1.SelectedItemNum.ToString + '行,Text04 的和:' + m.ToString, self, 1.5); exit;end;if ItemObject.Name = 'Image01' then / 點(diǎn)擊第一張圖片beginShowHitEffect(ItemObject, $FFFF0000, 50); / 執(zhí)行點(diǎn)擊動態(tài)效果showmessage('
32、;圖片地址(如果為空,表示導(dǎo)入的是在程序設(shè)計(jì)時(shí)就保存的圖片):' + GetImage('01', LItem).TagString); /址保存在 TagStringexit; end;if ItemObject.Name = 'Image05' then / 點(diǎn)擊第 5 張圖片beginShowHitEffect(ItemObject, $FFFF0000, 50); / 執(zhí)行點(diǎn)擊動態(tài)效果if DeleteHuanCunPath(ListViewImageCacheFolderName) = true then自動導(dǎo)入圖片后,圖片地showmessa
33、ge('您清空了所有緩存的圖片!不過沒有關(guān)系,會自動再exit;end;if ItemObject.Name = 'Image07' then / 點(diǎn)擊第 7 張圖片beginShowHitEffect(ItemObject, $FFFF0000, 50); / 執(zhí)行點(diǎn)擊動態(tài)效果DeleteItem(ListView1, ItemIndex);/刪除當(dāng)前行ToastConfirm('第'+(ItemIndex+1).ToString+'行刪除完畢',self, 1.5); exit;end;if ItemObject.Name =
34、9;Text01' then / 點(diǎn)擊第 2 個(gè)文本beginShowHitEffect(ItemObject, $FFFF0000, 50); / 執(zhí)行點(diǎn)擊動態(tài)效果showmessage('您點(diǎn)擊的內(nèi)容是:' + GetText('01', LItem).Text); exit;end;if ItemObject.Name = 'Text02' then / 點(diǎn)擊第 2 個(gè)文本的。');beginClickToSelectText('02', LItem, ListView1, self, '自力更生,
35、exit;end;if ItemObject.Name = 'Text03' then / 點(diǎn)擊第 3 個(gè)文本begin創(chuàng)業(yè),怨天尤人,消極厭世,無所事事,游手好閑'); /調(diào)用 TComboBox 進(jìn)入編輯狀態(tài)ClickToSelectTime('03', LItem, ListView1, self); / 調(diào)用 TTimeEdit 進(jìn)入編輯狀態(tài)exit; end;if ItemObject.Name = 'Text07' then / 點(diǎn)擊第 7 個(gè)文本beginClickToSelectDate('07', LIt
36、em, ListView1, self); / 調(diào)用 DateEdit 進(jìn)入編輯狀態(tài)exit; end;if ItemObject.Name = 'Text05' then / 點(diǎn)擊第 5 個(gè)文本beginClickToEditText('05', LItem, ListView1, self); / 進(jìn)入編輯狀態(tài)exit; end;if ItemObject.Name = 'Text06' then / 點(diǎn)擊第 6 個(gè)文本beginShowHitEffect(ItemObject, $FFFF0000, 50); ClickToLookMore
37、Text('06', LItem); / 自動展開或者縮回高度exit;end;if ItemObject.Name = 'Text10' then / 點(diǎn)擊第 10 個(gè)文本beginClickToEditText('10', LItem, ListView1, self, TvirtualKeyboardType.NumberPad); / 進(jìn)入編輯狀態(tài)exit; end;if ItemObject.Name = 'Text09' then / 點(diǎn)擊第 09 個(gè)文本beginShowHitEffect(ItemObject, $
38、FFFF0000, 50);MoveItem(self, ListView1, LItem, strtoint('-' + GetText('10', LItem).Text); / 向上移動 item exit;end;if ItemObject.Name = 'Text11' then / 點(diǎn)擊第 11 個(gè)文本beginShowHitEffect(ItemObject, $FFFF0000, 50);MoveItem(self, ListView1, LItem, strtoint(GetText('10', LItem).T
39、ext); / 向下移動 item exit;end;end;showmessage('您點(diǎn)擊的內(nèi)容是除了圖片 1,文本 1 和文本 2 的別的地方'); / 點(diǎn)擊了當(dāng)前 item 的別的地方/ 寫您要處理的end;/if= 'GY2' then / 如果用的是模板 2,一個(gè)窗體最多 10 個(gè)模板 (先要模板,這樣你才知道布局)beginif ItemObject <> nil then / 如果點(diǎn)擊了 item 內(nèi)的某個(gè)控件beginif ItemObject.Name = 'Image01' then / 點(diǎn)擊第 1 張圖片beg
40、inShowHitEffect(ItemObject, $FFFF0000, 50);showmessage('您刪除了' + DeleteAllCheckedItem(ListView1).ToString + '行'); exit;end;if ItemObject.Name = 'Text01' then / 點(diǎn)擊第 1 個(gè)文本begin/ 寫您要處理的exit; end;end;/ 寫您要處理的end;/if= 'GY3' then / 如果用的是模板 3,一個(gè)窗體最多 10 個(gè)模板(先要模板,這樣你才知道布局)begin
41、if ItemObject <> nil then / 如果點(diǎn)擊了 item 內(nèi)的某個(gè)控件beginif ItemObject.Name = 'Image01' then / 點(diǎn)擊第 1 張圖片begin/ 寫您要處理的exit; end;if ItemObject.Name = 'Text01' then / 點(diǎn)擊第 1 個(gè)文本begin/ 寫您要處理的exit; end;end;/ 寫您要處理的end;end;procedure TForm1.FormResize(Sender: TObject);beginGYListviewFormResiz
42、e(self, ListView1); / 當(dāng)屏幕end;發(fā)生變化時(shí),設(shè)置 ListView 的 item 的格式procedure TForm1.ListView1ScrollViewChange(Sender: TObject);beginif CanGetNextGroupData(ListView1, '上拉加載begin信息') and (ListView1CanLoad = True) and (IsEditing=false) then / 上拉到極限后自動加載下一組數(shù)據(jù)ListView1CanLoad := false; / 防止重復(fù)執(zhí)行加載page := pa
43、ge + 1; / 分頁的當(dāng)前頁ListView1GetData; / 加載下一組數(shù)據(jù)end;if CanReFreshData(ListView1, '下拉刷新數(shù)據(jù)') and (ListView1CanLoad = True) and (IsEditing=false) then / beginListView1CanLoad := false; / 防止重復(fù)執(zhí)行加載page := 1; / 分頁的當(dāng)前頁ListView1GetData; / 加載下一組數(shù)據(jù)end;end;下拉到極限后自動加載第一組數(shù)據(jù)要事先設(shè)置一些共公變量:publicListView1CanLoad:
44、Boolean; / 上滑自動加載用page: Integer; / sql 分頁用LItem := ListView1.Items.Add; / ListView1 增加一行 增加統(tǒng)計(jì)條GYListviewSetSetings(self, LItem, 'GY2', True); / 用的是模板 2 GetText('01', LItem).Text := 'GY1Text04 合計(jì):'/GetText('02', LItem).Text := GlTextSum(ListView1, 'GY1', '0
45、4'); /只求一個(gè)字段的和s:=GlTextSum(ListView1, 'GY1');/一次返回所有 20 個(gè)字段的各自求和,一定要先賦值給變量s,免得多次重復(fù)計(jì)算GetText('02', LItem).Text :=NString('#', s, 4); /取第 4 個(gè)字段,即所有模板為GY1 的行內(nèi)Text04 的和專題說明:一、顯示本地搜索框?qū)?listview 的 item 進(jìn)行本地搜索1、修改兩個(gè)屬性:只需要這一步,即可搜索 listview 內(nèi) item 中的所有可見字段的內(nèi)容,這些字段內(nèi)容只要包含你的搜索字串就顯示。清
46、空搜索字串,顯示全部。(參考 unit Unit1)以下為擴(kuò)充,一般不用。如果用了,則默認(rèn)搜索所有字段失效。(參考 unit Unit2)2、如果你只要搜索指定字段的內(nèi)容,請?jiān)诮o listview 賦值時(shí),將要搜索的內(nèi)容賦值給 item 內(nèi)的 Text 中,然后再添加一個(gè)注:Litem 為一個(gè)當(dāng)前操作的item。以下相當(dāng)于對 Text01 的值進(jìn)行搜索。所以將其賦值給了 Text。TListItemText(LItem.Objects.FindObject('Text01') .Text:= '第' + inttostr(LItem.Index + 1) + &
47、#39;行:一般從數(shù)據(jù)庫是LItem.Text:= TListItemText(LItem.Objects.FindObject('Text01') .Text;' / ListView1Filter 搜索要用的。ListView1 要增加的 onFilter(代碼內(nèi)容是通用的,不用修改):procedure TForm2.ListView1Filter(Sender: TObject; const AFilter, AValue: string; var Accept: Boolean);beginif AFilter <> '' then
48、Accept := AValue.ToLower.Contains(AFilter.ToLower)/ 記住,在給 listview 賦值時(shí)要把要搜索的值賦給 LItem.text,因?yàn)?AValue=LItem.text elseAccept := true;/搜索字串是空值,顯示所有字段end;以上也可以變通,text 的內(nèi)容你可以任意指定,這樣搜索的條件你可以字義。相當(dāng)靈活。如你的是,你可以給 text 賦值拼音首字母+拼音+姓名中文+號碼,如 LItem.Text:= 'gygaoyong 高勇'這樣搜索就全能了。但記住,這是對已經(jīng)導(dǎo)入listview 的 item 進(jìn)
49、行本地搜索。二、如何讓 item信息(參考 unit UTree)注:Litem 為一個(gè)當(dāng)前操作的item。默認(rèn)下,一個(gè) item 可以15 個(gè)字段信息并顯示。如果我們要的信息,這些信息不用顯示,我們有以下辦法:1、保存在不顯示的字段里,如果該字段的 visible 為 false,你直接保存在該字段即可。如: TListItemText(LItem.Objects.FindObject('Text15').Text15 := '我要保存的信息' TListItemText(LItem.Objects.FindObject('Text15').
50、Visible:=false;2、我給每個(gè) item 增加了一個(gè)屬性SubStrings,這是一個(gè) TStringList,你可以向其內(nèi)保存任意數(shù)據(jù)。LItem.SubStrings.Add('我要保存的信息'); /對其取值 s:= LItem.SubStrings.strings0 ;LItem.SubStrings.Add('cengji=2'); /對其取值 k1 := LItem.SubStrings.Values'cengji '.ToInteger; LItem.SubStrings.Add('count=0');
51、/對其取值 k2 := LItem.SubStrings.Values'count'.ToInteger;注:關(guān)于 delphi TStringList 用法詳解,請參考博客:42633/通過這 2 種方法,你要在item 內(nèi)保存的信息就是很簡單的事情了。三、實(shí)現(xiàn)樹狀結(jié)構(gòu)(參考 unit UTree) 注:Litem 為一個(gè)當(dāng)前操作的item。1、我們準(zhǔn)備了 2 個(gè)模板,一個(gè)指定給目錄,一個(gè)指定給下級。在給 listview 填充數(shù)據(jù)時(shí),我們通過“二、如何讓 item procedure TFormTree.Button_zhuceClick(Sender: TObject);
52、 varLItem: TListViewItem; I, j,k: Integer; SubStrings: TStringList;beginself.Focused := nil;ListView1.ItemSpaces.Left := GY1ListItem.Margins.Left; ListView1.ItemSpaces.Right := GY1ListItem.Margins.Right; ListView1.ItemSpaces.Top := GY1ListItem.Margins.Top; ListView1.ItemSpaces.Bottom := GY1ListItem.
53、Margins.Bottom; GY1ListItem.Visible := true;GY1ListItem.Visible := false; GY2ListItem.Visible := true;GY2ListItem.Visible := false;信息(參考 unit UTree)”中介紹的方法,保存了一些樹結(jié)構(gòu)所需要的信息:ListView1.BeginUpdate;for I := 1 to Edit1.Text.ToInteger do / 假設(shè)有Edit1.Text.ToInteger 個(gè)目錄beginLItem := ListView1.Items.Add; / 先加上
54、一層GYListviewSetSetings(self, LItem, 'GY2', true); / 設(shè)定格式,用模板GY2 LItem.Data'Text01' := '推薦商家(第' + inttostr(I) + '行)'/ 設(shè)置指示圖片TListItemImage(LItem.Objects.FindObject('Image01').Visible := true; / 顯示向右的箭頭TListItemImage(LItem.Objects.FindObject('Image02').V
55、isible := false; / 隱藏向下的箭頭LItem.SubStrings.Add('shangceng=-1'); / 記住上層的index 值,-1 表示沒有LItem.SubStrings.Add('cengji=1'); / 標(biāo)識目錄樹層級,當(dāng)前第 1 級目錄LItem.SubStrings.Add('count=3'); / 標(biāo)識下一層的數(shù)量,展開要用的,0 表示沒有下級k:=LItem.index;for j := 1 to 3 do / 填充每個(gè)目錄設(shè)定的子目錄beginLItem := ListView1.Items.A
56、dd;GYListviewSetSetings(self, LItem, 'GY1', false); / 設(shè)定格式LItem.SubStrings.Add('shangceng=' + inttostr(k); / 記住上層的 index 值,如果此行要刪除,可以方便修改上層的標(biāo)識的下層數(shù)量值LItem.SubStrings.Add('cengji=2'); / 標(biāo)識目錄樹層級,當(dāng)前第 2 級LItem.SubStrings.Add('count=0'); / 標(biāo)識下一層的數(shù)量,展開要用的,0 表示沒有下級/ 給每個(gè)字段賦值LI
57、tem.Data'Text01' := '第' + inttostr(j) + '行:東東包(金花店)'if I mod 5 = 0 then / 模擬不同數(shù)量的星星LItem.Data'Text02' := '' if I mod 5 = 1 thenLItem.Data'Text02' := '' if I mod 5 = 2 thenLItem.Data'Text02' := '' if I mod 5 = 3 thenLItem.Data
58、9;Text02' := '' if I mod 5 = 4 thenLItem.Data'Text02' := ''LItem.Data'Text03' := '人均' + inttostr(randomrange(30, 100) + '元' / 取個(gè) 30-100 以內(nèi)的隨機(jī)數(shù)LItem.Data'Text04' := floattostr(randomrange(0, 100) / 10); LItem.Data'Text05' := '折
59、39;LItem.Data'Text06' := '中式快餐 |' + inttostr(randomrange(0, 10000) + '人已領(lǐng)' LItem.Data'Text07' := inttostr(randomrange(0, 1000) + 'm'/ 給每個(gè)圖片賦值TListItemImage(LItem.Objects.FindObject('Image01').ImageIndex := randomrange(0, 8);TListItemImage(LItem.Objects.FindObject('Image02').Bitmap := GY1Image02.Bitmap;if I mod 5 = 0 then / 模擬不同數(shù)量的星星TListItemImage(LItem.Objects.FindObject('Image02').Visible := true; if I mod 5 = 1 thenTListItemImage(LItem.Objects.FindObject('Image02').Visible := false; if I mod 5 =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子商務(wù)平臺采購合同變更及支付方式調(diào)整協(xié)議范本
- 餐飲企業(yè)租賃合同及品牌形象維護(hù)協(xié)議
- 人民幣國際化進(jìn)程中中國上市企業(yè)外匯風(fēng)險(xiǎn)暴露的實(shí)證研究與策略分析
- 人力資本視角下會計(jì)師事務(wù)所產(chǎn)權(quán)制度的創(chuàng)新與優(yōu)化研究
- 產(chǎn)業(yè)低碳化進(jìn)程中低碳政策量化研究:理論、方法與實(shí)踐
- 畢業(yè)論文成人本科
- 有關(guān)小學(xué)教育專業(yè)的論文題目
- 社會科學(xué)規(guī)劃研究項(xiàng)目
- 談?wù)剬W(xué)生進(jìn)行心理健康教育的重要性
- 課題研究計(jì)劃包括什么
- 水利工程施工組織設(shè)計(jì)模板
- 醫(yī)院感染暴發(fā)報(bào)告及處置制度及流程
- 2025經(jīng)皮穿刺脊髓電刺激治療痛性糖尿病神經(jīng)病變專家共識
- 山東省濰坊市2024-2025學(xué)年高二上學(xué)期期末考試歷史試題(原卷版+解析版)
- 模具定制合同訂單
- 中國影視產(chǎn)業(yè)發(fā)展現(xiàn)狀與前景預(yù)測
- 人工智能輔助科研數(shù)據(jù)挖掘與分析
- 高速公路隧道防水層施工方案
- 河南省鄭州市管城回族區(qū)2024-2025學(xué)年數(shù)學(xué)五年級第二學(xué)期期末聯(lián)考試題含答案
- DGJ08-102-2003 城鎮(zhèn)高壓、超高壓天然氣管道工程技術(shù)規(guī)程
- 高炮廣告牌施工方案
評論
0/150
提交評論