為何我在攔tmessage時會出現"無效的視窗控制碼?",謝謝 |
答題得分者是:Stallion
|
macchen
初階會員 發表:66 回覆:102 積分:33 註冊:2006-07-07 發送簡訊給我 |
不好意思,請問一下(已先爬過文了),我想將memo及edit都使用同一個tmessage的訊息處理,可是好像不能執行呢,如果分開設定,例如只設定memo或是edit就可以執行程式,請問我該如何修改程式才可以讓這二個元件同時使用一個訊息處理呢?謝謝各位。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Edit1: TEdit; Label1: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } procedure WindowProc(var msg: TMessage) ; public { Public declarations } end; var Form1: TForm1; OldWP: TWndMethod ; implementation {$R *.dfm} procedure TForm1.WindowProc(var msg: Tmessage) ; begin OldWP(msg) ; if msg.Msg = WM_Char then begin if msg.WParam in [48..57] then Form1.Label1.Caption := char(msg.WParam) //表示key的是數字,然後顯示出來 else msg.Msg := wm_null ; //不然其它的就不顯示,將訊息不回傳<----這邊好像無法將訊息不回傳,之前對wm_keydown做定樣的設定就不會回傳了? end ; end ; procedure TForm1.FormCreate(Sender: TObject); begin OldWP := Memo1.WindowProc ; Memo1.WindowProc := WindowProc ; OldWP := Edit1.WindowProc ; Edit1.WindowProc := WindowProc ; end; end. DELPHI初學者上
------
DELPHI初學者 |
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
在MS WINDOWS中,不是只有長的像是Form才是視窗,其他例如Button,Panel等等也都稱之為視窗,既然是視窗,也就有所謂的視窗處理程序(Windows Procedure),Windows procedure在我的認知是沒有共用的,只能Super Class與Sub Class(也就是我們在BCB或Delphi裏最常用的這種方法)!另外,常用的事件處理程序共用只不過是共用Windows procedure裡面的部分事件(event)程式碼,以上是我的認知,請大家指正與參考!
|
macchen
初階會員 發表:66 回覆:102 積分:33 註冊:2006-07-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |