About The Site

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus a erat. Nulla quis felis quis libero ultricies vestibulum. Etiam eros elit, porttitor vel, imperdiet venenatis, tristique vel, lacus. Nunc eros lacus, condimentum ut, suscipit id, elementum ut, eros. Sed lorem. Proin aliquet suscipit sapien. Cras sit amet nulla. Aenean vitae metus. Suspendisse elementum varius mi. Duis malesuada, turpis ut luctus faucibus, justo leo tristique.

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 Óï ÑÔ µÄ ÌØ µã£¬ ÎÒ ÃÇ ²Å ¿É ÄÜ ±à
³ö ¸ß ÖÊ Á¿ µÄ ¹¹ ¼þ¡£ Õâ µ± È» Òª ¿¿ ¶Á Õß ÔÚ Êµ ¼ù ÖÐ ²» ¶Ï Ãþ Ë÷£¬ »ý ÀÛ ¾­
Ñé¡£