Verständnis Problem

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Eggord.

    Verständnis Problem

    HEy ich habe mal wieder eine Frage. In einem Beispielprogram steht der untere Code allerdings versteheich nicht was dieser macht

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' WndProc
    2. <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    3. Protected Overrides Sub WndProc(ByRef m As Message)
    4. ' Listen for operating system messages
    5. Select Case (m.Msg)
    6. 'Ueye(Message)
    7. Case DEFINES.MESSAGE.UEYE_MESSAGE
    8. HandleUeyeMessage(m.WParam.ToInt32(), m.LParam.ToInt32())
    9. End Select
    10. MyBase.WndProc(m)
    11. End Sub


    Was sollen diese spitzen Klammern? und um was für message geht es dort?? Ueye ist übrigens eine usb kamera

    Danke schonmal!
    Das sind spezielle Compiler- und / oder Designer-Anweisungen, da musst Du Dich (zunächst) nicht drum kümmern.
    Klick mal drauf und drück F1 für Hilfe.
    Sieh Dir mal in Deiner Form1.Designer.vb dies an:

    VB.NET-Quellcode

    1. <System.Diagnostics.DebuggerStepThrough()> _
    2. Private Sub InitializeComponent()
    3. ' ...
    4. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das WndProc ist eine Art Wrapper für msdn.microsoft.com/en-us/libra…op/ms633573(v=vs.85).aspx.
    Das verwendet Windows um mit deiner Anwendung zu kommunizieren. Über dieses Callback kommen zahlreiche Messages rein mit zwei parametern und einem handle.
    Zum Beispiel: Hast du einen Button. Dieser löst beim Click das Click Event aus. Doch wie geht das? Nun ja im Hintergrund kommen über das Callback Dinge wie z.b. WM_MOUSEDOWN rein. Diese werden von deiner Form oder was auch immer ausgewertet an deinen Button weitergeleitet (geht glaub sogar in .net über handles) und dieser sieht dann WM_MOUSEDOWN aha also hau ich das MouseDown Event raus. Und wenn dann noch das WM_MOUSEUP kommt dann haut er von mir aus noch das MouseUp raus und eben das Click...

    Also zusammengefasst und einfach formuliert. Ist das eine Art Schnittstelle zwischen Windows und deiner Anwendung. Über dieses WndProc bekommt z.b. deine Form mit, dass der Benutzer diese schließen möchte (WM_CLOSE).


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    also bekommt das Program ständig messages rein(die aber im Hintergrund laufen). Und genauso muss wohl meine Kamera messages schicken, auf die ich dann mit select case zugreife. Unter anderem wenn sie ein Bild aufgenommen hat. Und dann stellt man das Bild in der Picturebox dar.

    Habe ich das richtig verstanden?

    Mal ne andere Frage zu der Picturebox: Wie schnell kann die denn Bilder darstellen..also wieviele FramesPerSeconds bei 1.3 MPixel? Wenn ich auf den Bildern ein Rechteck zeichen möchte muss ich das jedesmal machen wenn ich ein neues Bild darstelle oder nur einemal und das bleibt bis ich es cleare?
    Die <>-Dinger passieren nicht zur Laufzeit, wohl aber zur Entwicklungs- und Compilezeit.
    Wie Deine Kamera mit dem Programm kommuniziert, weiß ich nicht, da musste mal das Handbuch lesen.
    Ein Frame bleibt so lange stehen, bis der nächste kommt.
    Und wieviel Du davon in der Zeit anzeigen kannst, hängt neben der Bereitstellungs- auch von der Darstellungsrate ab, und die ist echt vom Programm abhängig.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bezweifle, da Webcam frames über Messages reinkommen.
    Für WebCam und Co. gibt es eigene WinAPI's welche du verwenden musst. Dort wird dann direkt auf das Handle der PictureBox gezeichnet.
    z.B. sowas: dotnet-snippets.de/dns/webcam-…box-anzeigen-SID1370.aspx


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    also es ist keine webcam...es ist eine industrielle USB Kamera... Wenn ich es mit activeX programiere. Im unteren Code wird(wenn ich in richtig verstehe) bei jedem frame die render funktion aufgerufen. Die ist in einer anderen Klasse definiert und übergibt jedesmal den handler der picturebox.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' WndProc
    2. <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    3. Protected Overrides Sub WndProc(ByRef m As Message)
    4. ' Listen for operating system messages
    5. Select Case (m.Msg)
    6. 'Ueye(Message)
    7. Case DEFINES.MESSAGE.UEYE_MESSAGE
    8. HandleUeyeMessage(m.WParam.ToInt32(), m.LParam.ToInt32())
    9. End Select
    10. MyBase.WndProc(m)
    11. End Sub
    12. Public Sub HandleUeyeMessage(ByVal wParam As Integer, ByVal lParam As Integer)
    13. Select Case (wParam)
    14. Case DEFINES.MESSAGE.FRAME
    15. m_CamCtrl.RenderImage()
    16. 'New frame
    17. Case DEFINES.MESSAGE.FRAME
    18. '++m_nFrameCount;
    19. m_CamCtrl.RenderImage()
    20. 'Device removed
    21. Case DEFINES.MESSAGE.DEVICE_REMOVAL
    22. m_CamCtrl.StopVideo()
    23. m_CamCtrl.ExitCamera()
    24. Case DEFINES.MESSAGE.DEVICE_REMOVED
    25. m_CamCtrl.StopVideo()
    26. m_CamCtrl.ExitCamera()
    27. Case DEFINES.MESSAGE.DEVICE_RECONNECTED
    28. m_CamCtrl.StopVideo()
    29. Case DEFINES.MESSAGE.NEW_DEVICE
    30. m_CamCtrl.OpenCamera()
    31. 'Capture status */
    32. Case DEFINES.MESSAGE.TRANSFER_FAILED
    33. '++m_nTransferFailed;
    34. m_CamCtrl.StopVideo()
    35. m_CamCtrl.ExitCamera()
    36. End Select
    37. End Sub


    @Rod: das die <> während des compilierens "passieren" habe ich mir gedacht. aber das resultat ist doch das man währed der Laufzeit auf diese message zugreifen kann die sonst nur im hintergrund wären.Oder?

    Eggord schrieb:

    das man währed der Laufzeit auf diese message zugreifen kann
    wird durch das Überschreiben der WndProc gemacht, wo Du gezielt Deine Messages herausfilterst und drauf reagierst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!