?? soft1.htm
字號:
'記錄結束位置<br>
Ma.Ex = x<br>
'記錄區域的塊數<br>
n = n + 1<br>
'記錄區域的Y軸的開始位置<br>
Ma.Sy = y<br>
'因為矩形區域是線形的,所以Y軸的結束位置是在開始<br>
'的Y軸加上1<br>
Ma.Ey = y + 1<br>
'把所測到的窗體數據存放入數據文件<br>
Put #1, n, Ma<br>
'變量化0<br>
Ma.Sx = 0<br>
Ma.Ex = 0<br>
Ma.Ey = 0<br>
Ma.Sy = 0<br>
End If<br>
Next x<br>
Next y<br>
'提示完成圖像掃描<br>
MsgBox "完成圖像掃描" & Chr(13) & "數據文件大小為:"
& LOF(1) & "字節"<br>
<br>
'關閉文件<br>
Close #1<br>
End Sub<br>
<br>
Private Sub 背景色_Click(Index As Integer)<br>
'設置背景色<br>
'將打上選擇的符號取消<br>
For i = 0 To 15<br>
背景色(i).Checked = False<br>
Next<br>
'將被子點擊到的選項加上符號<br>
背景色(Index).Checked = True<br>
'背景色的號碼為<br>
顏色 = Index<br>
End Sub<br>
<br>
Private Sub 關閉_Click()<br>
'關閉生成器程序<br>
Unload Me<br>
End Sub<br>
<br>
'加載圖像的設置<br>
'通用型對話框控件屬性Flags為&H1001<br>
'Filter為圖像文件 *.bmp,*.jpg,*.gif,*.ico,*.wmf等<br>
'將通用型對話框控件屬性ComcelError 設為True<br>
<br>
Private Sub 加載圖像_Click()<br>
'當在對話框上按下取消時,不加載圖像<br>
On Error GoTo Er<br>
' 設置打開文件的類型<br>
CommonDialog1.Filter = "位圖(*.bmp),Jpg文件|*.bmp;*.jpg"<br>
CommonDialog1.ShowOpen<br>
'把圖像加載到窗體和圖片框上<br>
Picture1.Picture = LoadPicture(CommonDialog1.FileName)<br>
Form1.Picture = Picture1.Picture<br>
Er:<br>
End Sub<br>
<br>
運行這個程序,單擊“開始”菜單,該程序就會掃描圖像,并且生成了一個區域描數據文件---D:\ma.dat。下面就可以用這個文件來生成不規則窗體了。</p>
<p><strong><font size="4">建立一個</font><font color="#FF0000" size="4">新</font><font
size="4">工程</font></strong>,只要窗體加載掃描的圖像把窗體的大小調到和圖像一這大小就可以,并把BorderStyle
設置為0 'None。只要程序一運行,窗體立既變成不規則的。不過數據文件要在這個新工程同個目錄中。</p>
<p>'在程序中加入模塊Module1.bas,在模塊中輸入代碼為:</p>
<p>'聲明API函數<br>
'Createrectrgn為創建一個由點X1,Y1和X2,Y2描述的矩形區域<br>
'因為窗體是由一個個矩形組成的<br>
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As
Long, ByVal X2 As Long, ByVal Y2 As Long) As Long<br>
'Combinergn將兩個區域組合為一個新區域<br>
'把一個個矩形合為一個新的區域<br>
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal
hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long<br>
'做一個古怪的窗口必須要用的也是那個程序中最重要的一個函數就是SetWindowRgn<br>
'它的功能就是對指定的窗口進行重畫,把這個窗口你選擇的部分留下<br>
'其余的部分抹掉。<br>
'參數:hWnd:你所要重畫的窗口的句柄,比如你想重畫form1<br>
'則應該讓此參數為form1.hWnd<br>
' hRgn:你要保留的區域的句柄,這個句柄是關鍵,你需要通過別的渠道來獲得<br>
'在這里的區域是由Combinergn合成的新區域<br>
' bRedram:是否要馬上重畫,一般設為true<br>
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal
hRgn As Long, ByVal bRedraw As Boolean) As Long<br>
'用這個函數刪除GDI對象,比如畫筆、刷子、字體、位圖、區域以及調色板等等。對象使用的所有系統資源都會被釋放<br>
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long<br>
<br>
Type Dat '自定義類型<br>
'為了和坐標配合,把變量設置為整數型<br>
sx As Integer '存掃描頭次遇到非背景色的X坐標<br>
ex As Integer '存掃描非背景色結束的X坐標<br>
sy As Integer 'Y坐標的開始<br>
ey As Integer 'Y坐標的結束<br>
End Type<br>
<br>
<br>
’在窗體中輸入的代碼為:</p>
<p>'鼠標位置的變量<br>
Dim mX As Integer<br>
Dim mY As Integer<br>
'rgn1 和 rgn2 是存放區域的變量<br>
<br>
Private Sub Form_Load()<br>
<br>
Dim Ma As Dat<br>
Show<br>
'打開不規則窗體的數據文件,隨機文件方式<br>
'****注意"MA.dat"要在本程序的目錄內***<br>
'不然App.Path要改為"Ma.dat"所在的目錄<br>
'如果找不到窗體數據有可能窗體會看不到<br>
Open App.Path & "\Ma.dat" For Random As #1 Len = Len(Ma)<br>
'循環讀取 Ma.dat 的數據<br>
'只要遇到文件尾結束讀取數據<br>
Do While Not EOF(1)<br>
'N 為讀取數據的數據指針<br>
n = n + 1<br>
'讀取第n個<br>
Get #1, n, Ma<br>
'rgn1區域變量沒有存放區域數據時,存放頭個矩形區域<br>
If rgn1 = 0 Then rgn1 = CreateRectRgn(Ma.sx, Ma.sy, Ma.ex, Ma.ey)<br>
'rgn1變量以有存放數據時,把其它矩形區域數據存放在rgn2中<br>
If rgn1 <> 0 Then<br>
rgn2 = CreateRectRgn(Ma.sx, Ma.sy, Ma.ex, Ma.ey)<br>
'把兩個矩形區域合成一個并存放在rgn1中<br>
CombineRgn rgn1, rgn1, rgn2, 2<br>
'釋放系統資源<br>
DeleteObject rgn2<br>
End If<br>
Loop<br>
'關閉文件<br>
Close #1<br>
'生成窗體數據文件所設置成的窗體<br>
'創建不規則窗體------“完工”。<br>
'一個絕世的窗體降臨 ^_^ ,在你的手中創生<br>
SetWindowRgn hWnd, rgn1, True<br>
DeleteObject rgn1<br>
End Sub<br>
<br>
'***********************************************<br>
'以下程序是為了窗體少的標題欄沒法移動窗體,<br>
'所設計的與不規則窗體 沒有大關系的程序----窗體移動<br>
'*********************************<br>
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)<br>
'當鼠標單擊按下時,把當前鼠標的位置存放在變量<br>
'左鈕單擊<br>
If Button = 1 Then<br>
mX = X '存放X軸<br>
mY = Y<br>
End If<br>
End Sub<br>
<br>
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)<br>
'當鼠標單擊后移動時,窗體跟著移動<br>
If Button = 1 Then<br>
Form1.Move Form1.Left - mX + X, Form1.Top - mY + Y<br>
End If<br>
End Sub<br>
'********************************<br>
<br>
'注:由于窗體移后會留下影子,這可能是正常現象<br>
'由有什么意見請來信 xxlno2@yeah.net<br>
'記住---我永遠是你的朋友 XXLno2</p>
<p>現在,程序完工了,點一下“運行”,只要你的圖像做得好,那你的窗體就會變得很好看。如果你是游戲玩家的話,把電玩里面的東西變成窗體時,那會怎么樣呢?星際的“小狗”怎樣?</p>
<p>我等侍你的好消息,把你的窗體都變成世上的絕品吧?。。?!
》》》》》<a href="soft2.htm">下載源程序</a></p>
<p> </p>
<p>作者:<a href="mailto:xxlno2@yeah.net">XXLno2</a></p>
<p> </p>
<p><a href="http://xxlno2vb.yeah.net">小亮VB天地</a>版權所有 有什么問題請<a
href="mailto:xlvb@yeah.net">與我聯系</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -