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

如何設定CTRL , SHIFT鍵

答題得分者是:Justmade
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-22 13:49:26 IP:210.201.xxx.xxx 未訂閱
小弟想在程式中設定CTRL鍵用途是能累加選擇就和一般軟体中 用CTRL mouse左鍵可累加選擇一樣 SHIFT也是和一般軟体一樣能選一個區段 不知如何才能設定? aric
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-22 15:35:24 IP:61.10.xxx.xxx 未訂閱
你是在那裡要這樣用丫? 很多元件本身就支援這功能,如在 ListBox / ListView 等元件只要設定 MultiSelect := true 就可以了    若是自訂的元件,就要靠你的程式碼去判定 onMouseDown event
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssCtrl in Shift then // Ctrl is pressed
  begin
    ....
  end;
  if ssShift in Shift then // Shift is pressed
  begin
    ....
  end;
end;
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-22 15:54:12 IP:210.201.xxx.xxx 未訂閱
引言: 你是在那裡要這樣用丫? 很多元件本身就支援這功能,如在 ListBox / ListView 等元件只要設定 MultiSelect := true 就可以了 若是自訂的元件,就要靠你的程式碼去判定 onMouseDown event
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssCtrl in Shift then // Ctrl is pressed
  begin
    ....
  end;
  if ssShift in Shift then // Shift is pressed
  begin
    ....
  end;
end;
小弟是在DBGRID內用的 選了MULTISELECT後 CTRL可以用 但SHIFT沒有選一區段的作用 照前輩的作法以下用在dbgrid中 沒有作用是不是要再自寫其它的程式碼? procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if ssCtrl in Shift then// Ctrl is pressed begin end; if ssShift in Shift then // Shift is pressed begin end; end; end.
aric
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-22 17:11:32 IP:61.10.xxx.xxx 未訂閱
對 DBGrid 而言,即是自訂程式亦不易達成,因為 DBGrid.SelectedRows 變數是唯獨的,而 SelectedRows (TBookMarkList) 裡又沒入加入新 BookMark 的功能,即是說你不能直接修改這個 SelectedRows 的資料。    即使你承繼 TDBGrid 成為一個新元件再修改程式碼,理論上應可達到這個效果,但絕不簡單,這應是為甚麼 Borland 沒做這個功能罷,    參考 TCustomDBGrid 是甚樣處理 Ctrl-Click 的 :
procedure TCustomDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState;  X, Y: Integer);
begin
...
...
        if (dgMultiSelect in Options) and FDatalink.Active then
          with FBookmarks do
          begin
            FSelecting := False;
            if ssCtrl in Shift then
              CurrentRowSelected := not CurrentRowSelected
            else
            begin
              Clear;
              CurrentRowSelected := True;
            end;
          end;
...
end;
好像很容易,因為只對現在的記錄在設定。但若是 Shift,就要先移動回之前的 selected 再一筆一筆的移回現在的記錄並設定每筆為 selected ,也要考慮這樣移動使用者的 Table 不知會否帶來其他問題(如觸發 afterscroll等)。 Borland 一直沒包括這個功能可能是有他的道理的。
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-22 18:42:52 IP:210.201.xxx.xxx 未訂閱
引言: >< face="Verdana, Arial, Helvetica"> aric
系統時間:2024-11-22 23:22:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!