闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻閻愮儤鍋嬮柣妯荤湽閳ь兛绶氬鎾閻樻爠鍥ㄧ厱閻忕偛澧介悡顖氼熆鐟欏嫭绀€闁宠鍨块、娆戠磼閹惧墎绐楅梻浣告啞椤棝宕橀敐鍡欌偓娲倵楠炲灝鍔氭繛鑼█瀹曟垿骞橀懜闈涙瀭闂佸憡娲﹂崜娑⑺囬鐔虹瘈闁冲皝鍋撻柛鏇炵仛閻や礁螖閻橀潧浠滄俊顐g箓椤曪綁顢氶埀顒€鐣烽悡搴唵妞ゅ繋鐒﹀▍濠囨煙椤旂瓔娈滈柡浣瑰姈閹柨鈹戦崼婵嗘瘓闂佽娴烽幊鎾诲箟閿涘嫭宕查柛鏇ㄥ幗椤洟鏌熼悜妯诲鞍缂傚秴娲弻鏇熺箾閸喖濮㈤梺鑽ゅ枂閸斿矂鈥旈崘顔嘉ч幖绮光偓鑼嚬缂傚倷绶¢崰妤呭箰閹间焦鍋╅柣鎴f绾偓闂佺粯鍔曠粔鍫曞窗閺嶎厼绠栨繛鍡樻尭缁狅絾绻濋棃娑欐悙妞わ腹鏅犲娲箮閼恒儲鏆犻梺鎼炲妼濠€鍗炍i幇鏉跨閻庢稒锚椤庢挻绻濆▓鍨灍闁糕晛鐗婄粋宥呪攽鐎n亞鐤勯梺闈浥堥弲娑㈡倷婵犲洦鐓忓┑鐐茬仢閳ь剚顨堢划璇差潩椤掑瀵岄梺闈涚墕濡稒鏅堕鍕厽闁哄啯鍨垫晶鎾煟閹垮啫澧存い銏☆殜瀹曟帒螖閳ь剚绂嶆ィ鍐╁仭婵炲棗绻愰顏嗙棯閻愵剚鍊愰柡灞剧⊕閹棃鏁愰崱妯荤槗闁诲孩顔栭崳顕€宕戞繝鍥╁祦婵☆垵鍋愮壕鍏间繆椤栨粎甯涙い蹇曞枛濮婄粯鎷呴懞銉с€婇梺闈╃秶缁犳捇鐛箛娑欐櫢闁跨噦鎷�濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻橀弻锝夊箣閿濆棭妫勯梺鍝勵儎缁舵岸寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ゆい顓犲厴瀵鏁愭径濠勭杸濡炪倖甯婇悞锕傚磿閹惧墎纾藉ù锝呮惈灏忛梺鍛婎殕婵炲﹤顕f繝姘亜闁稿繐鐨烽幏濠氭煟鎼淬劍娑у鐟帮工鍗辨い鏂垮⒔绾捐棄霉閿濆懏鎯堥崯鎼佹⒑閸濄儱校闁绘濮撮锝嗙節濮橆儵鈺呮煃閸濆嫬鈧憡绂嶅⿰鍫熲拺闁告稑锕︾粻鎾绘倵濮橆剚鍤囧┑顔瑰亾闂侀潧鐗嗗Λ娑㈠储闁秵鈷戦梻鍫熻儐瑜版帒纾块梺顒€绉撮悞鍨亜閹哄棗浜惧┑鐘亾闂侇剙绉寸粻鏌ユ煏韫囨洖袥婵℃彃鐗撻弻鏇$疀閺囩倫銏ゆ煠閺夎法浠㈤柍瑙勫灴閸┿儵宕卞Δ鍐ф樊婵$偑鍊栧▔锕傚炊椤垶顥夐柣搴$畭閸庨亶藝娴兼潙鐓曢柟瀵稿Х绾惧ジ鎮楅敐搴′航闁稿簺鍎甸弻娑欐償閵忕姴顫庣紓浣介哺鐢偤骞忛悩璇茬闁圭儤鎸婚鎺戔攽閻樻鏆滅紒杈ㄦ礋瀵偆鎷犻懠顒佹闂佺粯姊婚埛鍫ュ极瀹ュ棙鍙忔俊顖氥仒閸氼偊鏌℃径瀣€愭慨濠勭帛閹峰懘宕妷锔锯偓顔尖攽閳╁啨浠犻柛鏂块叄楠炲繒鈧綆鍠栭拑鐔兼煏婢跺牆鍔ら柨娑欑洴濮婅櫣鎲撮崟顐ゎ槰濡炪倖娉﹂崶褏顦ㄩ梺閫炲苯澧撮柟顔煎槻楗即宕橀悙顑芥瀰闁诲孩顔栭崰妤呭箖閸屾凹鍤曟い鏇楀亾鐎规洖銈搁幃銏ゅ传閸曨偅杈堥梻鍌氬€烽懗鍓佸垝椤栨娲冀椤撶偟锛欓梺闈╁瘜閸樻悂宕戦幘鎰佹僵闁绘劦鍓欓锟�
开发学院软件开发Delphi 用DELPHI实现特色按钮 阅读

用DELPHI实现特色按钮

 2006-02-04 13:31:25 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簻椤掋垺銇勯幇顖毿撻柟渚垮妼椤粓宕卞Δ鈧獮濠勭磽閸屾艾鈧懓顫濋妸鈺佺疅缂佸顑欓崥瀣煕椤愵偅绶氱紓鍐╂礋濮婂宕掑▎鎴М濠电姭鍋撻梺顒€绉甸幆鐐哄箹濞n剙濡肩紒鎰殜閺屸€愁吋鎼粹€茬敖婵炴垶鎸哥粔鐢稿Φ閸曨垰鍐€妞ゆ劦婢€濞岊亪姊虹紒妯诲蔼闁稿海鏁诲濠氭晲婢跺﹤宓嗛梺缁樺姈缁佹挳宕戦幘璇叉嵍妞ゆ挻绋戞禍鐐叏濡厧浜鹃悗姘炬嫹闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻濞戔懞鍥偨缁嬫寧鐎梺鐟板⒔缁垶宕戦幇鐗堢厵缂備焦锚缁椦囨煃瑜滈崜锕傚矗閸愵煈娼栭柛婵嗗珔瑜斿畷鎯邦槾濞寸姴銈稿铏规嫚閼碱剛顔夐梺鐓庣秺缁犳牠骞冩ィ鍐╁€婚柦妯侯槼閹芥洟姊洪棃娑辨濠碘€虫喘瀹曘垽鎮介崨濞炬嫼闁荤喐鐟ョ€氱兘宕箛娑欑厱闁绘ê纾晶鐢告煏閸℃鈧湱缂撴禒瀣窛濠电姴瀚獮鍫ユ⒑绾懎顥嶉柟娲讳簽濡叉劙寮撮悢鍝勨叞闂傚倸鍊风欢姘缚瑜嶇叅闁靛牆娲犻崑鎾愁潩椤愩垹绁梺缁樹緱閸o綁鐛幒鎳虫棃鍩€椤掑倻涓嶉柨婵嗘缁♀偓闂傚倸鐗婄粙鎴﹀汲濞嗗緷鐟扳堪閸垻鏆梺鍝勭焿缂嶄焦鎱ㄩ埀顒勬煃閹増纭炬繝鈧潏銊х彾闁哄洨鍠撶弧鈧┑顔斤供閸橀箖宕㈤悽鍛娾拺缂備焦锚婵箓鏌涢幘鏉戝摵闁诡喗蓱濞煎繘濡搁妶鍥╃暰闂備礁婀辩划顖滄暜閻愬瓨娅犳繛鎴炴皑绾捐偐绱撴担璐細婵炴彃顕埀顒冾潐濞叉牕鐣烽鍐簷闂備礁鎲¢崝鏇㈠疮閻樿绀堟繝闈涚墛瀹曞弶绻涢幋鐐ㄧ細闁哄棗妫楅埞鎴︽偐鏉堫偄鍘¢梺杞扮劍閻楁粎妲愰幘瀛樺濞寸姴顑呴幗鐢告⒑閸︻厽鍤€婵炲眰鍊濋幃楣冩倻閽樺顔婇梺瑙勬儗閸樹粙宕撻悽鍛娾拺闁荤喐婢橀幃渚€鏌i幒鐐电暤闁诡喗顨婇獮鏍ㄦ媴閸忓瀚藉┑鐐舵彧缁插潡宕曢妶澶婂惞闁逞屽墴濮婃椽骞栭悙娴嬪亾閺嶎厽鍋嬮柣妯垮吹瀹撲線鐓崶銊р姇闁哄懏鎮傞弻銊╂偆閸屾稑顏�婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻娑樷槈濮楀牊鏁鹃梺鍛婄懃缁绘垿濡甸崟顖氱闁告鍋熸禒鑲╃磽娴e搫顎岄柛銊ョ埣瀵鈽夐姀鐘电杸闂傚倸鐗婄粙鎺楁倶閸儲鍊甸柣鐔哄閸熺偟绱掔拠鎻掓殻濠碉紕鏁诲畷鐔碱敍濮橀硸鍟嬮梺璇查叄濞佳囧箺濠婂牊鍋╁┑鍌氭啞閳锋垹鐥鐐村婵炲吋鍔栫换娑㈡嚑椤掆偓閺嬪孩銇勯銏㈢缂佽鲸甯掕灒闁兼祴鏅滈崵宀勬⒒娓氣偓閳ь剛鍋涢懟顖涙櫠椤旇偐鏆嗛柨婵嗙墕閸斿灚銇勯敂鐣屽弨闁诡噯绻濇俊鑸靛緞鐎n剙甯鹃梻浣稿閸嬪懐鎹㈤崘顔肩;妞ゅ繐鎳愮粻鍓р偓鐟板閸犳洜鑺辨繝姘畾闁绘柨鍚嬮埛鎴︽倵閸︻厼校闁靛棗鍟撮弻銈夊礃閼碱剙鐓熼悗瑙勬礃缁诲牓寮崘顔肩劦妞ゆ帒瀚ч埀顒佹瀹曟﹢顢欓崲澹洦鐓曢柍鈺佸枤濞堟﹢鏌i悢绋垮婵﹥妞介幃鈩冩償閳╁啯鐦i梻浣虹帛閻楁洟濡剁粙璺ㄦ殾闁绘垶岣跨弧鈧梺鎼炲劀閸愩劎銈梻鍌欑窔濞佳勵殽韫囨洘顫曢柡鍥ュ灩閸屻劍銇勮箛鎾跺闁抽攱鍨块弻鐔兼嚃閳轰椒绮堕梺鍛婃⒐椤ㄥ﹪寮婚敓鐘插窛妞ゆ棃鏁慨鍥╃磽娴gǹ鈧湱鏁悢濡撳洨鈧潧鎽滅壕濂稿级閸稑濡肩紒妤佺缁绘盯鎮℃惔锝囶啋闂佺硶鏂侀崜婵嬪箯閸涘瓨鐓ラ悗锝呯仛缂嶆姊婚崒姘偓宄懊归崶褜娴栭柕濞炬櫆閸婂潡鏌ㄩ弴鐐测偓鍝ョ不閺屻儲鐓曢柕澶樺枛婢ь噣鏌$€b晝绐旈柡宀€鍠栧畷婊嗩槾閻㈩垱鐩弻锟犲川椤旇棄鈧劙鏌$仦璇插闁诡喓鍊濆畷鎺戔槈濮楀棔绱�闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簻椤掋垺銇勯幇顖毿撻柟渚垮妼椤粓宕卞Δ鈧獮濠勭磽閸屾艾鈧懓顫濋妸鈺佺疅缂佸顑欓崥瀣煕椤愵偅绶氱紓鍐╂礋濮婂宕掑▎鎴М濠电姭鍋撻梺顒€绉甸幆鐐哄箹濞n剙濡肩紒鎰殜閺屸€愁吋鎼粹€茬敖婵炴垶鎸哥粔鐢稿Φ閸曨垰鍐€妞ゆ劦婢€濞岊亪姊虹紒妯诲蔼闁稿海鏁诲濠氭晲婢跺﹤宓嗛梺缁樺姈缁佹挳宕戦幘璇叉嵍妞ゆ挻绋戞禍鐐叏濡厧浜鹃悗姘炬嫹  闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕閵堝懎顏柡灞诲€濆畷顐﹀Ψ閿旇姤鐦庡┑鐐差嚟婵潧顫濋妸褎顫曢柟鎹愵嚙绾惧吋绻涢崱妯虹瑨闁告﹫绱曠槐鎾寸瑹閸パ勭彯闂佹悶鍔岄悥鍏间繆閹绢喖绀冩い鏃傚帶缁愭盯姊洪崫鍕垫Ч闁搞劌缍婂畷銏犆洪鍛偓鍨殽閻愯尙浠㈤柛鏃€纰嶉妵鍕晜鐠囪尙浠搁悗瑙勬穿缁绘繈鐛惔銊﹀殟闁靛/鍐ㄥ闂傚倸饪撮崑鍕洪敃鈧叅闁哄秲鍔庢晶锟犳⒒閸屾瑦绁版い鏇嗗應鍋撻崹顐㈡诞鐎规洘绮撻幃銏$附婢跺绋侀梻浣瑰劤缁绘劕锕㈡潏鈺侇棜闁稿繘妫跨换鍡樸亜閺嶃劎顣查柟顖氱墛閵囧嫰顢曢姀鈶裤垺銇勯鍕殻濠碘€崇埣瀹曞崬螖閳ь剟锝炴惔銊︹拺闁告稑饪撮悞濂告煕閵夋垵鎳庡銊モ攽閻橆喖鐏辨繛澶嬬閻у矂姊虹紒妯荤叆闁告艾顑夐幃锟犲Ψ閳哄倸鈧敻鏌ㄥ┑鍡涱€楅柛妯绘尦閺屾稓鈧綆鍋呯亸鎵磼缂佹ḿ绠撴い顐g箞椤㈡ê鈽夊▎蹇d紪闂備浇宕甸崰鎰垝鎼淬垺娅犳俊銈呭暞閺嗘粓鏌熼悜妯诲暗妞も晜褰冮湁闁绘挸娴烽幗鐘绘煟閹惧瓨绀嬮柡宀€鍠栭獮鍡氼檨闁搞倗鍠栭弻宥夋寠婢舵ɑ鈻堥梺鍝勮嫰缁夊墎妲愰幒鎳崇喖鎳¢妶鍛辈濠碉紕鍋戦崐銈夊磻閸涱垱宕查柛顐犲劚缁犵姵绻濇繝鍌涘櫣闁哄鐗婃穱濠囶敍濠垫劕娈銈呯箰缂嶅﹤顫忔繝姘<婵炲棙鍩堝Σ顕€姊虹涵鍜佸殝缂佽鲸娲滈崚鎺戔枎閹惧磭顓洪梺鎸庢煥閹碱偅绂嶆總鍛娾拺闁告繂瀚峰Σ褰掓煕閵娧冩灈鐎殿喗鎮傚顕€宕奸悢鍝勫箰闂備礁鎲¢崝褏寰婇懞銉ь洸闁告挆鍛紳婵炶揪缍€濞咃絿鏁☉姘辩<閻庯綆鍋呯亸鎵磼閸屾稑娴柡浣稿暣瀹曟帒顫濋幉瀣簥濠电姵顔栭崰妤呮晝閳哄懎绀堥柨鏇炲€归崐鐢告煙閹澘袚闁抽攱甯掗湁闁挎繂鎳忛幉鎼佹煥濞戞ḿ肖缂佽鲸甯¢、姘跺川椤撶姳妗撴俊銈囧Х閸嬬偤宕归崹顔炬殾闁割偅娲﹂弫鍡涙煕鐏炵偓鐨戦柕鍫畵濮婅櫣鎷犻幓鎺戞瘣缂傚倸绉村Λ娆戠矉瀹ュ鍐€妞ゆ挾鍋熼崫妤佺箾鐎电ǹ孝妞ゆ垵妫濋幃鈥斥枎閹剧补鎷哄銈嗘尪閸斿酣鎮鹃崡鐑嗙唵鐟滄粓宕归柆宥呂﹂柛鏇ㄥ灠濡﹢鏌涢…鎴濇灀闁稿鎸鹃幉鎾礋椤撴稒鏁靛┑鐘垫暩婵潙煤閿曞倸纾归梺鍨儍娴滄粓鐓崶銊﹀碍妞ゅ繈鍊濋弻娑氣偓锝庡亝瀹曞瞼鈧鍠栭埀顒傚櫏濡俱劌鈹戦悙鎻掓倯闁绘娲熼崺鐐哄箣閿旇棄浜归柣搴℃贡婵挳藟濠靛鈷戠紒瀣劵椤箓鏌涢弬鍧楀弰妤犵偛顦~銏犵暆閳ь剟鎮块埀顒€鈹戦悙鏉戠仸瀹€锝呮健閹潡宕ㄧ€涙ǚ鎷洪梺闈╁瘜閸欌偓婵$偓鎮傞弻娑㈡偐閹颁焦鐤侀悗娈垮枟閻擄繝鐛弽銊﹀闁革富鍘煎鎶芥⒒娴h櫣甯涙繛鍙夌墵瀹曟劙宕烽娑樹壕婵ḿ鍋撶€氾拷
核心提示:特色按钮 每当用到DELPHI自带的控件都感到少了一点什么,形状也好,用DELPHI实现特色按钮,颜色也好,变化的方式也好,都与自已的项目所需要的标准相差了一些,查阅了一些书籍后发现下面的控件很有可用之处!!!以下是它的源代码:unit DsFancyButton;interfaceuses SysUtils,Win

特色按钮  

每当用到DELPHI自带的控件都感到少了一点什么,形状也好,颜色也好,变

化的方式也好,都与自已的项目所需要的标准相差了一些,查阅了一些书籍

后发现下面的控件很有可用之处!!!

以下是它的源代码:

unit DsFancyButton;

interface

uses
  SysUtils,Windows, Messages, Classes, Graphics, Controls, Forms;

type
  TTextStyle = (txNone, txLowered, txRaised, txShadowed);
  TShape = (shCapsule, shOval, shRectangle, shRoundRect);
  TDsFancyButton = class(TGraphicControl)
  PRivate
   FButtonColor: TColor;
   FIsDown: Boolean;
   FFrameColor: TColor;
   FFrameWidth: Integer;
   FCornerRadius: Integer;
   FRgn, MRgn: HRgn;
   FShape: TShape;
   FTextColor: TColor;
   FTextStyle: TTextStyle;

   procedure SetButtonColor(Value: TColor);
   procedure CMEnabledChanged(var message: TMessage);
        message CM_ENABLEDCHANGED;
   procedure CMTextChanged(var message: TMessage);
        message CM_TEXTCHANGED;
   procedure CMDialogChar(var message: TCMDialogChar);
        message CM_DIALOGCHAR;
   procedure WMSize(var message: TWMSize); message WM_PAINT;
  protected
   procedure Click; override;
   procedure DrawShape;
   procedure Paint; override;
   procedure SetFrameColor(Value: TColor);
   procedure SetFrameWidth(Value: Integer);
   procedure SetCornerRadius(Value: Integer);
   procedure SetShape(Value: TShape);
   procedure SetTextStyle(Value: TTextStyle);
   procedure WMLButtonDown(var Message: TWMLButtonDown); message

WM_LBUTTONDOWN;
   procedure WMLButtonUp(var Message: TWMLButtonUp); message

WM_LBUTTONUP;
   procedure WriteCaption;
  public
   constructor Create(Aowner: TComponent); override;
   destructor Destroy; override;
  published
   property ButtonColor: TColor
       read FButtonColor write SetButtonColor;
   property Caption;
   property DragCursor;
   property DragMode;
   property Enabled;
   property Font;
   property FrameColor: TColor
       read FFrameColor write SetFrameColor;
   property FrameWidth: Integer
       read FFrameWidth write SetFrameWidth;
   property ParentFont;
   property ParentShowHint;
   property PopupMenu;
   property CornerRadius: Integer
       read FCornerRadius write SetCornerRadius;
   property Shape: TShape
       read FShape write SetShape default shRoundRect;
   property ShowHint;
   property TextStyle: TTextStyle
       read FTextStyle write SetTExtStyle;
   property Visible;

   property OnClick;  property OnDragDrop;
   property OnDragOver;  property OnEndDrag;
   property OnMouseDown; Property OnMouseUp;
   Property OnMouseMove;
  end;

procedure Register;

implementation

constructor TDsFancyButton.Create(AOwner: TComponent);
begin
  inherited Create(Aowner);
  ControlStyle := [csClickEvents,  csCaptureMouse,  CSSetCaption];
  Enabled := True;
  FButtonColor := clBtnFace;
  FIsDown := False;
  FFrameColor := clGray;
  FFrameWidth := 6;
  FCornerRadius := 10;
  FRgn := 0;
  FShape := shRoundRect;
  FTextStyle := txRaised;
  Height := 25;
  Visible := True;
  Width := 97;
end;

destructor TDsFancyButton.Destroy;
begin
  DeleteObject(FRgn);
  DeleteObject(MRgn);
  inherited Destroy;
end;

procedure TDsFancyButton.Paint;
var Dia: integer;
   ClrUp,  ClrDown: TColor;
begin
  Canvas.Brush.Style := bsClear;

  if FIsDown then
   begin ClrUp := clBtnShadow; ClrDown := clBtnHighlight; end
  else
   begin ClrUp := clBtnHighlight; ClrDown := clBtnShadow; end;

  with Canvas do
   begin
    case Shape of
     shRoundRect:
      begin
       Dia := 2*CornerRadius;
       Mrgn := CreateRoundRectRgn(0, 0, Width, Height, Dia,

Dia);
      end;
     shCapsule:
      begin
       if Width < Height then Dia := Width else Dia :=

Height;
       Mrgn := CreateRoundRectRgn(0, 0, Width ,  Height, Dia,

Dia);
      end;
     shRectangle: MRgn := CreateRectRgn(0, 0, Width - 1, Height

- 1);
     shOval: MRgn := CreateEllipticRgn(0, 0, Width, Height);
    end;//case
    Canvas.Brush.Color := FButtonColor;
    FillRgn(Handle, MRgn, Brush.Handle);
    Brush.Color :=ClrUp;
    FrameRgn(Handle, MRgn, Brush.Handle, 1,1);
    OffsetRgn(MRgn, 1, 1);
    Brush.Color := ClrDown;
    FrameRgn(Handle, MRgn, Brush.Handle, 1, 1);
   end;//canvas
   DrawShape;
   WriteCaption;
end;

procedure TDsFancyButton.DrawShape;
var
  FC, Warna: TColor;
  R, G, B: Byte;
  AwalR, AwalG, AwalB, AkhirR, AkhirG, AkhirB, n, t, Dia: Integer;
begin
  if FFrameWidth mod 2=0 then t := FFrameWidth
  else t := FFrameWidth + 1;

  Warna := ColorToRGB(ButtonColor);
  FC := ColorToRGB(FrameColor);
  Canvas.Brush.Color := Warna;

  AwalR := GetRValue(FC); AkhirR := GetRValue(Warna);
  AwalG := GetGValue(FC); AkhirG := GetGValue(Warna);
  AwalB := GetBValue(FC); AkhirB := GetBValue(Warna);
  FRgn := 0;
  with Canvas do
  for n := 0 to t - 1 do
  begin
   R := AwalR + Trunc(Sqrt(t*t - Sqr(t-n))*(AkhirR - AwalR)/t);
   G := AwalG + Trunc(Sqrt(t*t - Sqr(t-n))*(AkhirG - AwalG)/t);
   B := AwalB + Trunc(Sqrt(t*t - Sqr(t-n))*(AkhirB - AwalB)/t);
   Brush.Color := RGB(R, G, B);

   Case Shape of
    shOval: FRgn := CreateEllipticRgn(1 + n, 1 + n, Width - n,

Height - n);
    shRoundRect:
     begin
      Dia := CornerRadius;
      if (Dia - n) >0 then
       FRgn :=
        CreateRoundRectRgn(1 + n, 1 + n ,Width - n, Height -

n, 2*(Dia - n), 2*(Dia - n))
      else FRgn := CreateRectRgn( 1 + n, 1 + n, Width - n - 1,

Height - n - 1);
     end;
    shCapsule:
     begin
      if Width < Height then Dia := Width div 2 else Dia :=

Height div 2;
       if (Dia - n) > 0 then
        FRgn:=
         CreateRoundRectRgn(1 + n, 1 + n, Width - n,

Height - n, 2*(Dia - n), 2*(Dia - n))
       else FRgn := CreateRectRgn(1 + n, 1 + n ,Width - n -

1, Height - n - 1);
     end;
    else FRgn := CreateRectRgn(1 + n, 1 + n, Width - n - 1,

Height - n - 1);
   end;//case
   FrameRgn(Handle, FRgn, Brush.Handle, 1, 1);
  end;
end;

procedure TDsFancyButton.WriteCaption;
var
  Flags: Word;
  BtnL, BtnT, BtnR, BtnB: Integer;
  R, TR: TRect;
begin
  R := ClientREct; TR := ClientRect;
  Canvas.Font := Self.Font;
  Canvas.Brush.Style := bsClear;
  Flags := DT_CENTER or DT_SINGLELINE;
  Canvas.Font := Font;

  if FIsDown then FTextColor := FrameColor
  else FTextColor := Self.Font.Color;

  with canvas do
   begin
    BtnT := (Height - TextHeight(Caption)) div 2;
    BtnB := BtnT + TextHeight(Caption);
    BtnL := (Width - TextWidth(Caption)) div 2;
    BtnR := BtnL + TextWidth(Caption);
    TR := Rect(BtnL, BtnT, BtnR, BtnB);
    R := TR;
    if ((TextStyle = txLowered) and FIsDown ) or
     ((TextStyle = txRaised) and not FIsDown) then
    begin
     Font.Color := clBtnHighLight;
     OffsetRect(TR, -1 + 1, -1 + 1);
     DrawText(Handle, PChar(Caption), Length(Caption), TR,

Flags);
    end
    else if ((TextStyle = txLowered) and not FIsDown) or
        ((TextStyle = txRaised) and FIsDown) then
      begin
       Font.Color := clBtnHighLight;
       OffsetRect(TR, + 2, + 2);
       DrawText(Handle, PChar(Caption), Length(Caption), TR,

Flags);
      end
      else if (TextStyle = txShadowed) and FIsDown then
         begin
          Font.Color := clBtnShadow;
          OffsetREct(TR, 3 + 1, 3 + 1);
          DrawText(Handle, PChar(Caption),

Length(Caption), TR, Flags);
         end
         else if (TextStyle = txShadowed) and not FIsDown

then
         begin
          Font.Color := clBtnShadow;
          OffsetRect(TR, 2 + 1, 2 + 1);
          DrawText(Handle, PChar(Caption),

Length(Caption), TR, Flags);
         end;

  if Enabled then Font.Color := FTextColor//self.Font.Color
    else if (TextStyle = txShadowed) and not Enabled then
     Font.Color := clBtnFace
    else Font.Color := clBtnShadow;
    if FIsDown then OffsetRect(R, 1, 1)
    else OffsetRect(R, -1, -1);
    DrawText(Handle, PChar(Caption), Length(Caption), R, Flags);
   end;
end;

procedure TDsFancyButton.SetButtonColor(value: TColor);
begin
  if value <> FButtonColor then
   begin FButtonColor := value ; Invalidate; end;
end;

procedure TDsFancyButton.WMLButtonDown(var message:

TWMLButtonDown);
begin
  if not PtInRegion(MRgn, message.xPos, message.yPos) then Exit;
  FIsDown := True;
  Paint;
  inherited;
end;

procedure TDsFancyButton.WMLButtonUp(var message: TWMLButtonUp);
begin
  if not FIsDown then Exit;
  FIsDown := False;
  paint;
  inherited;
end;

procedure TDsFancyButton.SetShape(value: TShape);
begin
  if value <> FShape then
   begin FShape := value; Invalidate; end;
end;

procedure TDsFancyButton.SetTextStyle(value: TTextStyle);
begin
  if value<>FTextStyle then
   begin  FTextStyle := value; Invalidate; end;
end;

procedure TDsFancyButton.SetFrameColor(value: TColor);
begin
  if Value<>FFrameColor then
   begin FFrameColor := Value; Invalidate;end;
end;

procedure TDsFancyButton.SetFrameWidth(Value: Integer);
var
  w: integer;
begin
  if Width<height then w := Width else w := Height;
  if Value<>FFrameWidth then FFrameWidth := value;
  if FFrameWidth < 4 then FFrameWidth := 4;
  if FFrameWidth >(w div 2) then FFrameWidth := (w div 2);
  Invalidate;
end;

procedure TDsFancyButton.SetCornerRadius(Value: integer);
var
  w: integer;
begin
  if Width<Height then w := Width else w := Height;
  if value<>FCornerRadius then FCornerRadius := value;
  if FCornerRadius<3 then FCornerRadius := 3;
  if FCornerRadius>w then FCornerRadius := w;
  Invalidate;
end;

procedure TDsFancyButton.CMEnabledChanged(var message: Tmessage);
begin
  inherited;
  invalidate;
end;

procedure TDsFancyButton.CMTextChanged(var message: TMessage);
begin
  Invalidate;
end;

procedure TDsFancyButton.CMDialogChar(var message:TCMDialogChar);
begin
  With Message do
   if IsAccel (CharCode, Caption) and Enabled then
    begin  Click; Result := 1 ;end
   else inherited;
end;

procedure TDsFancyButton.WMSize(var Message: TWMSize);
begin
  inherited;
  if width>300 then width := 300;
  if Height>300 then Height := 300;
end;

procedure TDsFancyButton.Click;
begin
  FIsDown := False;
  Invalidate;
  inherited Click;
end;

procedure Register;
begin
  RegisterComponents('WYM COMPONENT',[TDsFancyButton]);
end;

end.

耿百强。

Tags:DELPHI 实现 特色

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接