国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

走近VB.Net(十一) 隨心所欲窗體外觀(skin精彩源碼)

2024-07-10 13:01:27
字體:
供稿:網(wǎng)友
走近vb.net(十一) 隨心所欲窗體外觀(skin精彩源碼)
前幾天因?yàn)閼?yīng)付約稿,答應(yīng)的這個(gè)源碼推遲了幾天,今天熬夜把他寫出來,請(qǐng)見諒。另外我想說一些題外話,前時(shí)我曾在文章中說過,說vb.net的面向?qū)ο蟪ujava,delphi沒有實(shí)際根據(jù)(你總不能把面象對(duì)象理解成linux核心一樣的源碼技術(shù),他主要還是一種指導(dǎo)思想),這句話本身就有了邏輯性的錯(cuò)誤,請(qǐng)問java與delphi是誰抄誰呢?答案只能是smalltalk的面向?qū)ο蟾纾ㄒ娡鯂?guó)榮的文章)。 vc的面向?qū)ο蟠蠹议]口不提,然而我個(gè)人認(rèn)為在windows編程上(不包括網(wǎng)絡(luò)應(yīng)用)vc仍是最強(qiáng)大的語言,而vc的程序員幾乎沒有人出來說這些無聊的話。那么是誰在說呢......

這個(gè)說法最早源于國(guó)外的文章(指在網(wǎng)絡(luò)應(yīng)用上有涉嫌模仿java,如果是編寫windows程序則毫無根據(jù)),而作者在后來的撰文中很清楚的告訴大家糾正此說法。我也一再提到過。可有 人視若無睹。大家現(xiàn)在就說vb.net如何如何太早了一點(diǎn),我們都是在實(shí)踐摸索,用都不會(huì)用,就毫無根據(jù)的揣測(cè)有些不智。很多學(xué)java的告訴你先學(xué)java再學(xué)vb.net.這有些不可思議,起碼到目前,沒有看到j(luò)ava程序員寫出我們可以拿來學(xué)的vb.net程序。因?yàn)橛辛嗣嫦髮?duì)象的思想不等于有了一切。

現(xiàn)在面向?qū)ο笳嬗行┥窕耍@不可思議,程序員不是哲人,是要通宵達(dá)旦的工作學(xué)習(xí)創(chuàng)造,好象一點(diǎn)也不浪漫!而現(xiàn)在竟被一部分人浪漫了。

不論微軟如何的稱頌他的網(wǎng)絡(luò)功能,我相信在不久的將來,vb.net必將成為最快速,最重要,也最適用windows平臺(tái)的應(yīng)用程序編程語言(我沒有涉及網(wǎng)絡(luò)應(yīng)用)。當(dāng)然決不可能是最強(qiáng)大的,這世界好象沒有誰最強(qiáng)大!而且我對(duì)他的網(wǎng)絡(luò)應(yīng)用不感興趣。每個(gè)人都有自已的路。正如大家都說vb如何的適宜于開發(fā)數(shù)據(jù)庫(kù)。但是你相不相信一個(gè)人從不接觸數(shù)據(jù)庫(kù)可以寫出讓人很看好的程 序,每個(gè)人有權(quán)利選擇自已的路! 如果你對(duì)網(wǎng)絡(luò)應(yīng)用毫無興趣,java還會(huì)是一個(gè)好的選擇嗎?

我個(gè)人認(rèn)為無論是java,delphi,還是vb.net甚至c++,各有各的長(zhǎng)處。各有各的用途。無優(yōu)劣之分,編程最重要的是靈感,是廣博的視野,是寬大的襟懷。任何想貶低別人的人,正暴露自已的淺見與無知。我雖然是學(xué)vb的,但我在進(jìn)入delphi的論壇以后,我亦為之感動(dòng),這里也有很多兢兢業(yè)業(yè),無私奉獻(xiàn)的值得尊敬與學(xué)習(xí)的人。工具永遠(yuǎn)不能征服人性!外國(guó)人沒有因這紙是中國(guó)人造的而不用,亦沒有因火藥是中國(guó)人發(fā)明的而羞愧,也沒有因這二進(jìn)制的起源于中國(guó)而牢騷,科學(xué)是跨越國(guó)界的,不應(yīng)被蒙上政治色彩。

我曾在一個(gè)專門介紹比爾蓋茨的網(wǎng)站看了一下他的生平,想來看過的人不少。看了他一生的奮斗歷程,我們還能說什么呢?

以上是個(gè)人的淺見(鑒于本人對(duì)delphi,java的無知,對(duì)vb.net的初識(shí)以及對(duì)面象對(duì)象技術(shù)的部分誤解),只是談?wù)劯惺埽?qǐng)勿借題發(fā)揮,大作文章。我寫這些是防止一些錯(cuò)得離譜的歪論誤導(dǎo)初學(xué)者。另外我一再鼓勵(lì)大家研究一下,弄出一些實(shí)際的心得來。我因?yàn)樽陨淼南拗婆c沒有相互的研討,所以每一篇文章寫出來所付出的努力不亞于寫一個(gè)工程。所以請(qǐng)轉(zhuǎn)載文章的在跟我聯(lián)系以后 在文中明確按本文結(jié)尾處樣式注明我的網(wǎng)站名,網(wǎng)址 。這里先向您致謝了!

另外鑒于一些初學(xué)者的要求,以及前輩的指點(diǎn),我在源碼中對(duì)入門級(jí)的知識(shí)進(jìn)行了注解,如果您認(rèn)為這些對(duì)您是多余的,請(qǐng)諒解還有很多人看不懂。


' 本源碼出自vb.net中文站 http://vbnetcn.126.com hejianzhong 請(qǐng)尊重作者勞動(dòng)不要修改此信息(ai.....................)

' ___________________________________________________________________________________________________________________

' -------------------------------------------------------------------------------------------------------------------

' 請(qǐng)首先清添加lable(lbexit,lbpre,lbshow)控件

' 請(qǐng)?jiān)趯傩詸谠O(shè)置這三個(gè)lable控件的backcolr(背景色)為system.desktop 即在出現(xiàn)的取色對(duì)話框中選擇system標(biāo)簽下的desktop顏色

' 下一步,添加axagent控件這個(gè)請(qǐng)參考拙作《走近vb.net(九) axagent動(dòng)畫窗體的實(shí)現(xiàn)》

' 設(shè)置窗體背景圖片為sk1.gif 請(qǐng)?jiān)?backgroundimage 屬性欄設(shè)置

' 所有需要的圖片用photoshop做出來,如果你不會(huì)做可到《vb.net中文論壇》去找我?guī)湍阕觥?br>
' 設(shè)置lbexit的text屬性(指在標(biāo)簽上顯示的文本)為“退出”

' 設(shè)置lbpre的text屬性(指在標(biāo)簽上顯示的文本)為“窗體”

' 設(shè)置lbshow的text屬性(指在標(biāo)簽上顯示的文本)為“動(dòng)畫”

' 設(shè)置所有l(wèi)abel的 textalign(文本的排列方式)為center(居中)



option strict off '關(guān)閉option strict

imports system.componentmodel '引用族名

imports system.drawing '引用族名

imports system.winforms '引用族名



public class form1

inherits system.winforms.form '繼承一個(gè)窗體的類

dim genie as agentobjects.iagentctlcharacterex '聲明一個(gè)agent的對(duì)象

const datapath as string = "merlin.acs" '加載動(dòng)畫數(shù)據(jù)

public frmpre as form1 '聲明一個(gè)新的窗體,請(qǐng)不要在這里使用初始化的方法或使用new方法

public imindex as short '聲明一個(gè)整數(shù)

public overloads sub new() '每一個(gè)類一般都有一個(gè)new過程,在新建一個(gè)對(duì)象(使用new方法)時(shí)調(diào)用

mybase.new() '直接調(diào)用父類的new過程

form1 = me '設(shè)定me關(guān)鍵字

initializecomponent() '下面是初始化組件,你也可以在下面使用call方法呼叫一個(gè)子過程(見前面的文章)

axagent1.characters.load("merlin", datapath) '裝載動(dòng)畫數(shù)據(jù)

genie = axagent1.characters("merlin") '把a(bǔ)gent對(duì)象賦于聲明的對(duì)象,簡(jiǎn)化書寫的過程

genie.languageid = &h409s '設(shè)定語音id

call skinregion(form1) '為窗體改變skin(外觀)

end sub

overloads sub new(byval strimage as string)

mybase.new() '直接調(diào)用父類的new過程

form1 = me '設(shè)定me關(guān)鍵字

initializecomponent() '下面是初始化組件,你也可以在下面使用call方法呼叫一個(gè)子過程(見前面的文章)

lbexit.visible = false : lbshow.visible = false : lbpre.visible = false : label3.visible = false '新窗體不顯示控制

me.top = me.top + 150 '新窗體的位置,top是距離屏幕頂部的高度

call skinregion(form1, strimage) '為窗體改變skin(外觀)

end sub

'上面使用overloads定義了兩個(gè)不同的new過程,在new過程中使用重載可以間接地使一個(gè)類產(chǎn)生很好的可重用性,如果你不明白為什么不寫一個(gè)新的過程,而一定要使用重載

'那么你看看這里的用法,一定會(huì)有所啟發(fā)的。

public overrides sub dispose() '釋放資源,終止程序

mybase.dispose() '調(diào)用父類的方法

region1.dispose() '釋放gdi資源

genie = nothing '釋放動(dòng)畫占用的資源

components.dispose() '釋放組件占用的資源

end sub

'下面的是非編輯模塊,就不用看了

#region " windows form designer generated code "



'required by the windows form designer

private components as system.componentmodel.container

private withevents lbshow as system.winforms.label

private withevents label3 as system.winforms.label

private withevents linklabel3 as system.winforms.linklabel

private withevents lbexit as system.winforms.label

private withevents lbpre as system.winforms.label

private withevents axagent1 as axagentobjects.axagent

dim withevents form1 as system.winforms.form

'note: the following procedure is required by the windows form designer

'it can be modified using the windows form designer.

'do not modify it using the code editor.

private sub initializecomponent()

dim resources as system.resources.resourcemanager = new system.resources.resourcemanager(gettype(form1))



me.components = new system.componentmodel.container()

me.lbpre = new system.winforms.label()

me.lbshow = new system.winforms.label()

me.label3 = new system.winforms.label()

me.axagent1 = new axagentobjects.axagent()

me.linklabel3 = new system.winforms.linklabel()

me.lbexit = new system.winforms.label()



axagent1.begininit()



'@design me.trayheight = 90

'@design me.traylargeicon = false

'@design me.trayautoarrange = true

lbpre.location = new system.drawing.point(32, 72)

lbpre.text = "窗體"

lbpre.size = new system.drawing.size(64, 24)

lbpre.tabindex = 10

lbpre.backcolor = system.drawing.systemcolors.desktop

lbpre.textalign = system.winforms.horizontalalignment.center



lbshow.location = new system.drawing.point(32, 24)

lbshow.text = "動(dòng)畫"

lbshow.size = new system.drawing.size(64, 24)

lbshow.tabindex = 17

lbshow.backcolor = system.drawing.systemcolors.desktop

lbshow.textalign = system.winforms.horizontalalignment.center



label3.location = new system.drawing.point(176, 16)

label3.text = " "

label3.size = new system.drawing.size(176, 88)

label3.borderstyle = system.winforms.borderstyle.fixed3d

label3.tabindex = 16



axagent1.size = new system.drawing.size(56, 40)

axagent1.ocxstate = ctype(resources.getobject("axagent1.ocxstate"), system.winforms.axhost.state)

axagent1.tabindex = 1

axagent1.location = new system.drawing.point(232, 216)



linklabel3.text = "linklabel3"

linklabel3.size = new system.drawing.size(0, 16)

linklabel3.tabindex = 15

linklabel3.tabstop = true

linklabel3.location = new system.drawing.point(352, 88)



lbexit.location = new system.drawing.point(32, 48)

lbexit.text = "退出"

lbexit.size = new system.drawing.size(64, 24)

lbexit.tabindex = 11

lbexit.backcolor = system.drawing.systemcolors.desktop

lbexit.textalign = system.winforms.horizontalalignment.center



me.text = "form1"

me.autoscalebasesize = new system.drawing.size(6, 14)

me.borderstyle = system.winforms.formborderstyle.none

me.backgroundimage = ctype(resources.getobject("$this.backgroundimage"), system.drawing.image)

me.clientsize = new system.drawing.size(392, 288)



me.controls.add(lbshow)

me.controls.add(label3)

me.controls.add(linklabel3)

me.controls.add(lbexit)

me.controls.add(lbpre)

me.controls.add(axagent1)



axagent1.endinit()

end sub



#end region

'上面的是非編輯模塊,就不用看了

protected sub lbexit_click(byval sender as object, byval e as system.eventargs)

if frmpre <> nothing then '如果加載了新窗體

frmpre.dispose() '終止新窗體

frmpre = nothing '釋放占用的資源

end if

me.dispose() '終止程序

end '徹底終止程序(如果程序無法退出,請(qǐng)使用此關(guān)鍵字)

end sub





'下面是動(dòng)畫過程,在前面的文章中很詳細(xì),可以不用看了!

protected sub lbshow_click(byval sender as object, byval e as system.eventargs)

genie.left = 500 '設(shè)定agent的位置

genie.show() '使用show方法顯示agent

genie.moveto(12, 180) 'moveto方法是移動(dòng)agent到一個(gè)位置,如果加上定時(shí)器,你可以很容易地讓他在屏幕上 亂跑()

messagebox.show("如果你是mm,請(qǐng)按ctrl+alt+del關(guān)閉 " & chr(10) & chr(13) & "您真的要繼續(xù)嗎, 等到我不 動(dòng)再說!")

genie.speak("ni hao") '發(fā)出聲音

messagebox.show("你好") '對(duì)話框,更多的參數(shù)請(qǐng)看以前的相關(guān)文章

genie.speak("wo shi hao kan di") '發(fā)出聲音

messagebox.show("我是好看的") '對(duì)話框,更多的參數(shù)請(qǐng)看以前的相關(guān)文章

genie.speak("ni shi nan kan di") '發(fā)出聲音

messagebox.show("你是難看的") '對(duì)話框,更多的參數(shù)請(qǐng)看以前的相關(guān)文章

genie.speak("zia jie mimi ") '發(fā)出聲音

messagebox.show("再見 mm") '對(duì)話框,更多的參數(shù)請(qǐng)看以前的相關(guān)文章

genie.play("wave") '揮手致意

'眾mm請(qǐng)勿生氣

'上面是開一個(gè)小玩笑,如果要真正的讀中文,就用下面的

'genie.speak("cnstring ",cnstring.wav) '這里的cnstring就是中文的語音文件

genie.hide() '使用hide方法隱藏agent

end sub



protected sub lbpre_click(byval sender as object, byval e as system.eventargs)

if frmpre <> nothing then frmpre.dispose() '如果新窗體已經(jīng)存在,清除之

dim strim as string '定義一個(gè)字符類型變量

if imindex <> 6 then '反過來想,就是說如果到了6就從頭開始,因這我只有這么幾張圖片了

imindex = imindex + 1

else

imindex = 1 '從頭開始

end if

strim = "sk" & imindex.tostring 'tostring的意思是從字符類型轉(zhuǎn)為數(shù)字類型

'在vb.net中l(wèi)abel控件有image控件一樣的作用,不但可以顯示文本而且可以顯示圖片,而在vb6中是只能顯示圖片的

label3.image = label3.image.fromfile(system.winforms.application.startuppath & "/" & strim & ".gif") 'formfile是從一個(gè)路徑裝載圖片

'system.winforms.application.startuppath的意思是當(dāng)前目錄,同vb6中的app.path

'請(qǐng)注意調(diào)試過程中使用的當(dāng)前目錄是在bin目錄下,在下一個(gè)版本有可能更改

frmpre = new form1(strim) '初始化一個(gè)實(shí)例(對(duì)象)

frmpre.visible = true '顯示新窗體,如果沒有這個(gè)只怕你什么也看不到!

end sub







'下面是移動(dòng)窗體的代碼,請(qǐng)參考前面的文章

private sub form1_mousedown(byval eventsender as system.object, byval eventargs as system.winforms.mouseeventargs)

me.capture = false '釋放鼠標(biāo)捕獲

me.sendmessage(&ha1s, 2, 0) '這是vb6中最有名的api消息函數(shù)

end sub

'下面是鼠標(biāo)移動(dòng)_mousemove時(shí)發(fā)生的事件了

public sub lbpre_mousemove(byval sender as object, byval e as system.winforms.mouseeventargs) handles lbpre.mousemove

lbpre.backcolor = system.drawing.color.black '設(shè)置顏色

lbpre.forecolor = system.drawing.color.aliceblue '設(shè)置顏色

end sub

public sub lbexit_mousemove(byval sender as object, byval e as system.winforms.mouseeventargs) handles lbexit.mousemove

lbexit.backcolor = system.drawing.color.black '設(shè)置顏色

lbexit.forecolor = system.drawing.color.aliceblue '設(shè)置顏色

end sub

public sub lbshow_mousemove(byval sender as object, byval e as system.winforms.mouseeventargs) handles lbshow.mousemove

lbshow.backcolor = system.drawing.color.black '設(shè)置顏色

lbshow.forecolor = system.drawing.color.aliceblue '設(shè)置顏色

end sub

'下面是鼠標(biāo)按下_mousemove時(shí)發(fā)生的事件了

public sub lbpre_mousedown(byval sender as object, byval e as system.winforms.mouseeventargs) handles lbpre.mousedown

lbpre.backcolor = system.drawing.color.blue '設(shè)置顏色

lbpre.forecolor = system.drawing.color.aliceblue '設(shè)置顏色

end sub

public sub lbexit_mousedown(byval sender as object, byval e as system.winforms.mouseeventargs) handles lbexit.mousedown

lbexit.backcolor = system.drawing.color.blue '設(shè)置顏色

lbexit.forecolor = system.drawing.color.aliceblue '設(shè)置顏色

end sub

public sub lbshow_mousedown(byval sender as object, byval e as system.winforms.mouseeventargs) handles lbshow.mousedown

lbshow.backcolor = system.drawing.color.blue '設(shè)置顏色

lbshow.forecolor = system.drawing.color.aliceblue '設(shè)置顏色

end sub



public sub lbpre_mouseup(byval sender as object, byval e as system.winforms.mouseeventargs) handles lbpre.mouseup

lbpre.backcolor = system.drawing.color.black '設(shè)置顏色

lbpre.forecolor = system.drawing.color.aliceblue '設(shè)置顏色

end sub

public sub lbexit_mouseup(byval sender as object, byval e as system.winforms.mouseeventargs) handles lbexit.mouseup

lbexit.backcolor = system.drawing.color.black '設(shè)置顏色

lbexit.forecolor = system.drawing.color.aliceblue '設(shè)置顏色

end sub

public sub lbshow_mouseup(byval sender as object, byval e as system.winforms.mouseeventargs) handles lbshow.mouseup

lbshow.backcolor = system.drawing.color.black '設(shè)置顏色

lbshow.forecolor = system.drawing.color.aliceblue '設(shè)置顏色

end sub

'下面是鼠標(biāo)離開_mouseleave時(shí)發(fā)生的事件了

public sub lbshow_mouseleave(byval sender as object, byval e as system.eventargs) handles lbshow.mouseleave

lbshow.backcolor = system.drawing.color.blanchedalmond '設(shè)置顏色

lbshow.forecolor = system.drawing.color.black '設(shè)置顏色

end sub

public sub lbexit_mouseleave(byval sender as object, byval e as system.eventargs) handles lbexit.mouseleave

lbexit.backcolor = system.drawing.color.blanchedalmond '設(shè)置顏色

lbexit.forecolor = system.drawing.color.black '設(shè)置顏色

end sub

public sub lbpre_mouseleave(byval sender as object, byval e as system.eventargs) handles lbpre.mouseleave

lbpre.backcolor = system.drawing.color.blanchedalmond '設(shè)置顏色

lbpre.forecolor = system.drawing.color.black '設(shè)置顏色

end sub

end class



'###################################################################################################################

'!!!0001!!!04!!!26!!!!!!

'建議不要修改此模塊 以免產(chǎn)生不必要的錯(cuò)誤(此代碼已相當(dāng)完美) 如欲修改請(qǐng)先備份 _______vb.net中文站 hejianzhong

'此模塊可真接粘貼到您的程序中使用。

'不要?jiǎng)h除此信息,我免費(fèi)為您提供此代碼,想得到的回報(bào)就是最起碼的尊重,雖然最終用戶并不能看到,我仍感到欣慰

'!!!0001!!!04!!!26!!!!!!

public module skin

public rect1 as new rectangle(0, 0, 0, 0)

public region1 as new system.drawing.region(rect1)

public sub skinregion(byval skform as form, optional byval skinnaskform as string = nothing)

dim x, y, transpix, opacipix, bgwidth, bgheight as integer

dim rect2 as new rectangle()

dim firargb as integer = getpixel(skform, 1, 1)

dim region1 as new system.drawing.region(rect1)

rect1 = nothing

'skform.visible = false

if skinnaskform <> nothing then skform.backgroundimage = skform.backgroundimage.fromfile(system.winforms.application.startuppath & "/" & skinnaskform & ".gif")

bgwidth = skform.backgroundimage.width

bgheight = skform.backgroundimage.height

skform.height = bgheight

skform.width = bgwidth

for y = 1 to bgheight - 1 '這里參考了vb6中的掃描方法,請(qǐng)參考相關(guān)資料

x = 0

do

x = x + 1

while (getpixel(skform, x, y) = firargb) and (x < bgwidth)

x = x + 1

end while

transpix = x

while (getpixel(skform, x, y) <> firargb) and (x < bgwidth)

x = x + 1

end while

opacipix = x - 1

if transpix <= opacipix then

rect2 = rect2.fromltrb(transpix - 1, y - 1, opacipix, y)

region1.union(rect2)

rect2 = nothing

end if

loop until x >= bgwidth

next y

skform.region = region1

skform.refresh()

'skform.visible = true

end sub

public function getpixel(byval skform as form, byval x as integer, byval y as integer) as integer

dim pm as bitmap = skform.backgroundimage

try

return pm.getpixel(x, y).toargb

catch

exit function

end try

end function

end module

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永州市| 边坝县| 化隆| 遂溪县| 汽车| 宜兴市| 广平县| 娄烦县| 体育| 上林县| 辽宁省| 津南区| 永城市| 大荔县| 色达县| 永德县| 错那县| 泰州市| 永济市| 峨山| 砚山县| 中山市| 凤凰县| 昌邑市| 响水县| 博乐市| 金堂县| 深泽县| 望奎县| 镇坪县| 肃宁县| 宜丰县| 黔江区| 香港| 无为县| 民乐县| 思茅市| 海丰县| 深水埗区| 土默特左旗| 通城县|