請問如何讓TStringGrid對Tab鍵有反應? |
尚未結案
|
NO.5
初階會員 發表:18 回覆:35 積分:25 註冊:2005-02-23 發送簡訊給我 |
|
JustinShen
中階會員 發表:22 回覆:104 積分:80 註冊:2003-09-20 發送簡訊給我 |
由于Tab建默认用于切换控件焦点,所以Tab键已经在窗体消息循环中处理掉,因此控件的OnKeyPress不能捕捉Tab。
为了在TStringGrid中实现用Tab来切换单元格,一般都是用一个TEdit来作为Inplace Editor,用以接收TStringGrid单元格中的数据、编辑修改数据再传回数据到TStringGrid。在TEdit失去焦点时设定TStringGrid获得焦点,移动当前单元格即可。
实现的原理当然还是消息处理了,下面时部分源代码。
//这段代码使InplaceEditor生效 procedure TfrmMain.StringGrid1SelectCell(Sender: TObject; Col, Row: Integer; var CanSelect: Boolean); var R: TRect; begin if ((Col = 1) and (Row <> 0)) then begin {Size and position the combo box to fit the cell} R := StringGrid1.CellRect(Col, Row); R.Left := R.Left StringGrid1.Left; R.Right := R.Right StringGrid1.Left; R.Top := R.Top StringGrid1.Top; R.Bottom := R.Bottom StringGrid1.Top; {Show the combobox} with cbInplaceComboBox do begin Left := R.Left 1; Top := R.Top 1; Width := (R.Right 1) - R.Left; Height := (R.Bottom 1) - R.Top; ItemIndex := Items.IndexOf(StringGrid1.Cells[Col, Row]); Visible := True; SetFocus; end; end; CanSelect := True; end; //这段代码获取用户键入消息 //procedure CMDialogKey(var msg: TCMDialogKey); message CM_DIALOGKEY; procedure TfrmMain.CMDialogKey(var msg: TCMDialogKey); begin if (ActiveControl = cbInplaceComboBox) then begin if (msg.CharCode = VK_TAB) then begin //set focus back to the grid and pass the tab key to it cbInplaceComboBox.SetFocus; cbInplaceComboBox.Perform(WM_KEYDOWN, msg.CharCode, msg.KeyData); // swallow this message msg.result := 1; Exit; end; end; inherited; end;Justin Shen ================================= 如果能帮到您,我会很开心;如果能得到您的帮助,是我的荣幸 =================================
------
==================== 我为一切作努力! Justin Shen |
NO.5
初階會員 發表:18 回覆:35 積分:25 註冊:2005-02-23 發送簡訊給我 |
|
JustinShen
中階會員 發表:22 回覆:104 積分:80 註冊:2003-09-20 發送簡訊給我 |
引言: 感謝您能撥空解答弟的問題,您的寫法弟尚需消化驗證. 在等待有心人援助的期間,弟找到了一個元件"IMPGRID1",是個可以藉由按下"Tab"而移動欄位的TStringGrid元件,同樣的是"只能前進,不能回頭".如果需要回头只要再inplace editor处理tab时判断grid的当前col,row就可以作相应的处理。 Justin Shen ============================================= 如果能帮到您,我会很开心;如果能得到您的帮助,是我的荣幸 =============================================
------
==================== 我为一切作努力! Justin Shen |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |