線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1275
推到 Plurk!
推到 Facebook!

如何讓 ListView 將想要顯示的列自動捲至可視範圍

尚未結案
yserics
一般會員


發表:10
回覆:9
積分:3
註冊:2003-08-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-19 01:23:37 IP:61.62.xxx.xxx 未訂閱
請問各位大大:    ListView 有個 method 為 GetSearchString,它可像一般電子字典搜尋功能,在此 ListView 取得 focus 的同時,一面輸入英文單字,就可自動捲至最相近的英文字上。    如果我要另外使用 Edit + Button 的方式,當使用者在 Edit 中輸入單字,就可動態將 ListView 的 focus 移至最相近的單字上的話,或者是輸入完畢、再按 button 後,一次將 focus 移至此最相近的單字,該如何做呢?    我使用以下兩行 code:    
 
ListView1->Selected = ListView1->Items->Item[i];
ListView1->ItemFocused = ListView1->Items->Item[i];
但試起來只能讓此 item 反白,卻無法將此 item 移至可視區… 謝謝…
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-19 09:27:31 IP:203.73.xxx.xxx 未訂閱
引言: 請問各位大大: ListView 有個 method 為 GetSearchString,它可像一般電子字典搜尋功能,在此 ListView 取得 focus 的同時,一面輸入英文單字,就可自動捲至最相近的英文字上。 如果我要另外使用 Edit Button 的方式,當使用者在 Edit 中輸入單字,就可動態將 ListView 的 focus 移至最相近的單字上的話,或者是輸入完畢、再按 button 後,一次將 focus 移至此最相近的單字,該如何做呢? 我使用以下兩行 code:
 
ListView1->Selected = ListView1->Items->Item[i];
ListView1->ItemFocused = ListView1->Items->Item[i];
但試起來只能讓此 item 反白,卻無法將此 item 移至可視區… 謝謝…
yserics 你好: 請參考以下的做法 < class="code"> (1)試試看用 ListView1->FindCaption(...); (2)試試看用 ListView1->Items->Item[i]->MakeVisible(true); ListView1->Items->Item[i]->Selected=true; ListView1->Items->Item[i]->Focused=true; ListView1->Items->Item[i]->MakeVisible(true); -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/11/19 09:51:45
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
yserics
一般會員


發表:10
回覆:9
積分:3
註冊:2003-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-19 22:59:18 IP:61.62.xxx.xxx 未訂閱
謝謝RaynorPao 我試了
 
   ListView1->Items->Item[i]->Selected=true;
   ListView1->Items->Item[i]->Focused=true;
   ListView1->Items->Item[i]->MakeVisible(true);
可以達到我的功能,真是謝謝! 但以此種方式的話,會新產生一個問題:當我將 ListView1 的內容清除時
   ListView1->Items->Clear();
它的清除速度會非常的慢(如果ListView中有2000行資料的話,約20秒)…我會知道是由於加了上述三行程式才造成這個結果的原因,是因為我暫時將含有 "MakeVisible" 這行mark起來的話,則刪除速度就非常快(瞬間,不到一秒)… 能再幫我看看嗎?謝囉…
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-19 23:14:39 IP:61.221.xxx.xxx 未訂閱
引言: 謝謝RaynorPao 我試了
 
   ListView1->Items->Item[i]->Selected=true;
   ListView1->Items->Item[i]->Focused=true;
   ListView1->Items->Item[i]->MakeVisible(true);
可以達到我的功能,真是謝謝! 但以此種方式的話,會新產生一個問題:當我將 ListView1 的內容清除時
   ListView1->Items->Clear();
它的清除速度會非常的慢(如果ListView中有2000行資料的話,約20秒)…我會知道是由於加了上述三行程式才造成這個結果的原因,是因為我暫時將含有 "MakeVisible" 這行mark起來的話,則刪除速度就非常快(瞬間,不到一秒)… 能再幫我看看嗎?謝囉…
yserics 你好: 小弟我想~~應該是你程式流程的問題,如果你要一次清除很多 Item 的話,那就 應該先把你要清除的 Item 一次清完,最後~~才設那三個屬性在新的 Item 上面 ,這樣應該就不會有你所說的問題了 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
yserics
一般會員


發表:10
回覆:9
積分:3
註冊:2003-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-19 23:36:57 IP:61.62.xxx.xxx 未訂閱
引言: yserics 你好: 小弟我想~~應該是你程式流程的問題,如果你要一次清除很多 Item 的話,那就 應該先把你要清除的 Item 一次清完,最後~~才設那三個屬性在新的 Item 上面 ,這樣應該就不會有你所說的問題了 -- >< face="Verdana, Arial, Helvetica"> RaynorPao兄: 謝謝你的建議。 這樣子說好了,我現在有幾個版本的字典,當使用者選擇某一版本時,會將此版本的所有英文字列在 ListView 中並加以排序。此時使用者可以在 Edit 中輸入想要查詢的英文字,而 ListView 會即時顯示最接近此單字的英文字…這時候使用 MakeVisible 來讓 ListView 將此最接近的單字置於可視區… 接著,如果使用者選擇另一版本的字典時,我先將 ListView 的內容清除,再引入另一版本的所有英文字…就是此時的 "清除" 動作會變得很緩慢…所以也就無法避免您所謂的 "流程" 的問題了… 或是您在流程上有其它的建議? 謝謝……
yserics
一般會員


發表:10
回覆:9
積分:3
註冊:2003-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-20 02:43:08 IP:61.62.xxx.xxx 未訂閱
引言: RaynorPao兄: 謝謝你的建議。 這樣子說好了,我現在有幾個版本的字典,當使用者選擇某一版本時,會將此版本的所有英文字列在 ListView 中並加以排序。此時使用者可以在 Edit 中輸入想要查詢的英文字,而 ListView 會即時顯示最接近此單字的英文字…這時候使用 MakeVisible 來讓 ListView 將此最接近的單字置於可視區… 接著,如果使用者選擇另一版本的字典時,我先將 ListView 的內容清除,再引入另一版本的所有英文字…就是此時的 "清除" 動作會變得很緩慢…所以也就無法避免您所謂的 "流程" 的問題了… 或是您在流程上有其它的建議? 謝謝……
"清除" 動作會變得緩慢的原因,是因為它每刪除一個item的時候,就會將有設定 MakeVisible 的那一個item讓它出現在可視區… 所以我用了一個取巧非正規的方法,就是先將第一個 item 設成 MakeVisible ,接著將其餘的 item 刪掉,最後再將第一個刪掉…
系統時間:2024-05-15 16:11:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!