2013-05-02 112 views
1

我正在編寫一個應用程序,用戶將輸入不同語言的數據到TcxGrid中。爲了方便輸入不在普通鍵盤上的按鍵(á或¿),我決定添加用戶添加按鈕的功能,當按下按鈕時會直接發送一個字符到網格。發送密鑰到組件

基本上按鈕被按下,按鈕上的標題是發送到網格的字符。現在我唯一的方法是獲取活動網格單元格,在那裏複製文本,追加要添加的字符,然後將網格值設置爲新字符串。這似乎並不理想。

任何想法在乾淨的方式來做到這一點?

+0

Windows已經有這方面的設施。爲什麼重新發明輪子? – 2013-05-02 22:48:38

+1

如果用戶使用任何頻率鍵入的語言,則用戶將簡單地切換到操作系統中的該鍵盤佈局,並且「鍵」將是多餘的。如果它是用戶通常不會輸入的語言,那麼您提供的「鍵」可能也不會被使用;相反,用戶會去找到一個網站或文件與所需的文字,複製和粘貼。這是用戶實際上對您的產品要求的東西,還是您正在爲解決問題尋找解決方案? – 2013-05-02 23:11:28

+0

在操作系統中切換鍵盤佈局會很快乏味。這個想法是讓用戶能夠用英文輸入一個短語,然後將同一短語翻譯成另一種語言。對於短語來說,複製和粘貼可能會有相當大的用處,但添加外來字符的快速簡單方法似乎對我來說是個好主意。 @DavidHeffernan:你的意思是虛擬屏幕鍵盤以外的東西嗎? – Sentient 2013-05-03 18:01:30

回答

4

如果您可以獲取控件的句柄,則可以將消息發佈到指示鍵入的控件。

PostMessage(Edit1.Handle, WM_CHAR, Ord('A'), 0); 

我敢肯定有一個滑頭的方式來做到這一點,但我得到了你的人物在做這關使用「字符映射表」中:

const 
    testchar1 = 'Á'; 
    testchar2 = '¿'; 
begin 
    PostMessage(Edit1.Handle, WM_CHAR, Ord(testchar1), 0); 
    PostMessage(Edit1.Handle, WM_CHAR, Ord(testchar2), 0); 
end; 

如果你需要虛擬掃描碼,使用WM_KEYDOWN和WM_KEYUP消息。

+0

我嘗試使用grid.Handle沒有期待太多,它沒有工作。我正在尋找如何找到活動的編輯項目來使用它的句柄,但還沒有找到它。感謝PostMessage提示,似乎它會工作,如果我能得到一個句柄。 – Sentient 2013-05-02 21:47:43

+0

我找到了一種使它工作的方法。如果沒有其他解決方案出現,我會將其標記爲答案,因爲解決方案仍然看起來很花哨。我最終通過使用TcxGridBandedTableView對象的OnInitEdit事件來跟蹤最後一個編輯項目,然後使用帶有該句柄的PostMessage。 – Sentient 2013-05-02 23:02:16