ComboBox的下拉選單的起始位置 |
缺席
|
shininggod
一般會員 發表:16 回覆:20 積分:17 註冊:2009-05-13 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
shininggod
一般會員 發表:16 回覆:20 積分:17 註冊:2009-05-13 發送簡訊給我 |
的確形容的跟....一樣orz,而且是dbcombobox,不是標準的combobox orz...
dbcombobox右邊有一個向下的三角形,按下去會跳出一個listbox 如何控制這個listbox的預帶位置 點下去,他會從第一筆開始列 1.我想要他反白的直接選到中間那一筆(ex:第11筆),可是又不會改到他dbcombobox.text原本的資料 就跟滑鼠點下去自己拉那個scrollbar一樣 如果改dbcombobox.itemindex := 11, 他會掉到第11筆,可是dbcombobox.text也會變成第11筆的資料 2.更進一步,把第11筆擺在listbox的中間 例如dropdowncount 是7的話,點下去直接帶成這樣(右邊有scrollbar) -3 -2 -1 0 <-這一行擺在listbox中間 反藍 1 2 3 我試過用postmessage在onDropDown模擬鍵盤的3上3下,實際用鍵盤按有效,他會往回三筆,反藍的又會再進到我想要的那一筆 可是在程式裡面寫就無效...往上3個ok,往下3個確會把整個往下scroll, 不是只把反藍的scroll,變成0還是在list的最上面 [code delphi] procedure Tform1.TDBComboBox1DropDown(Sender: TObject); begin if (DBComboBox1.Text = '') then begin TDBComboBox1.ItemIndex := TDBComboBox1.Items.IndexOf('0'); //這是第11筆,不過會把原本的值改掉,所以只做空白... //3上3下,不過失敗 PostMessage(TDBComboBox1.Handle, WM_KEYDOWN, VK_UP, 0); PostMessage(TDBComboBox1.Handle, WM_KEYDOWN, VK_UP, 0); PostMessage(TDBComboBox1.Handle, WM_KEYDOWN, VK_UP, 0); PostMessage(TDBComboBox1.Handle, WM_KEYDOWN, VK_DOWN, 0); PostMessage(TDBComboBox1.Handle, WM_KEYDOWN, VK_DOWN, 0); PostMessage(TDBComboBox1.Handle, WM_KEYDOWN, VK_DOWN, 0); end; end; [/code] 能不能取得那個listbox的屬性,能的話就很好調了Orz
編輯記錄
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
你這個理論就好像是我要開車, 但不能用輪子一樣的予盾, 為什麼呢?
dbcombobox 本身就已與 datasoruce 連接在一起連動了(除非你不指定datasource),移動了index, bcombobox就會動記錄指標, 你想做到所要的功能, 請你改為 combobox 很容易就可以達成 否則, 不論你用什麼方式來指定, 一定都會與datasource 同步, 除非有我不知道的隱藏版功能存在, 或者採用其他第三方控件的元件來做 ===================引 用 shininggod 文 章=================== 例如這個combobox.items有 -10 -9 -8 ... 0 ... 8 9 10 21個item,在使用者點個三角形的時候如何去改他下拉的起始位置,讓他可以從0開始選 可是又不動到原來的值(就跟滑鼠區拉那個scrollbar一樣) 如果改 itemindex, 連 .text 都會一起改 現在是想要從下拉的中間開始列,讓使用者自己去拉,因為常選的都是接近0那幾個 但是點下去之前又不能改到原來的值..
編輯記錄
P.D. 重新編輯於 2011-09-28 08:38:14, 註解 無‧
|
shininggod
一般會員 發表:16 回覆:20 積分:17 註冊:2009-05-13 發送簡訊給我 |
如果按下三角形,然後只用滑鼠拉那個scroll並不會動到TDBcombobox.Field.AsString
只是沒辦法直接對那個dropdown box做直接位置控制 這是我想要的結果,當然元件我絕對寫不出來...(核爆) 我當初的想法是用.handle去模擬鍵盤的上下,移到我要的位置就好 菜鳥一個,沒能力去改元件,只有想想偷懶(?)的辦法 PostMessage 不行, SendMessage也不行,keyboard event 竟然可以...orz 單純只移動,不會動到Field.AsString [code delphi] keybd_event(VK_UP,0,0,0); keybd_event(VK_UP,0,KEYEVENTF_KEYUP,0); keybd_event(VK_Down,0,0,0); keybd_event(VK_Down,0,KEYEVENTF_KEYUP,0); [/code] onDropDown的時候會強制移動到現在的Field.AsString, 如果要移到0,要算距離中間值差多少index,好麻煩XD 如果值不存在於items裡面,又會從第一筆列 算差幾個是很簡單,但是下拉開的慢又有人會問...Orz ===================引 用 P.D. 文 章=================== 你這個理論就好像是我要開車, 但不能用輪子一樣的予盾, 為什麼呢? dbcombobox 本身就已與 datasoruce 連接在一起連動了(除非你不指定datasource),移動了index, bcombobox就會動記錄指標, 你想做到所要的功能, 請你改為 combobox 很容易就可以達成 否則, 不論你用什麼方式來指定, 一定都會與datasource 同步, 除非有我不知道的隱藏版功能存在, 或者採用其他第三方控件的元件來做 ===================引 用 shininggod 文 章=================== 例如這個combobox.items有 -10 -9 -8 ... 0 ... 8 9 10 21個item,在使用者點個三角形的時候如何去改他下拉的起始位置,讓他可以從0開始選 可是又不動到原來的值(就跟滑鼠區拉那個scrollbar一樣) 如果改 itemindex, 連 .text 都會一起改 現在是想要從下拉的中間開始列,讓使用者自己去拉,因為常選的都是接近0那幾個 但是點下去之前又不能改到原來的值.. |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
看到你用key_event,用滑鼠會不會比較簡單
雖然是ComboBox1自己改一下應該不難吧~ [code cpp] void __fastcall TForm1::ComboBox1DropDown(TObject *Sender) { TPoint pt = ComboBox1->ClientToScreen(TPoint(0,0)); pt.x = ComboBox1->Width/2; pt.y = ComboBox1->Height ComboBox1->ItemHeight*(ComboBox1->DropDownCount/2 0.5); SetCursorPos(pt.x,pt.y); } [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |