Powered By Blogger

關於我自己

我的相片
網站經營斷斷續續,現在以分享程式練習為主。 因為工作需要,不時會有練習程式的需要。 所以將自己練習的過程分享給大家。 如果有幫助到各位,那就太好了! 如果針對本人或網站內容有任何問題, 歡迎與我聯絡。

2020年7月28日 星期二

【VB6】PictureBox Control 練習

居裡貓最近因為一些事情有了這次練習的機會,
我才知道 VB6 下的 PictureBox 有兩種不同的屬性可以取得 PictureBox 上面的影像!
分別是 Pictrue 和 Image!
那接著就開始練習吧! 
因為這個 VB6 居裡貓的使用經驗不多,所以在這次事件中才發現有這兩種不同的屬性,
在這裡練一下,幫助自己增加記憶點!

接著簡單說明一下這次練習的內容物跟使用方法大概是什麼樣的狀況。
首先居裡貓建立了一個 form 裡面包含了三個 PictureBox ,
這三個 PictureBox 的目的主要是:
1. 原始的 PictureBox:負責裝載所有的影像。
2. Picture 屬性的 PictureBox:負責裝載來自原始 PictureBox 上的 Picture 屬性資訊。
3. Image 屬性的 PictureBox:負責裝載來自原始 PictureBox 上的 Image 屬性資訊。

再來是兩個主要產生影像的方法:
1. Load Picture:使用 LoadPicture 方法載入一張影像。
2. Draw Picture:使用 PictureBox.Line 方法話出影像。

另外還有:
1. Save Picture:儲存原始 PictureBox 的 Picture 屬性資訊。
2. Save Image:儲存原始 PictureBox 的 Image 屬性資訊。
3. Get PictureBox.Pictrue:取得原始 PictureBox 的 Picture 屬性資訊,並繪製在新的 PictureBox 上。
4. Get PictureBox.Image:取得原始 PictureBox 的 Image 屬性資訊,並繪製在新的 PictureBox 上。

接下來就讓我們看一下實際的畫面吧!!


上圖就是本次練習的畫面。
現在的狀態是有特別的操作手法而得到的狀態。
先是按下 Draw Picture 後,再按下 Get PictrueBox.Image。
接著按下 Load Pictrue 後,再按下 Draw Picture 後,再按下 Get PictureBox.Pictrue。
經過這樣特別的手順才會得到這樣的狀態。

看到這裡的人會覺得,你在幹麻,為什麼要稿這麼麻煩的操作。
那先等一下阿!!!!請看一下下面另一張圖。


看到了嘛?
上面這一張圖 Get PictureBox.Image 取得了原始 PictureBox 中的所有影像資訊。
這就是本次居裡貓一個比較特別的發現,這兩個屬性在代表上有這樣的差異。
所以在存下來的影像當然也會是不一樣的影像。

接下來就看看存下來的影像分別是什麼吧!


上面這張就是 Picture 屬性存下來的圖片,基本上就是你給他什麼影像,
你就可以存下什麼影像。



上面兩張圖分別是第一次狀態、第二次狀態存下來的 Image 屬性。
這樣就可以大致上了解到這兩個屬性的差異性了。

接著讓我們看一下 DeBug 的畫面吧!
藉由 DeBug 讓我們看看這兩個屬性在得到影像的前後差別分別是什麼,
這樣應該會更有感覺喔!


上面這張是準備要使用 Draw Pictrue 按鈕來產生影像。
程式碼部份停留在 DrawRectangle 還沒執行繪圖的動作,
Image 屬性已經有自己相關的資訊了。Picture 反之。


上面這張圖已經執行完 Draw Pictrue 按鈕產生影像的動作。
在 Image 屬性上並看不出有什麼變化,這裡居裡貓就不專業的解說,
這個 Image 屬性大概就是一開始就存在的記憶體位置,所以我們只是塞了值給他,
所以這樣的方法是看不出有什麼不一樣的。
至於 Picture 依然沒有變化。


上圖是準備要執行 Load Picture 按鈕產生影像。
程式碼部份停留在 LoadImage 還沒執行繪製影像的動作。
Image 屬性依然是同樣的狀態,Picture 亦同。


