时间: 2021-07-31 作者:daque
---- 越野的岁月,用过搜集蚂蚁的人确定不少,个中一项监督剪贴板变革的功效让人发觉到不少关心。正文将引见在delphi中怎样运用“关心板”,来充分本人的软硬件功效。 ---- windows运用剪贴板查看器和查看链。剪贴板查看器是一个表露剪贴板暂时实质的窗口。常常它该当起码能表露三种普遍方法的实质:笔墨cf_text、位图cf_bitmap、元文献cf_metafilepict。剪贴板查看链是一系列彼此独力的剪贴板查看窗口,它们都不妨接收暂时发送给剪贴板的实质。咱们大概依照以次办法在窗口中处置相关剪贴板的实质。 ---- 开始,运用setclipboardviewer(hwnd)因变量向剪贴板查看链中介入一个查看窗口。当剪贴板的实质爆发变革时,该窗口会接受到一个wm_drawclipboard动静。该因变量须要传播的参数是查看窗口的句柄。归来值也是一个窗口句柄典型,标识了将要介入的下一个窗口。 ---- 而后,相应wm_drawclipboard动静处置剪贴板实质的变革。 ---- 结果,在步调退出或封闭时须要挪用changeclipboardchain因变量来将本人从查看链中简略。而后挪用sendmessage因变量把那些动静传播到查看链中的下一个查看窗口。因变量changeclipboardchain原形如次: bool changeclipboardchain( hwnd hwndremove, //将要简略的窗口的句柄 hwnd hwndnewnext //查看链中下一个窗口的句柄 ); ---- delphi的clipbrd.pas单位中设置了一个类tclipboard,它封装了windows剪贴板,简化了洪量搀杂的处置进程。咱们在步调中不妨径直挪用全部因变量clipboard,该因变量用来归来tclipboard东西范例,运用这个范例对剪贴板举行剪切、复制和粘贴等操纵。底下是tclipboard东西的几个常用的本领和属性的大略引见。 ---- 本领: ---- assign:将指定的东西放入剪贴板中。 ---- open:翻开剪贴板,提防其余步调改写剪贴板。在向剪贴板介入多项数据时更加有效。 ---- close:封闭剪贴板。该当与翻开剪贴板成对运用。 ---- clear:清空剪贴板。 ---- getashandle:归来剪贴板中指定方法数据的句柄。运用前必需翻开剪贴板。 ---- getcomponent:归来剪贴板中的一个控件。delphi本人运用得多。 ---- hasformat:查问剪贴板中能否有指定方法的实质。 ---- 属性: ---- astext:用来读写剪贴板笔墨实质。 ---- formatcount:读剪贴板中数据方法的种数。 ---- formats:归来剪贴板中百般方法的列表。 ---- 其余,delphi中的很多控件中也封装了相关剪贴板处置的操纵。底下的一个处置剪贴板的大略例子,不过将剪贴板的笔墨实质表露为窗口题目。 unit unit1; interface uses windows, messages, sysutils, classes, graphics, controls, forms, dialogs, clipbrd;//介入clipbrd单位 type tform1 = class(tform) procedure formcreate(sender: tobject); procedure formclose(sender: tobject; var action: tcloseaction); private { private declarations } public nextcliphwnd:hwnd;//查看链中下一个窗口句柄 procedure wmdrawclipboard (var amessage:tmessage); message wm_drawclipboard; //处置wm_drawclipboard动静进程 end; var form1: tform1; implementation {$r *.dfm} { tform1 } procedure tform1.wmdrawclip board(var amessage: tmessage); begin //将wm_drawclipboard 动静传播到下一个查看链中的窗口 sendmessage(nextcliphwnd,amessage. msg,amessage.wparam,amessage.lparam); //查问剪贴板中一定方法的数据实质 if (clipboard.hasformat(cf_text) or clipboard.hasformat(cf_oemtext)) then begin //处置剪贴板中实质 caption:=clipboard.astext; end; end; procedure tform1.formcreate(sender: tobject); begin //赢得查看链中下一个窗口句柄 nextcliphwnd:=setclipboardviewer(handle); end; procedure tform1.formclose (sender: tobject; var action: tcloseaction); begin //从查看链中简略本查看窗口 changeclipboardchain(handle,nextcliphwnd); //将wm_drawclipboard 动静传播到下一个查看链中的窗口 sendmessage(nextcliphwnd,wm_ changecbchain,handle,nextcliphwnd); end; end. ---- 须要提防的是,在处置剪贴板实质变革的动静wm_drawclipboard的进程和封闭窗口事变中运用因变量sendmessage把wm_drawclipboard或wm_changecbchain动静传播到查看链中的下一个窗口是需要的,要不有大概其余窗口不许赢得一致动静。其余,在运用搜集蚂蚁时笔者已经碰到不许树立剪贴板方法的情景,在此指示读者群提防查看registerclipboardformat等因变量的归来值。