利用 WM_KEYDOWN 攔截訊息時,如何改變其 Key 值? |
答題得分者是:Justmade
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
在看了 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29444 以後,
可以取得使用者按下的是什麼鍵值,
是否能像一般Keydown事件下,將key的值設為0 我原本寫成如下:
private
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN; procedure TMyEdit.WMKeyDown(var Message: TWMKeyDown);
begin
Message.CharCode := 0;
Message.KeyData := 0;
Message.Result := 0;
Message.Unused := 0;
Message.Msg := 0;
end; 但是好像沒有用,
請問是否有什麼辦法可以讓使用者所打的字被清空,
目前我使用的方法是當使用者按下的鍵不是我允許的鍵值時,
我就取得目前的字串-1個字, self.text := copy(self.text,1,length(self.text)-1); 但是自己打的字會變成第一個字,而原本的字串版而少一個字。 請問如何在
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN
程序中,將使用者輸入的key值清掉? ----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
------
---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- |
liorex
初階會員 發表:19 回覆:60 積分:32 註冊:2002-08-20 發送簡訊給我 |
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
可是在元件中的WM_KEYDOWN程序中,
沒有Key這個變數,
如果是在Key down中寫的話,
會取代原本元件的onkeydown事件。 難到沒有辦法把攔截到的訊息清掉嗎?
我的意思是把攔截到的訊息後,清掉,使得元件無法接收該鍵值? ----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
------
---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
不能打 a 字的 memo :
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMyMemo = Class(TMemo) private procedure WMChar(var Message: TWMChar); Message WM_Char; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public MyMemo : TMyMemo; { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TMyMemo } procedure TMyMemo.WMChar(var Message: TWMChar); begin if Message.CharCode = 97 then // do nothing = cancelled the message; else inherited; end; procedure TForm1.FormCreate(Sender: TObject); begin MyMemo := TMyMemo.Create(Self); MyMemo.Parent := self; end; end.發表人 - Justmade 於 2003/04/30 19:32:01 |
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
謝謝,可以了,
現在再加上一些判斷後,就可以讓元件只能輸入數字,
procedure TMyMemo.WMChar(var Message: TWMChar);
begin
if Message.CharCode = 97 then
// do nothing = cancelled the message;
else
inherited;
end; 請問 inherited 是否是指繼承至目前元件的 KeyDown 的程式?
還是有其他的意思? ----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
------
---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |