EDIT: hat sich erledigt, lade jetzt einfach die Form und die Buttons die ich brauche mit
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
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
VB.NET-Quellcode
- 'Beispiel: VB .Net - Webcam ansprechen - Video anzeigen - Aktuelles Bild in die Zwischenablage kopieren und anzeigen.
- '
- Option Explicit On
- Option Strict On
- Public Class Form4
- Private w32 As Win32Api
- Private Shadows [Handle] As IntPtr
- Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) _Handles Me.FormClosing
- w32.MyHandle = [Handle]
- If Not [Handle].Equals(IntPtr.Zero) Then
- w32.DisposeConnection()
- End If
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _Handles Button2.Click
- w32.MyHandle = [Handle]
- If Not [Handle].Equals(IntPtr.Zero) Then
- w32.DisposeConnection()
- Me.Button3.Enabled = False
- Me.Button2.Enabled = False
- End If
- End SubSub Pause(ByVal pau As Single)
- 'Programmausführung verzögern *******************************************************
- Dim start, finish As Singlestart = CSng(Microsoft.VisualBasic.DateAndTime.Timer)
- finish = start + pauDo While Microsoft.VisualBasic.DateAndTime.Timer < finish
- Application.DoEvents()
- Loop
- End SubPrivate Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
- Handles Button3.Click
- Me.Button5.Enabled = False
- Me.Button1.Enabled = False
- If Not [Handle].Equals(IntPtr.Zero) Then
- w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
- If img IsNot Nothing ThenMe.PictureBox2.Image = img
- End If
- ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
- End If
- Pause(0.5)
- If Not [Handle].Equals(IntPtr.Zero) Then
- w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
- If img IsNot Nothing ThenMe.PictureBox3.Image = img
- End If
- ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
- End If
- Pause(0.5)
- If Not [Handle].Equals(IntPtr.Zero) Then
- w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
- If img IsNot Nothing ThenMe.PictureBox4.Image = img
- End If
- ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
- End If
- Me.Button4.Enabled = True
- End SubPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _Handles MyBase.Load
- w32 = New Win32Api(Me.PictureBox1.Handle, 352, 287)
- [Handle] = w32.GetCaptureHandle
- If Not [Handle].Equals(IntPtr.Zero) Then
- Me.Button3.Enabled = True
- Me.Button2.Enabled = True
- Me.Button1.Enabled = True
- Me.Button4.Enabled = False
- Me.Button5.Enabled = False
- End If
- End SubPrivate Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
- Handles Button4.Click
- Me.Button1.Enabled = TrueDim sfd As SaveFileDialog = New SaveFileDialog()
- Me.PictureBox2.Image.Save("Motor1.bmp")Me.PictureBox3.Image.Save("Motor2.bmp")
- Me.PictureBox4.Image.Save("Motor3.bmp")MessageBox.Show("Motor Bilder wurden gespeichert.", "Info")
- End Sub
- Public Class SaveImageToFile
- Private _filename As String
- Private _img As ImagePublic Sub New(ByVal Filename As String, ByVal img As Image)
- If Not String.IsNullOrEmpty(Filename) ThenMe._filename = Filename
- If img IsNot Nothing ThenMe._img = img
- Else
- Return
- End If
- Else
- Return
- End If
- End Sub
- Public Function SaveImage() As Boolean
- TryDim hBitmap As Bitmap = New Bitmap(Me._img)
- hBitmap.Save(Me._filename, Imaging.ImageFormat.Jpeg)
- If IO.File.Exists(Me._filename) Then
- Return True
- Else
- Return False
- End If
- Catch ex As ExceptionMessageBox.Show(ex.Message.ToString(), "Info")
- End Try
- Return False
- End Function
- End ClassPrivate Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
- End SubPrivate Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
- End SubPrivate Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
- Me.Button3.Enabled = False
- Me.Button4.Enabled = False
- If Not [Handle].Equals(IntPtr.Zero) Then
- w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
- If img IsNot Nothing ThenMe.PictureBox2.Image = img
- End If
- ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
- End If
- Pause(0.5)
- If Not [Handle].Equals(IntPtr.Zero) Then
- w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
- If img IsNot Nothing ThenMe.PictureBox3.Image = img
- End If
- ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
- End If
- Pause(0.5)
- If Not [Handle].Equals(IntPtr.Zero) Then
- w32.MyHandle = [Handle]Dim img As Image = w32.GetImage()
- If img IsNot Nothing ThenMe.PictureBox4.Image = img
- End If
- ElseMessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
- End If
- Me.Button5.Enabled = True
- End SubPrivate Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click
- Try
- Me.Button1.Enabled = True
- Me.Button3.Enabled = True
- Me.Button4.Enabled = False
- Me.Button5.Enabled = FalseDim sfd As SaveFileDialog = New SaveFileDialog()
- Me.PictureBox2.Image.Save("Schnecke1.bmp")Me.PictureBox3.Image.Save("Schnecke2.bmp")
- Me.PictureBox4.Image.Save("Schnecke3.bmp")MessageBox.Show("Schnecken Bilder wurden gespeichert.", "Info")
- Catch Ausnahme As ExceptionMsgBox("Bild für Schnecke konnte nicht gespeichert werden")
- End Try
- End SubPrivate Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
- Form2.Show()End Sub
- End Class
- Public Class Win32Api
- #Region "Api Functions"Private Declare Auto Function capCreateCaptureWindow Lib "avicap32.dll" ( _
- ByVal lpszWindowName As String, _ByVal dwStyle As Integer, _
- ByVal x As Integer, _ByVal y As Integer, _
- ByVal nWidth As Integer, _ByVal nHeight As Integer, _
- ByVal hWnd As IntPtr, _ByVal nID As Integer) _
- As IntPtrPrivate Declare Auto Function SendMessage Lib "user32.dll" ( _
- ByVal hwnd As IntPtr, _ByVal uMsg As Integer, _
- ByVal wParam As Integer, _ByVal lParam As Integer) _
- As Integer
- #End Region
- #Region "Constants"Private Const WM_USER As Int32 = &H400
- Private Const WS_CHILD As Integer = &H40000000Private Const WS_VISIBLE As Integer = &H10000000
- Private Const WM_CAP_START As Integer = WM_USERPrivate Const WM_CAP_DRIVER_CONNECT As Integer = (WM_CAP_START + 10)
- Private Const WM_CAP_SET_PREVIEWRATE As Integer = (WM_CAP_START + 52)Private Const WM_CAP_SET_OVERLAY As Integer = (WM_CAP_START + 51)
- Private Const WM_CAP_SET_PREVIEW As Integer = (WM_CAP_START + 50)Private Const WM_CAP_DRIVER_DISCONNECT As Integer = (WM_CAP_START + 11)
- Private Const WM_CAP_EDIT_COPY As Integer = (WM_CAP_START + 30)
- #End Region
- #Region "Private"Private _hwnd As IntPtr
- Private _width As Integer
- Private _height As Integer
- #End Region
- #Region "Camera Id"
- Private Const CameraId As Integer = 0
- #End Region
- #Region "Frames"
- Private Const Frames As Integer = 24
- #End Region
- #Region "Positions"Private x As Integer = 0
- Private y As Integer = 0
- #End Region
- #Region "Public"
- Public MyHandle As IntPtr
- #End Region
- #Region "Constructor"Public Sub New(ByVal hWnd As IntPtr, ByVal Width As Integer, ByVal Height As Integer)
- If Not hWnd.Equals(IntPtr.Zero) ThenMe._hwnd = hWnd
- If (Width >= 320) And (Height >= 240) ThenMe._width = Width : Me._height = Height
- Else
- Return
- End If
- Else
- Return
- End If
- End Sub
- #End Region
- #Region "Functions"Public Function GetCaptureHandle() As IntPtrDim [Handle] As IntPtr = Win32Api.capCreateCaptureWindow("CaptureWindow", _
- Win32Api.WS_CHILD + Win32Api.WS_VISIBLE, _
- x, y, _Me._width, Me._height, _Me._hwnd, _
- Win32Api.CameraId)
- SendMessage([Handle], Win32Api.WM_CAP_DRIVER_CONNECT, Win32Api.CameraId, 0)
- SendMessage([Handle], Win32Api.WM_CAP_SET_PREVIEWRATE, Win32Api.Frames, 0)
- SendMessage([Handle], Win32Api.WM_CAP_SET_OVERLAY, 1, 0)
- SendMessage([Handle], Win32Api.WM_CAP_SET_PREVIEW, 1, 0)
- If Not [Handle].Equals(IntPtr.Zero) ThenReturn [Handle]
- ElseReturn IntPtr.Zero
- End If
- End FunctionPublic ReadOnly Property GetImage() As Drawing.Image
- GetReturn Me.SetCurrentImageToClipBoard()
- End Get
- End PropertyPrivate Function SetCurrentImageToClipBoard() As Drawing.Image
- TryMy.Computer.Clipboard.Clear()
- SendMessage(Me.SetHandle(), Win32Api.WM_CAP_EDIT_COPY, 0, 0)Dim img As Image = My.Computer.Clipboard.GetImage
- If img IsNot Nothing ThenReturn img
- Else
- Return Nothing
- End If
- Catch
- Return Nothing
- End Try
- End FunctionPublic Property SetHandle() As IntPtr
- GetReturn MyHandle
- End GetSet(ByVal value As IntPtr)
- MyHandle = value
- End Set
- End PropertyPublic Sub DisposeConnection()
- Dim result As Integer = SendMessage(Me.SetHandle(), Win32Api.WM_CAP_DRIVER_DISCONNECT, Win32Api.CameraId, 0)Debug.WriteLine("Disconnected: " & result.ToString())
- End Sub
- #End RegionEnd Class
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bibs“ ()