2 Formen sollen nacheinander auf Webcam zugreifen

  • VB.NET

    2 Formen sollen nacheinander auf Webcam zugreifen

    EDIT: hat sich erledigt, lade jetzt einfach die Form und die Buttons die ich brauche mit

    VB.NET-Quellcode

    1. Form1.load
    2. form1.button1.visible = false
    3. form1.button2.visible = true
    4. usw...


    trotzdem danke fürs durchlesen..

    BITTE LÖSCHEN




    Hallo,

    ich hab im Moment eine Form die auf die Webcam zugreift und mir beim drücken des 1. Buttons 3 Bilder macht und beim drücken des 2. Buttons auch 3 Bilder macht. Jetzt soll das ganze nicht mehr in einer Form stehen sondern für jeden Button jeweils eine Form enstehen, um zu vermeiden das ausversehen der falsche Button angeklickt wird.



    Mein Problem ist das wenn ich die Form z.b einfach kopiere (also code und oberfläche), dann kommt folgende fehlermeldung:

    in Zeile 171:
    Fehler 1 class "Win32Api" und class "Win32Api", deklariert in "*********\****\Form1.vb", verursachen einen Konflikt in namespace "WindowsApplication1". ********\******\Form4.vb 278 14 WebCam_StandBild



    In Zeile 182:
    Fehler 2 Konstanten müssen einen systeminternen oder enumerierten Typ aufweisen, keinen Klassen-, Struktur-, Typparameter- oder Arraytyp. C:\Dokumente und Einstellungen\mbiberger.REEPC06\Desktop\testprojekt\WebCam_StandBild\Form4.vb 304 30 WebCam_StandBild


    ich vermute das Visual Basic den code nicht 2 mal zulassen will weil ja beide Forms auf genau die gleiche Webcam und auf die gleichen Applicationen zugreifen. Wie kann ich das Problem lösen?



    Oder ist es möglich, die Form abhängig vom Button mit dem sie aufgerufen wurde zu designen, also wenn ich mit button1 die form öffne, dann soll halt nur der eine Teil der Button in der Form sichtbar sein, und bei Button2 nur der andere teil, dann bräuchte ich keine 2 gleiche Forms und hätte das Problem auch nicht mehr?

    vielen dank für eure hilfe, bin echt froh euch zu haben

    Bibs

    hier noch mein code

    Spoiler anzeigen

    VB.NET-Quellcode

    1. 'Beispiel: VB .Net - Webcam ansprechen - Video anzeigen - Aktuelles Bild in die Zwischenablage kopieren und anzeigen.
    2. '
    3. Option Explicit On
    4. Option Strict On
    5. Public Class Form4
    6.  
    7. Private w32 As Win32Api
    8. Private Shadows [Handle] As IntPtr
    9.  Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) _Handles Me.FormClosing
    10. w32.MyHandle = [Handle]
    11. If Not [Handle].Equals(IntPtr.Zero) Then
    12. w32.DisposeConnection()
    13. End If
    14. End Sub
    15.  
    16.  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _Handles Button2.Click
    17. w32.MyHandle = [Handle]
    18. If Not [Handle].Equals(IntPtr.Zero) Then
    19. w32.DisposeConnection()
    20. Me.Button3.Enabled = False
    21. Me.Button2.Enabled = False
    22. End If
    23. End SubSub Pause(ByVal pau As Single)
    24. 'Programmausführung verzögern *******************************************************
    25. Dim start, finish As Singlestart = CSng(Microsoft.VisualBasic.DateAndTime.Timer)
    26. finish = start + pauDo While Microsoft.VisualBasic.DateAndTime.Timer < finish
    27. Application.DoEvents()
    28. Loop
    29. End SubPrivate Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    30. Handles Button3.Click
    31. Me.Button5.Enabled = False
    32. Me.Button1.Enabled = False
    33.  
    34.  
    35.  
    36.  
    37.  
    38. If Not [Handle].Equals(IntPtr.Zero) Then
    39. w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
    40. If img IsNot Nothing ThenMe.PictureBox2.Image = img
    41. End If
    42. ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
    43. End If
    44.  
    45.  
    46.  
    47.  
    48. Pause(0.5)
    49.  
    50.  
    51.  
    52. If Not [Handle].Equals(IntPtr.Zero) Then
    53. w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
    54. If img IsNot Nothing ThenMe.PictureBox3.Image = img
    55. End If
    56. ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
    57. End If
    58. Pause(0.5)
    59.  
    60.  
    61.  
    62. If Not [Handle].Equals(IntPtr.Zero) Then
    63. w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
    64. If img IsNot Nothing ThenMe.PictureBox4.Image = img
    65. End If
    66. ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
    67. End If
    68. Me.Button4.Enabled = True
    69. End SubPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _Handles MyBase.Load
    70.  
    71.  
    72.  
    73.  
    74.  
    75.  w32 = New Win32Api(Me.PictureBox1.Handle, 352, 287)
    76. [Handle] = w32.GetCaptureHandle
    77. If Not [Handle].Equals(IntPtr.Zero) Then
    78. Me.Button3.Enabled = True
    79. Me.Button2.Enabled = True
    80. Me.Button1.Enabled = True
    81. Me.Button4.Enabled = False
    82. Me.Button5.Enabled = False
    83. End If
    84.  
    85.  
    86.  
    87.  
    88. End SubPrivate Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    89. Handles Button4.Click
    90. Me.Button1.Enabled = TrueDim sfd As SaveFileDialog = New SaveFileDialog()
    91. Me.PictureBox2.Image.Save("Motor1.bmp")Me.PictureBox3.Image.Save("Motor2.bmp")
    92. Me.PictureBox4.Image.Save("Motor3.bmp")MessageBox.Show("Motor Bilder wurden gespeichert.", "Info")
    93. End Sub
    94. Public Class SaveImageToFile
    95. Private _filename As String
    96. Private _img As ImagePublic Sub New(ByVal Filename As String, ByVal img As Image)
    97. If Not String.IsNullOrEmpty(Filename) ThenMe._filename = Filename
    98. If img IsNot Nothing ThenMe._img = img
    99. Else
    100. Return
    101. End If
    102. Else
    103. Return
    104. End If
    105. End Sub
    106. Public Function SaveImage() As Boolean
    107. TryDim hBitmap As Bitmap = New Bitmap(Me._img)
    108. hBitmap.Save(Me._filename, Imaging.ImageFormat.Jpeg)
    109. If IO.File.Exists(Me._filename) Then
    110. Return True
    111. Else
    112. Return False
    113. End If
    114. Catch ex As ExceptionMessageBox.Show(ex.Message.ToString(), "Info")
    115. End Try
    116. Return False
    117. End Function
    118. End ClassPrivate Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
    119. End SubPrivate Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
    120. End SubPrivate Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    121. Me.Button3.Enabled = False
    122. Me.Button4.Enabled = False
    123.  
    124.  
    125.  
    126.  
    127. If Not [Handle].Equals(IntPtr.Zero) Then
    128. w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
    129. If img IsNot Nothing ThenMe.PictureBox2.Image = img
    130. End If
    131. ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
    132. End If
    133.  
    134.  
    135.  
    136.  
    137. Pause(0.5)
    138.  
    139.  
    140.  
    141. If Not [Handle].Equals(IntPtr.Zero) Then
    142. w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
    143. If img IsNot Nothing ThenMe.PictureBox3.Image = img
    144. End If
    145. ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
    146. End If
    147. Pause(0.5)
    148.  
    149.  
    150.  
    151. If Not [Handle].Equals(IntPtr.Zero) Then
    152. w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
    153. If img IsNot Nothing ThenMe.PictureBox4.Image = img
    154. End If
    155. ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
    156. End If
    157. Me.Button5.Enabled = True
    158. End SubPrivate Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click
    159. Try
    160. Me.Button1.Enabled = True
    161. Me.Button3.Enabled = True
    162. Me.Button4.Enabled = False
    163. Me.Button5.Enabled = FalseDim sfd As SaveFileDialog = New SaveFileDialog()
    164. Me.PictureBox2.Image.Save("Schnecke1.bmp")Me.PictureBox3.Image.Save("Schnecke2.bmp")
    165. Me.PictureBox4.Image.Save("Schnecke3.bmp")MessageBox.Show("Schnecken Bilder wurden gespeichert.", "Info")
    166. Catch Ausnahme As ExceptionMsgBox("Bild für Schnecke konnte nicht gespeichert werden")
    167. End Try
    168. End SubPrivate Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    169. Form2.Show()End Sub
    170. End Class
    171. Public Class Win32Api
    172. #Region "Api Functions"Private Declare Auto Function capCreateCaptureWindow Lib "avicap32.dll" ( _
    173. ByVal lpszWindowName As String, _ByVal dwStyle As Integer, _
    174. ByVal x As Integer, _ByVal y As Integer, _
    175. ByVal nWidth As Integer, _ByVal nHeight As Integer, _
    176. ByVal hWnd As IntPtr, _ByVal nID As Integer) _
    177. As IntPtrPrivate Declare Auto Function SendMessage Lib "user32.dll" ( _
    178. ByVal hwnd As IntPtr, _ByVal uMsg As Integer, _
    179. ByVal wParam As Integer, _ByVal lParam As Integer) _
    180. As Integer
    181. #End Region
    182. #Region "Constants"Private Const WM_USER As Int32 = &H400
    183. Private Const WS_CHILD As Integer = &H40000000Private Const WS_VISIBLE As Integer = &H10000000
    184. Private Const WM_CAP_START As Integer = WM_USERPrivate Const WM_CAP_DRIVER_CONNECT As Integer = (WM_CAP_START + 10)
    185. Private Const WM_CAP_SET_PREVIEWRATE As Integer = (WM_CAP_START + 52)Private Const WM_CAP_SET_OVERLAY As Integer = (WM_CAP_START + 51)
    186. Private Const WM_CAP_SET_PREVIEW As Integer = (WM_CAP_START + 50)Private Const WM_CAP_DRIVER_DISCONNECT As Integer = (WM_CAP_START + 11)
    187. Private Const WM_CAP_EDIT_COPY As Integer = (WM_CAP_START + 30)
    188. #End Region
    189. #Region "Private"Private _hwnd As IntPtr
    190. Private _width As Integer
    191. Private _height As Integer
    192. #End Region
    193. #Region "Camera Id"
    194. Private Const CameraId As Integer = 0
    195. #End Region
    196. #Region "Frames"
    197. Private Const Frames As Integer = 24
    198. #End Region
    199. #Region "Positions"Private x As Integer = 0
    200. Private y As Integer = 0
    201. #End Region
    202. #Region "Public"
    203. Public MyHandle As IntPtr
    204. #End Region
    205. #Region "Constructor"Public Sub New(ByVal hWnd As IntPtr, ByVal Width As Integer, ByVal Height As Integer)
    206. If Not hWnd.Equals(IntPtr.Zero) ThenMe._hwnd = hWnd
    207. If (Width >= 320) And (Height >= 240) ThenMe._width = Width : Me._height = Height
    208. Else
    209. Return
    210. End If
    211. Else
    212. Return
    213. End If
    214. End Sub
    215. #End Region
    216. #Region "Functions"Public Function GetCaptureHandle() As IntPtrDim [Handle] As IntPtr = Win32Api.capCreateCaptureWindow("CaptureWindow", _
    217. Win32Api.WS_CHILD + Win32Api.WS_VISIBLE, _
    218. x, y, _Me._width, Me._height, _Me._hwnd, _
    219. Win32Api.CameraId)
    220. SendMessage([Handle], Win32Api.WM_CAP_DRIVER_CONNECT, Win32Api.CameraId, 0)
    221. SendMessage([Handle], Win32Api.WM_CAP_SET_PREVIEWRATE, Win32Api.Frames, 0)
    222. SendMessage([Handle], Win32Api.WM_CAP_SET_OVERLAY, 1, 0)
    223. SendMessage([Handle], Win32Api.WM_CAP_SET_PREVIEW, 1, 0)
    224. If Not [Handle].Equals(IntPtr.Zero) ThenReturn [Handle]
    225. ElseReturn IntPtr.Zero
    226. End If
    227. End FunctionPublic ReadOnly Property GetImage() As Drawing.Image
    228. GetReturn Me.SetCurrentImageToClipBoard()
    229. End Get
    230. End PropertyPrivate Function SetCurrentImageToClipBoard() As Drawing.Image
    231. TryMy.Computer.Clipboard.Clear()
    232. SendMessage(Me.SetHandle(), Win32Api.WM_CAP_EDIT_COPY, 0, 0)Dim img As Image = My.Computer.Clipboard.GetImage
    233. If img IsNot Nothing ThenReturn img
    234. Else
    235. Return Nothing
    236. End If
    237. Catch
    238. Return Nothing
    239. End Try
    240. End FunctionPublic Property SetHandle() As IntPtr
    241. GetReturn MyHandle
    242. End GetSet(ByVal value As IntPtr)
    243. MyHandle = value
    244. End Set
    245. End PropertyPublic Sub DisposeConnection()
    246. Dim result As Integer = SendMessage(Me.SetHandle(), Win32Api.WM_CAP_DRIVER_DISCONNECT, Win32Api.CameraId, 0)Debug.WriteLine("Disconnected: " & result.ToString())
    247. End Sub
    248. #End RegionEnd Class


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bibs“ ()