關于WM_COPY消息触發(20分)

  • 主题发起人 主题发起人 marry
  • 开始时间 开始时间
M

marry

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中需要触發WM_COPY消息,作一些動作,所以定義如下,可在用鼠標器<br>選擇Copy或按下Ctrl-C并不触發此消息,請問還需要作哪些動作呢?<br>procedure TForm1.WMCopy(var Message: TWMCOPY);<br>begin<br>&nbsp;inherited;<br>&nbsp; if (Message.msg=WM_COPY) then<br>&nbsp; &nbsp; &nbsp;edit1.text:='1111'<br>&nbsp; else<br>&nbsp; &nbsp; inherited;<br>end;
 
我想在這儿給回答"友類問題,Form拖動"的朋友道歉,我在6/8號當天就將分送出去了,不知怎么回事,只送出了感謝的話,沒將分送出去,我很快就送出,對不起
 
定义一个类:<br>&nbsp; TMyEdit = Class(TEdit)<br>&nbsp; private<br>&nbsp; &nbsp; procedure WMCopy(var Message: TWMCOPY); &nbsp;message WM_COPY ;<br>&nbsp; end;<br><br>窗体创建事件:<br>procedure TForm1.FormCreate(Sender: TObject);<br>var<br>&nbsp; Edit1: TMyEdit ;<br>begin<br>&nbsp; Edit1:=TMyEdit.Create(self);<br>&nbsp; Edit1.Parent:=Self;<br>&nbsp; Edit1.Left :=10 ;<br>&nbsp; Edit1.Top := 10 ;<br>end;<br><br>WM_COPY消息的处理:<br>procedure TMyEdit.WMCopy(var Message: TWMCOPY);<br>begin<br>&nbsp; inherited;<br>&nbsp; if (Message.msg=WM_COPY) then ShowMessage('1111');<br>end;<br><br>
 
系统标准的 Edit (delphi 的 TEdit TMemo)会触发的, RichEdit不行。<br><br>你的方法不对,应该对某一 edit 截获此消息。
 
你上面的代码只能截获发给form的WM_COPY消息吧? 你是要在form按^C吗?
 
可能我的問題說得不准确,我再重述,在一個EDIT3中只能輸入數字,用鍵盤操作可以<br>屏蔽掉,可用鼠標器就能粘上字符,所以我用了下述的方法可以屏蔽,選擇其他的EDIT<br>時,可以進行操作,既點鼠標右鍵就粘上字符,可此時用戶不一定要粘貼,所以想截獲WM_PASTE的消息,因而舉WM_COPY消息處理.無情的方法是對指定的TEDIT進行操作.<br>procedure TForm1.Edit3MouseDown(Sender: TObject; Button: TMouseButton;<br>&nbsp; Shift: TShiftState; X, Y: Integer);<br>var<br>&nbsp; i,code:integer;<br>begin<br>if button=mbright &nbsp;then<br>begin<br>Val(Clipboard.AsText, I, Code);<br>if code&lt;&gt;0 then<br> if (GetFocus=edit3.Handle) then<br> MessageDlg('not copy', mtWarning, [], 0);<br>end;<br>end;
 
又有一個人也問這個問題了,這下SuperMMX,cAkk有的賺啦,無情答的我認可,可這樣<br>若有不可定數量的Edit,該怎樣作呢,<br>
 
改 所有 Edit.WndProc, 自己定义一个 <br>form 里:<br>procedure MyProc(var msg: TMessage);<br><br>然后还得保存原来的函数,在 MyProc 最后调用。<br><br>用 WndProc 查一下。
 
這樣EDIT都要變成動態建立,具体到實現過程好嗎?
 
不是动态建立,是在 &nbsp;form 的 create 中给它们赋值。<br><br>错了, 是 WindowProc, 可以直接用代码改,<br>我已经写了几次了,可以查一查。
 
我用無情的方法已可以解決問題,但我也很想學習SuperMMX的方法,而且請問<br>SuperMMX,究竟怎樣才能找到你已回答的問題,我察看了你的信息,但不能看妳回答<br>的問題,麻煩將這段程序再寫一下好嗎.借鑒Delphi的關于WindowProc的幫助也不對.
 
我记得我写过一个比较完整的,但找不到了,<br>好吧,再写一个<br><br>TForm1 = class(TForm)<br>&nbsp; Edit1: TEdit;<br>public<br>&nbsp; procedure MyProc(var msg: TMessage);<br>end;<br><br>var <br>&nbsp; oldProc: TWndMethod;<br>在 &nbsp;form1 的 create 中写入:<br>&nbsp;oldProc := Edit1.WindowProc;<br>&nbsp;Edit1.WindowProc := MyProc;<br><br>procedure TForm1.MyProc(var msg: TMessage);<br>begin<br>&nbsp; if msg = WM_COPY then<br>&nbsp; begin<br>&nbsp; &nbsp; ...<br>&nbsp; end;<br>&nbsp; oldProc(msg);<br>end;<br><br>这是现写的,可能有错,大致就是这样。可以避免继承。
 
頭一次死气白賴的問問體,不過這招挺管用,非常感謝各位朋友的幫忙,SuperMMX<br>指點的方法我也測試成功.
 
怎麼這樣久啦,分還沒送出,好的,我再送一次,難道是我操作又出錯啦?<br>非常感謝大家的幫忙,我因為此分書的分發做顧好幾次啦,這次希望不要再出問題,<br>遲到的感謝!!!!
 
接受答案了.
 
后退
顶部