DELPHIÖеÄÏûÏ¢´¦Àí»úÖÆ
DELPHIÖеÄÏûÏ¢´¦Àí»úÖÆ
·¢ÐÅÈË: strayli (stray), ÐÅÇø: Delphi
±ê Ìâ: DELPHI ÖÐ µÄ Ïû Ï¢ ´¦ Àí »ú ÖÆ (ת)
·¢ÐÅÕ¾: BBS ˮľÇ廪վ (Sun Oct 4 18:29:01 1998)
DELPHI ÖÐ µÄ Ïû Ï¢ ´¦ Àí »ú ÖÆ
( ÄÏ ¾© Àí ¹¤ ´ó ѧ ×Ô ¿Ø ϵ ÑÐ96 Âí ÓÂ
ÓÊ ±à:210094 µç »°£º025-4315309 )
Delphi ÊÇBorland ¹« ˾ Ìá ¹© µÄ Ò» ÖÖ È« РµÄWINDOWS ±à ³Ì ¿ª ·¢ ¹¤ ¾ß. ÓÉ ÓÚ Ëü ²É Óà ÁË ¾ß ÓÐ µ¯ ÐÔ µÄ ºÍ ¿É ÖØ Óà µÄ Ãæ Ïò ¶Ô ÏóPascal(object-oriented pascal) Óï ÑÔ, ²¢ ÓÐ Ç¿ ´ó µÄ Êý ¾Ý ¿â Òý Çæ(BDE), ¿ì ËÙ µÄ ´ú Âë ±à Òë Æ÷, ͬ ʱ ÓÖ Ìá ¹©
ÁË
ÖÚ ¶à ³ö É« µÄ ¹¹ ¼þ. ÊÜ µ½ ¹ã ´ó ±à ³Ì ÈË Ô± µÄ Çà íù. ÔÚ ÖÚ ¶à µÄ ±à ³Ì Óï ÑÔ( ÈçVB,PowerBuilder,Powerpoint µÈ) ÖÐ ÍÑ Ó± ¶ø ³ö.
Æä ÖÐ Ò» ¸öDELPHI Ç¿ ÓÚ Æä Ëû ±à ³Ì Óï ÑÔ( ÈçVB4.0) µÄ µØ ·½ ¾Í ÊÇ ÔÚDELPHI ÖÐ ¿É ×Ô ¶¨ Òå Ïû Ï¢, ²¢ ¿É Ö± ½Ó ´¦ Àí Ïû Ï¢. Õâ ¶Ô ÓÚ ÄÇ Ð© Ï£ Íû ±à д ×Ô ¼º µÄ ¹¹ ¼þ(Component), »ò Õß Ï£ Íû ½Ø »ñ. ¹ý ÂË Ïû Ï¢ µÄ Óà »§ À´ ˵ ÊÇ ±Ø ²» ¿É ÉÙ µÄ. Òò Ϊ
±à д ¹¹ ¼þ Ò» °ã Òª ¶Ô Ïà Ó¦ µÄ Ïû Ï¢ ½ø ÐÐ ´¦ Àí. ÏÂ Ãæ ¾Í ¶ÔDelphi ÖÐ Ïû Ï¢ ´¦ Àí »ú ÖÆ ½ø ÐÐ Ò» Ï ½é ÉÜ¡£
Ò».DELPHI VCL ÖÐ Ïû Ï¢ µÄ ´« µÝ
Delphi ÖРÿ Ò» ¸öVCL(Visual Component Library) ¹¹ ¼þ( ÈçTbutton,Tedit µÈ) ¶¼ ÓÐ Ò» ÄÚ ÔÚ µÄ Ïû Ï¢ ´¦ Àí »ú ÖÆ£¬ Æä »ù ±¾ µã ¾Í ÊÇ ¹¹ ¼þ Àà ½Ó ÊÕ µ½ ij Щ Ïû Ï¢ ²¢ °Ñ Ëü ÃÇ ·¢ ËÍ ¸ø ÊÊ µ± µÄ ´¦ Àí ·½ ·¨, Èç ¹û û ÓÐ ÌØ ¶¨ µÄ ´¦ Àí ·½ ·¨£¬ Ôò µ÷ ÓÃ
ȱ Ê¡ µÄ Ïû Ï¢ ´¦ Àí ¾ä ±ú¡£
Æä ÖÐmainwndproc ÊÇ ¶¨ Òå ÔÚTwincontrol Àà ÖÐ µÄ Ò» ¸ö ¾² ̬ ·½ ·¨£¬ ²» ÄÜ ±» ÖØ ÔØ(Override)¡£ Ëü ²» Ö± ½Ó ´¦ Àí Ïû Ï¢£¬ ¶ø ÊÇ ½» ÓÉwndproc ·½ ·¨ ´¦ Àí£¬ ²¢ Ϊwndproc ·½ ·¨ Ìá ¹© Ò» ¸ö Òì ³£ ´¦ Àí Ä£ ¿é¡£Mainwndproc ·½ ·¨ Éù Ã÷ Èç ÏÂ:
procedure MainWndProc(var Message: TMessage);
Wndproc ÊÇ ÔÚTcontrol Àà ÖÐ ¶¨ Òå µÄ Ò» ¸ö Ðé Äâ ·½ ·¨, ÓÉ Ëü µ÷ ÓÃdispatch ·½ ·¨ À´ ½ø ÐÐ Ïû Ï¢ µÄ ·Ö Åä, wndproc ·½ ·¨ Éù Ã÷ Èç ÏÂ:
procedure WndProc(var Message: TMessage); virtual;
dispatch ·½ ·¨ ÊÇ ÔÚTobject ¸ù Àà ÖÐ ¶¨ Òå µÄ, Æä Éù Ã÷ Èç ÏÂ:
procedure Tobject.dispatch(var Message); ´« µÝ ¸ødispatch µÄ Ïû Ï¢ ²Î Êý ±Ø Ðë ÊÇ Ò» ¸ö ¼Ç ¼ Àà ÐÍ, ÇÒ Õâ ¸ö ¼Ç ¼ ÖÐ µÚ Ò» ¸ö Èë µã ±Ø Ðë ÊÇ Ò» ¸öcardinal Àà ÐÍ µÄ Óò(field), Ëü °ü º¬ ÁË Òª ·Ö Åä µÄ Ïû Ï¢ µÄ Ïû Ï¢ ºÅ Âë. Àý Èç:
type
Tmessage=record
Msg:cardinal;
wparam:word;
lparam:longint; .
result:longint;
end;
¶øDispatch ·½ ·¨ »á ¸ù ¾Ý Ïû Ï¢ ºÅ Âë µ÷ Óà ¹¹ ¼þ µÄ ×î ºó ´ú Àà ÖÐ ´¦ Àí ´Ë Ïû Ï¢ µÄ ¾ä ±ú ·½ ·¨. Èç ¹û ´Ë ¹¹ ¼þ ºÍ Ëü µÄ ׿ ÏÈ Àà ÖÐ ¶¼ û ÓÐ ¶Ô Ó¦ ´Ë Ïû Ï¢ µÄ ´¦ Àí ¾ä ±ú,Dispatch ·½ ·¨ ±ã »á µ÷ ÓÃDefaulthandler ·½ ·¨.Defaulthandler ·½ ·¨ ÊÇ ¶¨
Òå ÓÚTobject ÖÐ µÄ Ðé Äâ ·½ ·¨, Æä Éù Ã÷ Èç ÏÂ:
procedure Defaulthandler(var Message);virtual;
Tobject Àà ÖÐ µÄDefaulthandler ·½ ·¨ Ö» ÊÇ Êµ ÏÖ ¼ò µ¥ µÄ ·µ »Ø ¶ø ²» ¶Ô Ïû Ï¢ ½ø ÐÐ ÈÎ ºÎ µÄ ´¦ Àí. ÎÒ ÃÇ ¿É ÒÔ Í¨ ¹ý ¶Ô ´Ë Ðé Äâ ·½ ·¨ µÄ ÖØ ÔØ, ÔÚ ×Ó Àà ÖРʵ ÏÖ ¶Ô Ïû Ï¢ µÄ ȱ Ê¡ ´¦ Àí. ¶Ô ÓÚVCL ÖÐ µÄ ¹¹ ¼þ ¶ø ÑÔ, ÆäDefaulthandler ·½ ·¨ »á Æô
¶¯ windows API º¯ ÊýDefwindowproc ¶Ô Ïû Ï¢ ½ø ÐÐ ´¦ Àí.
¶þ.DELPHI ÖÐ µÄ Ïû Ï¢ ´¦ Àí ¾ä ±ú
ÔÚDELPHI ÖÐ Óà »§ ¿É ÒÔ ×Ô ¶¨ Òå Ïû Ï¢ ¼° Ïû Ï¢ ´¦ Àí ¾ä ±ú. Ïû Ï¢ ´¦ Àí ¾ä ±ú µÄ ¶¨ Òå ÓÐ Èç Ï ¼¸ ¸ö Ô Ôò:
1.Ïû Ï¢ ´¦ Àí ¾ä ±ú ·½ ·¨ ±Ø Ðë ÊÇ Ò» ¸ö ¹ý ³Ì, ÇÒ Ö» ÄÜ ´« µÝ Ò» ¸öTmessage ÐÍ ±ä Á¿ ²Î Êý. 2.·½ ·¨ Éù Ã÷ ºó Òª ÓÐ Ò» ¸ömessage Ãü Áî, ºó ½Ó Ò» ¸ö ÔÚ0 µ½32767 Ö® ¼ä µÄ Ïû Ï¢ ±ê ºÅ( Õû ÐÍ ³£ Êý). 3.Ïû Ï¢ ´¦ Àí ¾ä ±ú ·½ ·¨ ²» Ðè Òª ÓÃoverride Ãü Áî À´
ÏÔ Ê½ Ö¸ Ã÷ ÖØ ÔØ ׿ ÏÈ µÄ Ò» ¸ö Ïû Ï¢ ´¦ Àí ¾ä ±ú, Áí Íâ Ëü Ò» °ã Éù Ã÷ ÔÚ ¹¹ ¼þ µÄprotected »òprivate Çø. 4.ÔÚ Ïû Ï¢ ´¦ Àí ¾ä ±ú ÖÐ Ò» °ã ÏÈ ÊÇ Óà »§ ×Ô ¼º ¶Ô Ïû Ï¢ µÄ ´¦ Àí, ×î ºó ÓÃinherited Ãü Áî µ÷ ÓÃ ×æ ÏÈ Àà ÖÐ ¶Ô Ó¦ ´Ë Ïû Ï¢ µÄ ´¦ Àí ¾ä ±ú£¨
ÓРЩ Çé ¿ö Ï ¿É ÄÜ Õý Ïà ·´£©. ÓÉ ÓÚ ¿É ÄÜ ¶Ô ׿ ÏÈ Àà ÖÐ ¶Ô ´Ë Ïû Ï¢ µÄ ´¦ Àí ¾ä ±ú µÄ Ãû ×Ö ºÍ ²Î Êý Àà ÐÍ ²» Çå ³þ, ¶ø µ÷ Óà Ãü Áîinherited ¿É ÒÔ ±Ü Ãâ ´Ë Âé ·³, ͬ Ñù Èç ¹û ׿ ÏÈ Àà ÖРû ÓÐ ¶Ô Ó¦ ´Ë Ïû Ï¢ µÄ ´¦ Àí ¾ä ±ú,inherited ¾Í »á ×Ô ¶¯ µ÷
ÓÃDefaulthandler ·½ ·¨.£¨ µ± È» Èç ¹û Òª ÆÁ ±Î µô ´Ë Ïû Ï¢, ¾Í ²» ÓÃinherited Ãü Áî ÁË£©¡£
Ïû Ï¢ ´¦ Àí ¾ä ±ú ·½ ·¨ Éù Ã÷ Ϊ£º
procedure Mymsgmethod(var message:Tmessage); message Msgtype;
ͬ Ñù Óà »§ Ò² ¿É ÒÔ ¶¨ Òå ×Ô ¼º µÄ Ïû Ï¢, Óà »§ ×Ô ¶¨ Òå Ïû Ï¢ Ó¦ ´ÓWM_USER ¿ª ʼ.
×Ô ¶¨ Òå Ïû Ï¢ ¼° Ïû Ï¢ ´¦ Àí ¾ä ±ú ¾Ù Àý Èç ÏÂ:
const my_paint=Wm_user+1;
type
Tmypaint=record
msgid:cardinal;
msize:word;
mcolor:longint;
msgresult:longint;
end;
type
Tmycontrol=class(TCustomControl)
protected
procedure change(var message:Tmypaint); message my_paint;
.....
end;
......
procedure Tmycontrol.change(var message:Tmypaint);
begin
size:=message.msize; { Éè ÖÃTmybutton ³ß ´ç Êô ÐÔ}
color:=message.mcolor; { Éè ÖÃTmybutton ÑÕ É« Êô ÐÔ}
{do something else}
inherited; { ½» ÓÉTcustomcontrol ´¦ Àí}
end;
Èý. ¹ý ÂË Ïû Ï¢
¹ý ÂË Ïû Ï¢ ÓÖ ³Æ Ïû Ï¢ ÏÝ Úå¡£ ÔÚ Ò» ¶¨ Çé ¿ö Ï£¬ Óà »§ ¿É ÄÜ Ðè Òª ÆÁ ±Î ij Щ Ïû Ï¢. »ò Õß ½Ø »ñ ij Щ Ïû Ï¢ ½ø ÐÐ ´¦ Àí¡£ ÓÉ ÒÔ ÉÏ ½é ÉÜ ¿É ÒÔ ¿´ ³ö ¹ý ÂË Ïû Ï¢ Ò» °ã ÓÐ Èý ÖÖ Í¾ ¾¶£º(1). ÖØ ÔØ ¹¹ ¼þ ¼Ì ³Ð µÄ Ðé Äâ ·½ ·¨wndproc. (2). Õë ¶Ô Ä³
Ïû Ï¢ ±à д Ïû Ï¢ ´¦ Àí ¾ä ±ú. (3). ÖØ ÔØ ¹¹ ¼þ ¼Ì ³Ð µÄ Ðé Äâ ·½ ·¨Defhandler£¬ ÔÚ Æä ÖÐ ¶Ô Ïû Ï¢ ½ø ÐÐ ´¦ Àí¡£ Æä ÖÐ ³£ Óà µÄ ·½ ·¨ ÊÇ ·½ ·¨(2), ÔÚ ÉÏ ½Ú ÖÐ ÒÑ ½é ÉÜ ¹ý ÁË£¬ ·½ ·¨(1) Óë ·½ ·¨(3) Ïà ËÆ£¬ Õâ Àï Ö» ¼ò µ¥ ½é ÉÜ Ò» Ï ·½ ·¨(1)¡£
ÖØ ÔØ Ðé Äâ ·½ ·¨wndproc µÄ Ò» °ã ¹ý ³Ì Èç Ï£º
procedure Tmyobject.wndproc(var message:Tmessage);
begin
{... ÅÐ ¶Ï ´Ë Ïû Ï¢ ÊÇ ·ñ ¸Ã ´¦ Àí..}
inherited wndproc(message);
{ δ ´¦ Àí µÄ Ïû Ï¢ ½» ÓÉ ¸¸ ±²wndproc ·½ ·¨ ´¦ Àí}
end;
ÓÉ ´Ë ¿É ÒÔ ¿´ ³ö ÔÚwndproc ·½ ·¨ ÖÐ ´¦ Àí Ïû Ï¢ µÄ ÓÅ ÊÆ ÊÇ ¿É ÒÔ ¹ý ÂË Õû ¸ö ·¶ Χ ÄÚ µÄ Ïû Ï¢£¬ ¶ø ²» ±Ø Ϊ ÿ ¸ö Ïû Ï¢ Ö¸ ¶¨ Ò» ¸ö ´¦ Àí ¾ä ±ú£¬ Ê ʵ ÉÏTcontrol ¹¹ ¼þ ÖÐ ¾Í ÊÇ Àû Óà Ëü À´ ¹ý ÂË ²¢ ´¦ Àí Ëù ÓÐ µÄ Êó ±ê Ïû Ï¢ µÄ(
´ÓWM_mousefirst µ½WM_mouselast£¬ Èç Ï ´ú Âë ʾ). ͬ Ñù Àû Óà Ëü Ò² ¿É ÒÔ ×è Ö¹ ij Щ Ïû Ï¢ ±» ·¢ ËÍ ¸ø ´¦ Àí ¾ä ±ú¡£
procedure TControl.WndProc(var Message: TMessage);
begin
if (Message.Msg>=WM_MOUSEFIRST) and
(Message.Msg <= WM_MOUSELAST)
then
if Dragging then { ´¦ Àí ÍÏ Ò· ÊÂ ¼þ}
DragMouseMsg(TWMMouse(Message))
else
... { ´¦ Àí Æä Ëû Êó ±ê Ïû Ï¢}
end;
Dispatch(Message);
{ ·ñ Ôò Õý ³£ ·¢ ËÍ Ïû Ï¢}
end;
Ï Àý Ϊ Ò» ¼ò µ¥ µÄ ×Ô ¶¨ Òå ¹¹ ¼þ Àý ×Ó £º
Tmyedit Àà ÊÇ ´ÓTedit Àà ÅÉ Éú ³ö µÄ Ò» ¸ö РÀ࣬ Ëü µÄ ÌØ µã ÊÇ ÔÚ ÔË ÐÐ ÖÐ ²» ÄÜ »ñ µÃ ½¹ µã£¬ ²» ÄÜ ÓÉ ¼ü ÅÌ Êä È루 ÓÐ µã Àà ËÆTlabel ¹¹ ¼þ£©. ÎÒ ÃÇ ¿É ÔÚ Æäwndproc ·½ ·¨ ÖÐ ¹ý ÂË ³öWM_setfocus,WM_mousemove Ïû Ï¢ ²¢ ½ø ÐÐ ´¦ Àí À´ ´ï µ½ ÉÏ Êö
Òª Çó£¬ Ô´ ³Ì Ðò Èç Ï£º
unit myedit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
StdCtrls;
type
Tmyedit = class(TEdit)
private
{ Private declarations }
protected
{ Protected declarations }
{ other fields and methods}
procedure wndproc(var message:Tmessage);override;
public
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [Tmyedit]);
end;
procedure Tmyedit.wndproc(var message:tmessage);
begin
if message.msg=wm_mousemove then
begin
cursor:=crarrow;
{ Éè Öà ¹â ±ê Ϊcrarrow, ¶ø ²» ÊÇ È± Ê¡ µÄcrBeam ¹â ±ê}
exit;
end;
if message.msg=wm_SetFocus then exit;
{ÆÁ±ÎµôWM_setfocusÏûÏ¢,²»ÈÃTmyedit¿Ø¼þ»ñµÃÊäÈë½¹µã}
inherited wndproc(message);
{ÆäËûÏûÏ¢½»¸¸±²wndproc´¦Àí}
end;
end.
Äú ¿É ÒÔ ½«Tmyedit ¼Ó µ½Component Palette ÖÐ ¼ì Ñé Æä ÐÔ ÄÜ¡£
ÓÉ ÒÔ ÉÏ ½é ÉÜ ¿É ÒÔ ¿´ ³ö£¬ Ö» ÓÐ Çå ³þ ÁËDelphi VCL ÖÐ µÄ Ïû Ï¢ ´¦ Àí »ú
ÖÆ£¬ ÕÆ ÎÕ ºÃ ´¦ Àí ¸÷ ÖÖ Ïû Ï¢ µÄ ·½ ·¨ ºÍ ʱ »ú£¨ ±Ø Òª ʱ Òª ½è Öú ¸÷ ÖÖ ¹¤
¾ß£¬ Èçwinsight32,spy µÈ£©£¬ ²¢ ½á ºÏOOP Óï ÑÔ µÄ ÌØ µã£¬ ÎÒ ÃÇ ²Å ¿É ÄÜ ±à
³ö ¸ß ÖÊ Á¿ µÄ ¹¹ ¼þ¡£ Õâ µ± È» Òª ¿¿ ¶Á Õß ÔÚ Êµ ¼ù ÖÐ ²» ¶Ï Ãþ Ë÷£¬ »ý ÀÛ ¾
Ñé¡£
Posted on December 2nd, 2008 by QIANDUO
Filed under: xn--8prq9q.com | edit