全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2006
推到 Plurk!
推到 Facebook!

為何我在攔tmessage時會出現"無效的視窗控制碼?",謝謝

答題得分者是:Stallion
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-17 13:22:06 IP:211.75.xxx.xxx 訂閱
不好意思,請問一下(已先爬過文了),我想將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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-18 19:09:12 IP:219.133.xxx.xxx 訂閱
Create事件中OldWP最後存放的是Edit1的消息處理過程,Memo1根本沒法處理消息!
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-18 23:19:17 IP:211.22.xxx.xxx 未訂閱
在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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-19 09:00:35 IP:211.75.xxx.xxx 訂閱
謝謝二位的回答,我已經知道該如何做了,因為Stallion回答的觀念讓我比較了解window訊息處理的方式,所以我將此分數給他,在此跟h@visli說聲抱歉,但也謝謝你的回答。











delphi初學者
------
DELPHI初學者
系統時間:2024-04-27 8:02:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!