ListView & ScrollBar 的配合問題 |
答題得分者是:RaynorPao
|
dotdot
版主 發表:29 回覆:142 積分:64 註冊:2002-08-09 發送簡訊給我 |
我的ListView 使用 vsReport 模式 在我新增Item時他會向下跑出一個Item
但是資料超出ListView 範圍時 他右邊的ScrollBar就會跑出來 但是他不會跟著我新增的Item往下跑 而我想要達到的目的就像是我程式設定哪個Item的Selected=true時 ScrollBar就會跑去顯示那個Item 有點像是在ListBox上的做法:
ListBox1->ItemIndex=ListBox1->Items->Add("TEST")//這樣ScorllBar會跟著新增的Item跑 或是由USER直接指定 但是ListView 做得到嗎我試了好久 也找不到此應用範例
可否有相關經驗的大大指點範例
|
dotdot
版主 發表:29 回覆:142 積分:64 註冊:2002-08-09 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 天阿~解不出來捏~我只試到 新增Item時把 scrollbar保持在最下面的地方 ListView1->Perform(WM_VSCROLL , SB_BOTTOM ,0); 或是SendMessage(ListView1->Handle, WM_VSCROLL, SB_LINEDOWN, NULL); 但是如果用程式指定讓某一Item的Selected=true要讓ScrollBar自動"滑" 過去還沒想到如何解 >>< face="Verdana, Arial, Helvetica"> dotdot 你好: 試試看這樣做可不可以呢?? >>>>>>
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
dotdot
版主 發表:29 回覆:142 積分:64 註冊:2002-08-09 發送簡訊給我 |
解了解了~~跟我一樣費心找api的朋友們 不用浪費時間了
自己演算比較快 提供心得給大家 ~此做法不管你是用在
TMemo , ListBox ,ListView 只要有scrollbar的地方都
可以繁衍出很多做法跟功能~
此ListView1=vsReport以下範例為假設你選擇某Item但是scrollbar已經移到別處 按下button後就會"滑"到該選取處
void __fastcall TForm1::Button9Click(TObject *Sender)
{
int sel_index = ListView1->Selected->Index;//被選擇的Index
int scr_pos = GetScrollPos( ListView1->Handle, SB_VERT );//目前ScorllBar的pos(所在值)
int ItemMax =ListView1->Items->Count;//Item的總數
int nu;
if(ItemMax >= 16)//此16代表ListView1的高度可以容納16行
{// if(sel_index < scr_pos )//up area
{nu = scr_pos - sel_index; for(int s=1 ; s <=nu; s )
ListView1->Perform(WM_VSCROLL,SB_LINEUP ,0);
} if(sel_index > scr_pos )//down area
{nu = sel_index - (scr_pos 15); for(int s=1 ; s<=nu ; s )
ListView1->Perform(WM_VSCROLL,SB_LINEDOWN ,0);
}
} } 觀念算法很簡單 稍稍做解釋不難發現ScrollBar的pos值就是目前在ListView上面看得到的第一行的Index值所以就歸類如下條件就通了
if 被選擇的index < Pos 則被選擇的資料在可視框框上方
if 被選擇的index > Pos (可視框框的總行數)則資料在可視框框下方 相信這兩個判斷條件就夠了^^
|
dotdot
版主 發表:29 回覆:142 積分:64 註冊:2002-08-09 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 解了解了~~跟我一樣費心找api的朋友們 不用浪費時間了 自己演算比較快 提供心得給大家 ~此做法不管你是用在 TMemo , ListBox ,ListView 只要有scrollbar的地方都 可以繁衍出很多做法跟功能~ 此ListView1=vsReport以下範例為假設你選擇某Item但是scrollbar已經移到別處 按下button後就會"滑"到該選取處 void __fastcall TForm1::Button9Click(TObject *Sender) { int sel_index = ListView1->Selected->Index;//被選擇的Index int scr_pos = GetScrollPos( ListView1->Handle, SB_VERT );//目前ScorllBar的pos(所在值) int ItemMax =ListView1->Items->Count;//Item的總數 int nu; if(ItemMax >= 16)//此16代表ListView1的高度可以容納16行 {// if(sel_index < scr_pos )//up area {nu = scr_pos - sel_index; for(int s=1 ; s <=nu; s ) ListView1->Perform(WM_VSCROLL,SB_LINEUP ,0); } if(sel_index > scr_pos )//down area {nu = sel_index - (scr_pos 15); for(int s=1 ; s<=nu ; s ) ListView1->Perform(WM_VSCROLL,SB_LINEDOWN ,0); } } } 觀念算法很簡單 稍稍做解釋不難發現ScrollBar的pos值就是目前在ListView上面看得到的第一行的Index值所以就歸類如下條件就通了 if 被選擇的index < Pos 則被選擇的資料在可視框框上方 if 被選擇的index > Pos (可視框框的總行數)則資料在可視框框下方 相信這兩個判斷條件就夠了^^dotdot 你好: 也很感謝你的熱心分享喔 --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |