亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

如何用Delphi編寫自己的可視化控件

2019-11-18 18:56:33
字體:
供稿:網(wǎng)友

  可視化控件(Visual Component)實際上就是一個類(class),要編寫一個類,可以直接在*.pas文件中編寫。但是要編寫控件,則必須使用包(package)。從File菜單中選擇New,新建一個Package,這就是存放和安裝控件用的包。然后單擊Package窗口中的Add按鈕,添加一個元件(Unit)。
  在彈出的對話框最上方選擇New Component。因為一個控件的所有屬性、方法、事件不可能都由自己編,所以就需要選擇祖先類(或者叫做"父類"或"基類"),然后再在其上面添加自己的屬性、方法、事件。在Ancestor type后的下拉框中選擇所需的祖先類。由于編寫可視化控件必須要畫圖,所以選擇TGraphicControl作為祖先類。再在Class Name框中輸入新控件(類)的名稱,一般以"T"開頭。Palette Page是用來選擇新控件在Delphi的窗口中的控件頁面名稱,例如"Standard",這個可以自己取。在Unit File Name中添好新控件文件的路徑及文件名,單擊OK按鈕。新的控件便加入了?,F(xiàn)在可以為該控件編寫代碼了。
  下面以編寫一個可以自定義圖片的滾動條為例,說明編寫可視化控件的方法。
  按照上面的方法,選擇TGraphicControl為祖先類,新控件的名稱是TPigHorizontalScroller。選擇好文件路徑和文件名后,單擊OK按鈕,開始編寫代碼。
  每一個控件,都會被創(chuàng)建(Create)和刪除(Destroy),所以必須首先編寫這兩個過程。對于控件中的每一個過程,都必須在前面先定義,然后再在后面編寫。定義的過程或?qū)傩杂腥N:一、在PRivate后定義的是屬于控件內(nèi)部使用的,使用該控件的人無法看到;二、在protected后定義的一般是看不到的,只在別人使用該控件作為祖先類編寫其它控件時才可見;三、在public后定義的只允許別人在程序中調(diào)用;四、在published后定義的可以在屬性窗口(Object Inspector)中看到。由于創(chuàng)建和刪除過程除了在編程過程中建立控件時自動執(zhí)行外,還可能在程序運行過程中動態(tài)創(chuàng)建控件時被調(diào)用,所以把它定義在public后⑴。(該序號表示次步驟在所附源程序中的代碼的位置,下同)現(xiàn)在也許還不知到應(yīng)該在這兩個過程中編寫什么,如何去編。我們在下面將會講到。
我們首先為這個控件添加一些屬性。我們定義一個Max屬性用于設(shè)置或讀取滾動條的最大值。因為在程序中一般不直接使用屬性,所以要定義一個變量,和該屬性對應(yīng)起來,一邊修改或讀取其值。因為它只在控件內(nèi)部使用,所以我們把它定義在private后⑵。(一般與屬性相關(guān)聯(lián)的變量都以"F"開頭,例如FMax)定義好變量后,再定義屬性。這個屬性需要再Object Inspector窗口中可見,所以把它定義再published后⑶。定義的語法是:
  property <屬性名>:<類型> read <讀取該屬性時對應(yīng)的變量> write <寫入該屬性時對應(yīng)的變量或過程>
  其它的變量和屬性也類似的定義(例如Min最小值、Value當(dāng)前值等)。下面我們定義幾個屬性和變量,用于設(shè)置滾動條的圖片(因為圖片變量比較特殊,所以單獨講一下)。我們把LeftButtonUpPicture(向左按鈕圖片)、LeftButtonDownPicture(向左按鈕按下圖片)等定義為TBitmap類型(一定要定義相對應(yīng)的變量)。
  大家一定注意到了,在所附的源程序中,定義這幾個屬性時,read后所指定的讀取屬性時對應(yīng)的變量是F…,而write后指定的寫入該屬性時對應(yīng)的不是一個變量,而是一個Set…之類的東西,這是一個自定義的過程。作為該功能的過程的定義為:
  procedure <過程名>(Value: <被設(shè)置的屬性的值的類型>)
  因為執(zhí)行寫入該類屬性的時候需要做其它的事情,所以不能光用一個變量來處理,應(yīng)該用一個過程來處理。這中過程一般定義在protected后。在該類過程中,使用一個在⑷處這樣一個語句來給TBitmap類型的變量來賦值,這是由于該類型的變量不能直接賦值而采用的。
定義完這些TBitmap類型的變量的屬性后,上面講的create過程和destroy過程中就需要編寫代碼了。因為TBitmap也是一個類,所以在create過程中必須創(chuàng)建⑸,在destroy過程中必須釋放掉(free)⑹。這里⑺所指的inherited語句是用于指明該過程是從祖先類類中繼承來的。(這個一定不能掉)。
  因為我們編寫的是可視化控件,所以必須在控件上畫圖。我們這個控件的祖先類TGraphicControl中封裝有一個Canvas(畫布)對象,我們可以直接使用它來畫圖。如果你對畫布的使用還不太熟悉,最好去找一本書來看一看。
  下面要做的工作就是畫圖了。如何在控件上畫圖呢?祖先類TGraphicControl中有一個Paint事件,當(dāng)控件需要重畫時便會自動觸發(fā)。我們現(xiàn)在要做的就是要為這個事件編寫一段程序。首先在protected后定義一個Canvas對象。由于它是祖先類中已有的,所以不需要加任何說明⑻。我們將使用這個對象來畫圖。接著,就要定義一個Paint過程,編寫繪制控件的代碼。先在public后定義Paint過程。由于它是由祖先類觸發(fā)的,而不是由用戶調(diào)用的,所以后面必須加上override,否則,該控件將會由于Paint過程永遠(yuǎn)不會被調(diào)用而不成為可視化控件⑼。下面我們就來編寫Paint過程的代碼⑽。
  該文章所附的源程序的Paint過程中的T_Height等變量是用來保存滾動條中按鈕、滑塊等的大小的,這部分程序和普通的application中的程序差別不大,大部分都是對畫布進行操作,相信大家一看就明白。值得注意的是下面對FAutoSize變量的判斷⑾,FAutoSize是和該控件的屬性AutoSize相關(guān)聯(lián)的布爾型變量,是用來設(shè)置這個控件的大小是否隨圖片的大小而變化的。注意,在控件的代碼中,一般都不直接調(diào)用屬性,而是使用與其相對應(yīng)的的變量。
程序編到這里,就算是終于給自己的新控件做了一個外型了,不過它還不能滾動。現(xiàn)在我們來編寫鼠標(biāo)事件,讓我們能夠操縱它。鼠標(biāo)事件的過程的定義和Paint過程很相似,只是后面要加上參數(shù)說明⑿,鼠標(biāo)事件分為MouseDown、MouseMove和MouseUp三個,在定義后面都要加上override。接下來在后面編寫它的代碼。注意:這里的鼠標(biāo)事件是Mouse…,而不是通常的OnMouse…??墒窃冖烟幍亩x是干什么用的呢?這里的事件定義,都是給用戶使用的,也就是說,當(dāng)使用該控件時,會在Object Inspector中的Event頁面中顯示出來。
  這些鼠標(biāo)事件的代碼也非常簡單,判斷鼠標(biāo)的坐標(biāo),在畫布上畫出相應(yīng)的圖片等,并同時觸發(fā)相應(yīng)的事件。值得注意的是,在調(diào)用自定義事件時,都要先用⒁處的這樣一個語句來判斷用戶是否已經(jīng)為該事件編寫代碼。這一點非常重要,否則會調(diào)用出錯。
  大家注意到了,剛才所調(diào)用的事件都是自定義的,定義的方法也很簡單,和定義屬性差不多,只是類型時TNotifyEvent罷了?!    ?BR>  TNotifyEvent是默認(rèn)事件,其定義為:
  TNotifyEvent = procedure(Sender: TObject)
  如果你要定義另外形式的事件,就必須這樣:先在type后編寫
  <事件類型名稱> = procedure(<參數(shù)>:<類型>)
例如:
  TCustomEvent = procedure(a: Integer; b:String);
然后在public后定義:
   <事件名稱>:<事件類型名稱>
例如:
  AnEvent: TCustomEvent;
  看完這些,這整個程序你應(yīng)該理解了吧。如果編譯或運行出錯,注意檢查以下幾點:
   ?。?、create和destroy過程中是否有inherited語句;
   ?。?、TBitmap類型的變量create和free了沒有;
   ?。?、過程前有沒有控件名,例如:TPigHorizontalScroller.MoseMove
  判斷鼠標(biāo)是否進入或離開控件的方法:
定義如下的過程:
  procedure MouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
  procedure MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;

上一篇:Delphi開發(fā)者快速解決問題的兩大網(wǎng)絡(luò)利器

下一篇:用delphi編寫醫(yī)院的復(fù)雜報表

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

中文字幕av观看| 91精品国产福利在线观看麻豆| 99精品视频在线观看播放| 亚洲精选免费视频| 毛片毛片女人毛片毛片| 天天综合网色中文字幕| …久久精品99久久香蕉国产| 亚洲网站在线免费观看| 日本丰满少妇黄大片在线观看| 日本熟妇毛茸茸丰满| 亚洲波多野结衣| 一区二区三区欧美亚洲| 男人的天堂在线| 日韩电影在线观看中文字幕| 亚洲黄色小视频| 色综合久久99| 91亚洲人成网污www| 亚洲精品播放| 欧美影院在线播放| 欧美日韩精品是欧美日韩精品| 性高潮久久久久久久| 亚洲国语精品自产拍在线观看| 美女把尿口扒开让男人桶在线观看| 久久午夜国产精品| 成人午夜av| 中文字幕色一区二区| 国产精品电影| 亚洲国产日韩在线一区| 欧美福利一区二区三区| 亚洲欧美天堂| 久久91超碰青草在哪里看| 午夜男人的天堂| 久久天堂av| 在线免费不卡视频| 在线免费观看黄色小视频| 夜夜嗨aⅴ一区二区三区| 国产亚洲综合精品| 欧美一区二区三区四区在线观看| 国产麻豆剧果冻传媒观看hd高清| 精品福利樱桃av导航| 国产精品美女视频免费观看软件| 国产手机视频在线| 国产又粗又长又硬| 成人小视频在线观看| 97在线视频精品| 精品国产美女| 日韩你懂的电影在线观看| 久久久www成人免费无遮挡大片| 久久一卡二卡| 黑人精品一区二区| 欧美日韩免费不卡视频一区二区三区| 免费看国产一级片| 久久93精品国产91久久综合| 亚洲一级av毛片| 欧美一级bbbbb性bbbb喷潮片| 久久午夜色播影院免费高清| 精品国产一区二区三区久久久久久| 欧美经典一区| 欧美精品第三页| 韩国女同性做爰三级| 国产1区2区3区精品美女| 99久久久久久久久| 美女黄网久久| 男人天堂网在线观看| 久久av一区二区三区漫画| 要久久电视剧全集免费| 中文字幕 欧美日韩| 欧美性生交大片| 国产日产在线观看| 国产精品波多野结衣| 久久久国产在线视频| 久久精品国产sm调教网站演员| 欧美大香线蕉线伊人久久| 91精品视频网站| 波多野结衣加勒比| 日日狠狠久久偷偷四色综合免费| 人人草在线视频| 色综合天天综合网国产成人网| 久热成人在线视频| 日本欧美一区二区| 国产精品第一页第二页第三页| 日韩成人三级视频| 欧美成人黑人xx视频免费观看| 亚洲黄色一区二区三区| 精品国产乱码久久久久久天美| 波波电影院一区二区三区| 午夜dj在线观看高清视频完整版| 伊人久久一区二区| 夜鲁夜鲁夜鲁视频在线播放| 免费一级a毛片| 欧美日韩国产成人在线观看| www.youjizz.com在线| 亚洲高清不卡av| 国产精品美女久久久| 激情综合网激情| 超碰在线免费公开| 无码人妻aⅴ一区二区三区有奶水| 国产精品嫩草影院8vv8| 麻豆国产精品一区二区三区| 国产精品福利网站| 国产亚洲人成网站| 亚洲xxxx视频| 一区二区三区日韩在线观看| 久久久久久久久久久人体| 国产精品爱久久久久久久| 2020日本不卡一区二区视频| 成人激情直播| 女人床在线观看| 亚洲精品一区二区精华| 国产成人女人毛片视频在线| 国产一区在线电影| 深夜视频一区二区| 亚洲国产精品久久人人爱| 亚洲一卡二卡在线观看| 99re在线国产| 亚洲国产精品一区二区久| 亚洲三级在线观看| 日韩精品一区二区三区中文在线| 三级欧美日韩| 日韩视频123| 一区二区三区蜜桃网| 国产精品99爱免费视频| 亚洲乱亚洲高清| 亚洲天堂资源在线| 欧美日韩中国免费专区在线看| 色佬视频在线观看| 成**人特级毛片www免费| 久久毛片亚洲| 黄色片免费看| 亚洲国产一区二区精品专区| 亚洲综合在线视频| 久久久国内精品| 久久99国产精品免费| 国产乱码精品一区二三赶尸艳谈| 91九色蝌蚪国产| 日韩一区二区三区电影| 黄色av电影在线观看| 国产精品迅雷| 欧美一级精品大片| 综合亚洲色图| 国产精品一区二区三区在线| 中文字幕在线看片| 欧美华人在线视频| 99热在线播放| 久久久亚洲精品无码| 69久久夜色精品国产69蝌蚪网| 日本性高潮视频| 欧美一级xxx| 国产老妇伦国产熟女老妇视频| 国产在线精品一区二区三区不卡| 国产成人鲁色资源国产91色综| 深夜福利在线观看直播| 国产精品久久久久久久久久免费看| 91九色蝌蚪视频| 日韩黄色小视频| 久久全国免费久久青青小草| 成人免费视频国产免费麻豆| 91大神xh98hx在线播放| 国语对白在线刺激| 久久精品影视| 波多野结衣一二三四区| 欧美色视频日本版| 你懂的免费网站| 国产区日韩欧美| 日本中文字幕在线不卡| 日韩欧美亚洲国产一区| 久久99国内| 久久久久亚洲| 99热精品国产| 欧美理论电影在线观看| 日韩精彩视频| 日韩视频永久免费观看| 美女毛片一区二区三区四区| 天堂网站www天堂资源在线| 久久久综合亚洲91久久98| 中文字幕av专区| 欧美性极品xxxx娇小| 亚洲 欧美 日韩在线| h片精品在线观看| 欧美猛男gaygay网站| 国产精品美女久久久久久| 亚欧激情乱码久久久久久久久| 亚洲一区av在线播放| www视频在线播放| 最新av在线免费观看| 亚州精品天堂中文字幕| 国产精品va在线| 一个人看的www视频在线免费观看| 久久久久一区二区三区四区| 日韩美女视频在线观看| www.豆豆成人网.com| 青青在线免费观看视频| 午夜精品久久久久久久99樱桃| 一本一道无码中文字幕精品热| 忘忧草精品久久久久久久高清| www.99re7.com| 欧美色图亚洲激情| 亚洲一区二区三区精品中文字幕| 国产午夜福利精品| 欧美精品亚洲精品日韩精品| 国产日韩精品中文字无码| a在线观看免费视频| jlzzjizz在线播放观看| 欧美午夜三级| 伊人影院蕉久影院在线播放| 国产人久久人人人人爽| 波多野结衣喷潮| 亚洲男人的天堂在线视频| 国产伦精品一区二区三区四区| 视频免费在线观看| 免费亚洲视频| 日韩欧美一级二级三级| 调教视频免费在线观看| 免费毛片大全| 成人免费无码av| 美日韩免费视频| 99蜜月精品久久91| 国产一级大片在线观看| 天堂在线一区二区三区| 色久优优欧美色久优优| 免费 成 人 黄 色| 欧美久久免费观看| 日日夜夜精品视频免费观看| 台湾亚洲精品一区二区tv| 忘忧草在线日韩www影院| 生活片a∨在线观看| 68精品国产免费久久久久久婷婷| 亚洲一区中文日韩| 日本a级片电影一区二区| 美女黄色网址| 国产精品欧美三级在线观看| 日韩av免费网址| 九色视频在线播放| 一级黄色片大全| 婷婷五月色综合| 成人午夜激情在线| 精品日本一区二区三区在线观看| 青少年xxxxx性开放hg| 69国产成人精品视频软件| 国产不卡av一区二区| 女人让男人操自己视频在线观看| 五月婷婷久久丁香| 国产精品二区一区二区aⅴ污介绍| 老女人性淫交视频| 欧美日本亚洲视频| 99超碰麻豆| 日韩av在线中文| 欧美性videos高清精品| 在线观看的av网站| 国产经典久久久| 欧美日韩久久久| 波多野结衣电影免费观看| 日本在线一区二区| 欧洲美女精品免费观看视频| 欧美aaaaaaa| 一级黄色片国产| 天码人妻一区二区三区在线看| 欧美日韩激情在线| 欧美日韩不卡一区| 欧美第十八页| 国产三级在线播放| 美女被羞羞网站| 91国内免费在线视频| 中文字幕免费一区二区| 国产精品久久久久一区二区三区厕所| 国产精品久久精品视| www.日本xxxx| 欧美性受xxxx黑人爽| 国产一级中文字幕| 日韩欧美性视频| 色哟哟国产精品| 正在播放久久| 亚洲精品乱码久久久久久自慰| 97在线观看免费高清视频| 免费视频二区| 亚洲国产小视频| 亚洲国产日韩一区| 天堂va欧美ⅴa亚洲va一国产| 亚洲香蕉在线观看| 欧洲亚洲一区二区三区四区五区| 欧美成人剧情片在线观看| 国产a区久久久| av福利精品导航| 国产免费不卡| 亚洲第一成人在线视频| 久久久99精品视频| 在线观看精品自拍视频| 中文字幕日韩精品有码视频| 精品国产福利视频| 久久性爱视频网站| 精品伦精品一区二区三区视频密桃| 久久精品国产欧美亚洲人人爽| 男生操女生视频网站| 最近免费观看高清韩国日本大全| 在线观看中文字幕一区| 久久男人资源视频| 国产麻豆xxxvideo实拍| 国产精品久久久久四虎| 国产无遮挡猛进猛出免费软件| 日韩中文在线不卡| 国产欧美综合一区| 亚洲视频999| 干日本少妇视频| 18岁以下禁止观看的美女视频| 亚洲国产一区二区三区在线播| 亚洲在线成人| 欧美日韩一区高清| 新狼窝色av性久久久久久| 宅男噜噜噜66一区二区66| 欧美α欧美αv大片| 欧美手机视频| 一级日本黄色片| 国产伦精品免费视频| 欧美日韩午夜影院| 日韩在线资源网| 浅井舞香一区二区| 国产网红女主播精品视频| 男女啪啪网站| 91视视频在线直接观看在线看网页在线看| 亚洲天堂免费在线观看视频| 久久久午夜电影| 91亚洲精品国偷拍自产在线观看| 神马久久久久久久久久| 亚洲无中文字幕| 日韩一区二区a片免费观看| eeuss影院18直达| 中文字幕巨乱亚洲| 成人在线观看毛片|