上圖已經執行完 LoadImage 按鈕產生影像的動作。
在這裡觀察到了什麼嘛?
Image 的 Handle 改變了,而 Picture 裡面資訊也全部多更新了。
看到這裡有沒有更有感覺了呢?

總結一下整個過程,
Image 利用 PictureBox.Line 方法產生,並不會有實質上的從屬性資訊看到變化。
Picture 利用 LoadPicture 方法產生,會看到實質上的屬性資訊變化。

Picture 屬性的影像不會跟 Image 屬性的影像有直接的影響。
Image 屬性的影像會跟 Picture 屬性的影像有直接的影響。

這次居裡貓的練習就到這裡結束。
未來有要使用到 VB6 中 PictureBox Control 的朋友,希望這篇文章可以幫到你。
希望這次的練習分享你們會喜歡。


底下是相關的程式碼:
----------------------------------------------------------------------------------------------------------------------------

Form 的部份:


  1. VERSION 5.00  
  2. Begin VB.Form frmPictureBoxControlPractice   
  3.    Caption         =   "PicturebBox Control Practice"  
  4.    ClientHeight    =   10065  
  5.    ClientLeft      =   60  
  6.    ClientTop       =   450  
  7.    ClientWidth     =   17445  
  8.    LinkTopic       =   "Form1"  
  9.    ScaleHeight     =   10065  
  10.    ScaleWidth      =   17445  
  11.    StartUpPosition =   3  'Windows Default  
  12.    Begin VB.CommandButton cndSaveImage   
  13.       Caption         =   "Save Image"  
  14.       BeginProperty Font   
  15.          Name            =   "MS Sans Serif"  
  16.          Size            =   13.5  
  17.          Charset         =   0  
  18.          Weight          =   400  
  19.          Underline       =   0   'False  
  20.          Italic          =   0   'False  
  21.          Strikethrough   =   0   'False  
  22.       EndProperty  
  23.       Height          =   975  
  24.       Left            =   3480  
  25.       TabIndex        =   11  
  26.       Top             =   7440  
  27.       Width           =   2175  
  28.    End  
  29.    Begin VB.CommandButton cmdSavePicture   
  30.       Caption         =   "Save Picture"  
  31.       BeginProperty Font   
  32.          Name            =   "MS Sans Serif"  
  33.          Size            =   13.5  
  34.          Charset         =   0  
  35.          Weight          =   400  
  36.          Underline       =   0   'False  
  37.          Italic          =   0   'False  
  38.          Strikethrough   =   0   'False  
  39.       EndProperty  
  40.       Height          =   975  
  41.       Left            =   240  
  42.       TabIndex        =   10  
  43.       Top             =   7440  
  44.       Width           =   2175  
  45.    End  
  46.    Begin VB.CommandButton cmdDrawPicture   
  47.       Caption         =   "Draw Picture"  
  48.       BeginProperty Font   
  49.          Name            =   "MS Sans Serif"  
  50.          Size            =   13.5  
  51.          Charset         =   0  
  52.          Weight          =   400  
  53.          Underline       =   0   'False  
  54.          Italic          =   0   'False  
  55.          Strikethrough   =   0   'False  
  56.       EndProperty  
  57.       Height          =   975  
  58.       Left            =   3480  
  59.       TabIndex        =   9  
  60.       Top             =   6240  
  61.       Width           =   2175  
  62.    End  
  63.    Begin VB.CommandButton cmdLoadPicture   
  64.       Caption         =   "Load Picture"  
  65.       BeginProperty Font   
  66.          Name            =   "MS Sans Serif"  
  67.          Size            =   13.5  
  68.          Charset         =   0  
  69.          Weight          =   400  
  70.          Underline       =   0   'False  
  71.          Italic          =   0   'False  
  72.          Strikethrough   =   0   'False  
  73.       EndProperty  
  74.       Height          =   975  
  75.       Left            =   240  
  76.       TabIndex        =   8  
  77.       Top             =   6240  
  78.       Width           =   2175  
  79.    End  
  80.    Begin VB.CommandButton cmdGetPictureBoxdotImage   
  81.       Caption         =   "Get PictureBox.Image"  
  82.       BeginProperty Font   
  83.          Name            =   "MS Sans Serif"  
  84.          Size            =   18  
  85.          Charset         =   0  
  86.          Weight          =   400  
  87.          Underline       =   0   'False  
  88.          Italic          =   0   'False  
  89.          Strikethrough   =   0   'False  
  90.       EndProperty  
  91.       Height          =   975  
  92.       Left            =   12480  
  93.       TabIndex        =   7  
  94.       Top             =   6240  
  95.       Width           =   4455  
  96.    End  
  97.    Begin VB.CommandButton cmdGetPictureBoxdotPicture   
  98.       Caption         =   "Get PictureBox.Picture"  
  99.       BeginProperty Font   
  100.          Name            =   "MS Sans Serif"  
  101.          Size            =   18  
  102.          Charset         =   0  
  103.          Weight          =   400  
  104.          Underline       =   0   'False  
  105.          Italic          =   0   'False  
  106.          Strikethrough   =   0   'False  
  107.       EndProperty  
  108.       Height          =   975  
  109.       Left            =   6480  
  110.       TabIndex        =   6  
  111.       Top             =   6240  
  112.       Width           =   4455  
  113.    End  
  114.    Begin VB.PictureBox pbImage   
  115.       Height          =   4935  
  116.       Left            =   11760  
  117.       ScaleHeight     =   4875  
  118.       ScaleWidth      =   5355  
  119.       TabIndex        =   2  
  120.       Top             =   1080  
  121.       Width           =   5415  
  122.    End  
  123.    Begin VB.PictureBox pbPicture   
  124.       Height          =   4935  
  125.       Left            =   6000  
  126.       ScaleHeight     =   4875  
  127.       ScaleWidth      =   5355  
  128.       TabIndex        =   1  
  129.       Top             =   1080  
  130.       Width           =   5415  
  131.    End  
  132.    Begin VB.PictureBox pbOrignal   
  133.       Height          =   4935  
  134.       Left            =   240  
  135.       ScaleHeight     =   4875  
  136.       ScaleWidth      =   5355  
  137.       TabIndex        =   0  
  138.       Top             =   1080  
  139.       Width           =   5415  
  140.    End  
  141.    Begin VB.Label lblPictureBoxdotImage   
  142.       Caption         =   "PictureBox.Image"  
  143.       BeginProperty Font   
  144.          Name            =   "MS Sans Serif"  
  145.          Size            =   19.5  
  146.          Charset         =   0  
  147.          Weight          =   400  
  148.          Underline       =   0   'False  
  149.          Italic          =   0   'False  
  150.          Strikethrough   =   0   'False  
  151.       EndProperty  
  152.       Height          =   495  
  153.       Left            =   11760  
  154.       TabIndex        =   5  
  155.       Top             =   600  
  156.       Width           =   5415  
  157.    End  
  158.    Begin VB.Label lblPictureBoxdotPicture   
  159.       Caption         =   "PictureBox.Picture"  
  160.       BeginProperty Font   
  161.          Name            =   "MS Sans Serif"  
  162.          Size            =   19.5  
  163.          Charset         =   0  
  164.          Weight          =   400  
  165.          Underline       =   0   'False  
  166.          Italic          =   0   'False  
  167.          Strikethrough   =   0   'False  
  168.       EndProperty  
  169.       Height          =   495  
  170.       Left            =   6000  
  171.       TabIndex        =   4  
  172.       Top             =   600  
  173.       Width           =   5415  
  174.    End  
  175.    Begin VB.Label lblOrginalPictureBox   
  176.       Caption         =   "Orignal PictureBox"  
  177.       BeginProperty Font   
  178.          Name            =   "MS Sans Serif"  
  179.          Size            =   19.5  
  180.          Charset         =   0  
  181.          Weight          =   400  
  182.          Underline       =   0   'False  
  183.          Italic          =   0   'False  
  184.          Strikethrough   =   0   'False  
  185.       EndProperty  
  186.       Height          =   495  
  187.       Left            =   240  
  188.       TabIndex        =   3  
  189.       Top             =   600  
  190.       Width           =   5415  
  191.    End  
  192. End  
  193. Attribute VB_Name = "frmPictureBoxControlPractice"  
  194. Attribute VB_GlobalNameSpace = False  
  195. Attribute VB_Creatable = False  
  196. Attribute VB_PredeclaredId = True  
  197. Attribute VB_Exposed = False  
  198. '' ============================================================  
  199. '' This is pictrue box control form.  
  200. '' Have some simply function for picturebox control practice.  
  201. ''  
  202. '' Writer is J.Y.L by 2020/07/24  
  203. '' ============================================================  
  204.   
  205. Option Explicit  
  206.   
  207. Dim ret As Boolean  
  208.   
  209. Private Sub cmdDrawPicture_Click()  
  210.     ret = DrawRectangle(pbOrignal, 2500, 2500, 4500, 4500, vbGreen)  
  211.     If ret = False Then MsgBox ("The DrawPicture is fail")  
  212. End Sub  
  213.   
  214. Private Sub cmdGetPictureBoxdotImage_Click()  
  215.     ret = GetImageIntoPictureBox(pbImage, pbOrignal.Image)  
  216.     If ret = False Then MsgBox ("The GetImageIntoPictureBox is fail")  
  217. End Sub  
  218.   
  219. Private Sub cmdGetPictureBoxdotPicture_Click()  
  220.     ret = GetPictureIntoPictureBox(pbPicture, pbOrignal.Picture)  
  221.     If ret = False Then MsgBox ("The GetPictureIntoPictureBox is fail")  
  222. End Sub  
  223.   
  224. Private Sub cmdLoadPicture_Click()  
  225.     ret = LoadImage(pbOrignal, App.Path & "\" & "TestPicture.jpg")  
  226.     If ret = False Then MsgBox ("The LoadPicture is fail")  
  227. End Sub  
  228.   
  229. Private Sub cmdSavePicture_Click()  
  230.     ret = SaveImage(pbOrignal.Picture, App.Path, "IsPicture.jpg")  
  231.     If ret = False Then MsgBox ("The SaveImage is fail")  
  232. End Sub  
  233.   
  234. Private Sub cndSaveImage_Click()  
  235.     ret = SaveImage(pbOrignal.Image, App.Path, "IsImage.jpg")  
  236.     If ret = False Then MsgBox ("The SaveImage is fail")  
  237. End Sub  
  238.   
  239. Private Sub Form_Load()  
  240.     '' down below will that draw image auto rewrok, is very important  
  241.     pbOrignal.AutoRedraw = True  
  242.     pbPicture.AutoRedraw = True  
  243.     pbImage.AutoRedraw = True  
  244. End Sub  

PictureBoxControl moudle 的部份:

  1. Attribute VB_Name = "mPictureBoxControl"  
  2. '' ============================================================  
  3. '' This is pictrue box control module.  
  4. '' Have some simply function for picturebox control practice.  
  5. ''  
  6. '' Writer is J.Y.L by 2020/07/24  
  7. '' ============================================================  
  8.   
  9. Option Explicit  
  10.   
  11.   
  12. Dim fs As New FileSystemObject  
  13.   
  14.   
  15. '' =================== Functions Area ===================  
  16.   
  17. '' pbObj is picturebox object that do draw line B  
  18. '' leftupX is rectangle left X point  
  19. '' leftupY is rectangle left Y point  
  20. '' rightdownX is rectangle right X point  
  21. '' rightdownY is rectangle right Y point  
  22. '' color is pen color  
  23. '' Return True is work success; False is work fail  
  24. Public Function DrawRectangle(ByVal pbObj As PictureBox, ByVal leftupX As DoubleByVal leftupY As DoubleByVal rightdownX As DoubleByVal rightdownY As Double, _  
  25. ByVal color As Long)  
  26.   
  27. On Error GoTo Err  
  28.   
  29.     pbObj.Line (leftupX, leftupY)-(rightdownX, rightdownY), color, B  
  30.       
  31.     DrawRectangle = True  
  32.       
  33.     Exit Function  
  34.       
  35. Err:  
  36.     DrawRectangle = False  
  37.     MsgBox ("DrawRectangle is fail" & vbCrLf & Err.Description)  
  38.       
  39. End Function  
  40.   
  41.   
  42. '' pbObj is picturebox object that do draw line B  
  43. '' filepath is will load image path  
  44. '' Return True is work success; False is work fail  
  45. Public Function LoadImage(ByVal pbObj As PictureBox, ByVal filepath As String)  
  46.   
  47. On Error GoTo Err  
  48.       
  49.     If (TypeName(fs) <> "FileSystemObject"Then Set fs = CreateObject("Scripting.FileSystemObject")  
  50.     If fs.FileExists(filepath) = False Then LoadImage = False: MsgBox ("The file is not exists with : " & filepath): Exit Function  
  51.       
  52.     pbObj.Picture = LoadPicture(filepath)  
  53.       
  54.     LoadImage = True  
  55.       
  56.     Exit Function  
  57.       
  58. Err:  
  59.     LoadImage = False  
  60.     MsgBox ("LoadImage is fail" & vbCrLf & Err.Description)  
  61.       
  62. End Function  
  63.       
  64.   
  65. '' img is picturebox display image  
  66. '' folderPath is will save file path, here will check folder exists and create it  
  67. '' filename is image file name, need have extensions  
  68. '' Return True is work success; False is work fail  
  69. Public Function SaveImage(Optional ByVal img As IPictureDisp, Optional ByVal folderPath As StringOptional ByVal filename As String)  
  70.   
  71. On Error GoTo Err  
  72.       
  73.     If (TypeName(fs) <> "FileSystemObject"Then Set fs = CreateObject("Scripting.FileSystemObject")  
  74.       
  75.     If folderPath = "" Then SaveImage = False: MsgBox ("The folder path is empty"): Exit Function  
  76.     If Right$(folderPath, 1) <> "\" Then folderPath = folderPath & "\"  
  77.       
  78.     If fs.FolderExists(folderPath) = False Then fs.CreateFolder (folderPath)  
  79.       
  80.     If img = 0 Or img.Type = 0 Then SaveImage = False: MsgBox ("The image is empty"): Exit Function  
  81.     If filename = "" Then SaveImage = False: MsgBox ("The file name is empty"): Exit Function  
  82.       
  83.       
  84.     Call SavePicture(img, folderPath & filename)  
  85.       
  86.     SaveImage = True  
  87.       
  88.     Exit Function  
  89.       
  90. Err:  
  91.     SaveImage = False  
  92.     MsgBox ("SaveImage is fail" & vbCrLf & Err.Description)  
  93.       
  94. End Function  
  95.   
  96.   
  97. '' pbObj is picturebox will show picturebox.picture  
  98. '' img is picturebox display image  
  99. '' Return True is work success; False is work fail  
  100. Public Function GetPictureIntoPictureBox(ByVal pbObj As PictureBox, ByVal img As IPictureDisp)  
  101.   
  102. On Error GoTo Err  
  103.       
  104.     pbObj.Picture = img  
  105.       
  106.     GetPictureIntoPictureBox = True  
  107.       
  108.     Exit Function  
  109.       
  110. Err:  
  111.     GetPictureIntoPictureBox = False  
  112.     MsgBox ("GetPictureIntoPictureBox is fail" & vbCrLf & Err.Description)  
  113.       
  114. End Function  
  115.   
  116.   
  117. '' pbObj is picturebox will show picturebox.image  
  118. '' img is picturebox display image  
  119. '' Return True is work success; False is work fail  
  120. Public Function GetImageIntoPictureBox(ByVal pbObj As PictureBox, ByVal img As IPictureDisp)  
  121.   
  122. On Error GoTo Err  
  123.       
  124.     '' pbObj.Image = img '' <= object doesn't support property or method  
  125.     pbObj.Picture = img  
  126.       
  127.     GetImageIntoPictureBox = True  
  128.       
  129.     Exit Function  
  130.       
  131. Err:  
  132.     GetImageIntoPictureBox = False  
  133.     MsgBox ("GetImageIntoPictureBox is fail" & vbCrLf & Err.Description)  
  134.       
  135. End Function  
  136.   
  137. '' =================== Functions Area ===================  

沒有留言:

張貼留言