¡@¡@¨Ï¥ÎRADÃþ«¬¤u¨ãªº¤H¶V¨Ó¶V¦h¤F¡AÁöµM§Ú¹ï©óRADÃþªº¤u¨ã¦V¨Ó¤£¦h§@µûij¡A¦ý§ÚÁÙ¬O±`±`¨Ï¥Îªº¡C©Ò¥H§Ú²`²`ªºª¾¹D³oÃþ¤u¨ãÁöµMµ¹§Ú̱a¨Ó¤F«K§Q¡A¨Ï§Ú̯ण¥Î±N§ó¦hªººë¤O©ñ¦b¤¶±¤W¡A¦ý¦P®É¤]±Nªì¾ÇªÌºòºòªº°é¦b¤F¥L©Ò´£¨Ñªº±±¨î¶µ©M¤¸¥ó¤¤¡C©Ò¥H«Ü¦h¤H¨Ã¤£¯à¯u¥¿ªºÁA¸Ñwindowsªº®ø®§ÅX°Êì²z¥H¤Îwindowsªº¹B§@¹Lµ{¡C¥»¤å¤¤§ÚÌ´N¤@°_¨Ó¾Ç²ß¤@¤Uwindowsªº¹B§@¹Lµ{¡A¨Ï§Ú̹ïdelphi³o¼Ë¤@ÓÀu¨qªº½sµ{¤u¨ã¦³¤@Ó·sªº»{ÃÑ¡A¨Ã¹ïwindows¤Uªºµ{¦¡½s¼g¦³§ó²`¨è¡B³zÅPªºÁA¸Ñ©M»{ÃÑ¡C
¡@¡@¤@¡B®ø®§ªº©w¸q
¡@¡@§ÚÌ¥ý±q¨Ï¥Îªº¨¤«×¬Ý¬Ýwindowsªº¹B§@¹Lµ{¡C§Ú̳£ª¾¹Dwindows¬O¤@Ó¦h¤uªº¥»O¡A¨Ï¥Î³oÓ¥»O¡A§ÚÌ¥i¥H¤@Ãä¤u§@¡A¤@ÃäÅ¥ºq¦±¡Aµ¥µ¥¡C©Ò¥H¹ï©ó³oÓ¾Þ§@¥»O¥i¥H·Q¹³¨ì¥¦°£¤F¤@¯ë§@·~¨t²Î©Ò´£¨Ñªº¹ïÀɨt²Î¡A°O¾ÐÅé¨t²Îµ¥ªººÞ²z¤§¥~¡A§ó«nªº´N¬O§Ú̩Ҽôª¾ªº®ø®§ÅX°Ê¤F¡A¤]´N¬O»¡¡An³q¹L¤@©wªº¤èªk©Mµ²ºc¥i¥Hµ¹¨C¤@Ó¹B¦æ¤¤ªºµ{¦¡¹ê¨Ò¥H¤Î¨ä¤¤ªº¨C¤@Óµøµ¡¶Ç»¼¨ä¤¤©ÒIJµoªº¨Æ¥ó¡C Windows¤¤¨s³º¬O«ç¼Ë°µ¨ìªº©O¡HÅý§ÚÌ¥´¶}¦w¸Ëdelphiªº¥Ø¿ý¡A¦b¨ä¤¤ªºsource\rtl\Win\Windows.pasÀÉ¡]©ÎªÌ¦b¤@Ó¤uµ{ÀÉ¡A§ä¨ìuses¡A¦b¨ä¤¤§ä¨ì¢åindows¡AµM«á«ö¤UCtrlÁä¡A¥Î·Æ¹«ÂIÀ»³æµü¡^¡A¦b¨ä¤¤ªº²Ä18919¦æ¡A§ÚÌ¥i¥H¬Ý¨ì³o¼Ë¤@Óµ²ºcªº©w¸q¡G
{ Message structure }
PMsg = ^TMsg ;
tagMSG = packed record
hwnd : HWND ;
message : UINT ;
wParam : WPARAM ;
lParam : LPARAM ;
time : DWORD ;
pt : TPoint ;
end ;
{ $ EXTERNALSYM tagMSG }
TMsg = tagMSG ;
MSG = tagMSG ;
{ $ EXTERNALSYM MSG }
¡@¡@¨ä¤¤hwndÄæ¦ìªí¥ÜIJµo¤F®ø®§ªºµøµ¡ªºID¡A¥Ñ¦¹¥i¥H«OÃÒ®ø®§¥¿½Tªºµo°e¨ì¨C¤@Óµøµ¡¥h¡C Message ªí¥Ü®ø®§ªºÃþ«¬¡A¨ä¤¤§ó²Ó½oªº¸ÑÄÀn³q¹LwParam©MlParam¤@°_¨Ó¶i¦æ¡A¤£¦Pªº®ø®§¡AwParam©MlParamªºÈ¤]´N¤£¬Û¦P¡Ctime¥Î¨Ó°O¿ý®ø®§Ä²µoªº®É¶¡¡CPt«hªí¥ÜIJµoªº¦ì¸m¡]²¦³ºwindow¤¤¦³¤F·Æ¹«¡^¡C§Ṳ́]¥i¥H¥Î¦P¼Ëªº¤èªk¥´¶}MessagesÀÉ¡C¨ä¤¤©w¸q¤Fwindows¤¤ªºµ´¤j³¡¤À®ø®§©Mµ²ºc¡C¤U±¬O§Ú̺I¨úªº¨ä¤¤¤@³¡¤À¡C
const
¡@{ $ EXTERNALSYM WM_NULL }
¡@¡@WM_NULL = $0000 ;
¡@{ $ EXTERNALSYM WM_CREATE }
¡@¡@WM_CREATE = $0001 ;
¡@{ $ EXTERNALSYM WM_DESTROY }
¡@¡@WM_DESTROY = $0002 ;
¡@{ $ EXTERNALSYM WM_MOVE }
¡@¡@WM_MOVE = $0003 ;
¡@{ $ EXTERNALSYM WM_SIZE }
¡@¡@WM_SIZE = $0005 ;
¡@¡@¡K¡K ¡K¡K
¡@¡@WM_APP = $8000 ;
¡@{ NOTE : All Message Numbers below 0x0400 are RESERVED }
¡@{ Private Window Messages Start Here }
¡@{ $ EXTERNALSYM WM_USER }
¡@¡@WM_USER = $0400 ;
¡@¡@¡K¡K ¡K¡K¡@
¡@{ Dialog messages }
¡@{ $ EXTERNALSYM DM_GETDEFID }
¡@¡@DM_GETDEFID = ( WM_USER+0 ) ;
¡@{ $ EXTERNALSYM DM_SETDEFID }
¡@¡@DM_SETDEFID = ( WM_USER+1 ) ;
¡@{ $ EXTERNALSYM DM_REPOSITION }
¡@¡@DM_REPOSITION = ( WM_USER+2 ) ;
¡@{ $ EXTERNALSYM PSM_PAGEINFO }
¡@¡@PSM_PAGEINFO = ( WM_USER+100 ) ;
¡@{ $ EXTERNALSYM PSM_SHEETINFO }
¡@¡@PSM_SHEETINFO = ( WM_USER+101 ) ;
¡@{ Button Notification Codes }
¡@¡@¡K¡K ¡K¡K
¡@¡@¥i¥H¬Ý¨ì¡Awindows¤¤¨C¤@Ó®ø®§³£¹ïÀ³µÛ¤@Ӱߤ@ªº¼ÆÈ¡C·íµM§Ṳ́]¥i¥H©w¸q¦Û¤vªº®ø®§¡A¥¦ªº¼ÆÈ¥un©w¸q¦bWM_USER¤§«á¡A«OÃÒ©M¨ä¤¤ªº©w¸q¤£·Q«½Æ§Y¥i¡C
¡@¡@¤G¡B®ø®§ªº±µ¦¬
¡@¡@®ø®§¨ì¬O¦³¤F¡A¦ý«ç¼Ë¤~¯àÅýµ{¦¡¥H¤Îµøµ¡±µ¦¬¨ì©O¡HÁÙ¬O±q¨Ï¥Îªº¨¤«×¦Ò¼{¡A¥i¥H·Q¹³¨ì¡A¹ï©ó¤@Óµ{¦¡©Îµøµ¡¥i¥H±µ¦¬¨ì¨Ó¦Û·Æ¹«¡BÁä½Lµ¥¿é¤J³]³Æªº®ø®§¡A¤]¥i¥H±µ¦¬¨ì¨Ó¦Ûµ{¦¡¶Ç»¼ªº®ø®§¡A¦]¬°¦³¤F«e±ªºtagMSGµ²ºc¡A§ÚÌ´N¥i¥H³Q°Êªº¦bµ{¦¡¤¤±µ¦¬®ø®§¤F¡C³oÓ¥\¯àªº¹ê²{´N¬O¥Ñ¤U±ªºµ{¦¡¹ê²{ªº¡]¦P¼Ëªº³o¬qµ{¦¡¨Ó¦Û©ódelphiªº¤¸¥N½X¡^¡G
function Tapplication . ProcessMessage ( var Msg : TMsg ) : Boolean;
var
¡@Handled : Boolean ;
begin
¡@Result : = False ;
¡@if PeekMessage ( Msg , 0 , 0 , 0 , PM_REMOVE ) then
¡@begin
¡@¡@Result : = True ;
¡@¡@if Msg.Message <> WM_QUIT then
¡@¡@begin
¡@¡@¡@Handled := False ;
¡@¡@¡@if Assigned ( FonMessage ) then FonMessage ( Msg , Handled ) ;
¡@¡@¡@if not IsHintMsg ( Msg ) and not Handled and not IsMDIMsg ( Msg ) and
¡@¡@¡@not IsKeyMsg ( Msg ) and not IsDlgMsg ( Msg ) then
¡@¡@¡@begin
¡@¡@¡@¡@TranslateMessage ( Msg ) ;
¡@¡@¡@¡@DispatchMessage ( Msg ) ;
¡@¡@¡@end ;
¡@¡@end ;
¡@else
¡@¡@FTerminate : = True ;
¡@end ;
end ;
¡@¡@¨ä¤¤¥Dnªº¬O³o´X¥y¡G
if PeekMessage ( Msg , 0 , 0 , 0 , PM_REMOVE ) then
begin
¡@TranslateMessage ( Msg ) ;
¡@DispatchMessage ( Msg ) ;
end ;
¡@¡@¦ý§ó±`¨£ªº¬O¡G
while GetMessage ( Msg , 0 , 0 , 0 ) do
begin
¡@TranslateMessage ( Msg ) ;
¡@DispatchMessage ( Msg ) ;
End ;
¡@¡@PeekMessage©MGetMessage³£¬O±q®ø®§¦î¦C¤¤±o¨ìµoµ¹µ{¦¡ªº®ø®§¡A¥un¦³®ø®§¡A´N³q¹LTranslateMessage ( Msg )©MDispatchMessage ( Msg )¨â¥y±N®ø®§Â½Ä¶¬°¥i³B²zªº®æ¦¡¨Ã¤À¬£µ¹À³¥Îµ{¦¡©Òµù¥Uªº¦^½Õ¨ç¼Æ¶i¦æ³B²z¡C