Announcement

Collapse
No announcement yet.

VB.NET Mouseevents

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VB.NET Mouseevents

    Hallo,

    Weiß jemand genaues wie in VB.net Mouseevents ausgelöst werden. Ich habe in meinem Programm mehrere Mouseevents, die verschiedene Methoden aufrufen. Jedoch sollen die Methoden nicht parallel aufgerufen werden. Kann es sein das jetzt durch ein Mouseevent eine Methode aufgerufen werden kann, während durch ein anderes Mousevent aufgerufene Methode noch am arbeiten ist? Danke schon mal für eine Antwort

    Gruß

  • #2
    Kann es sein das jetzt durch ein Mouseevent eine Methode aufgerufen werden kann, während durch ein anderes Mousevent aufgerufene Methode noch am arbeiten ist?
    Nur wenn du selbst Threads abgespalten hast oder dein Code mit Application.DoEvent aufrufen garniert hast.

    Comment


    • #3
      Originally posted by Ralf Jansen View Post
      Nur wenn du selbst Threads abgespalten hast oder dein Code mit Application.DoEvent aufrufen garniert hast.

      Danke für deine Antwort. Das habe ich nicht gemacht, ich rufe Schnittstellen einer win 32 DLL auf. Kann es da zu Problemen kommen ?

      Comment


      • #4
        Nein. Die PInvoke Aufrufe sind unproblematisch. Aber das was die Methoden in der DLL machen vielleicht nicht. Lässt sich allgemein nicht beurteilen.

        Comment


        • #5
          Originally posted by Ralf Jansen View Post
          Nein. Die PInvoke Aufrufe sind unproblematisch. Aber das was die Methoden in der DLL machen vielleicht nicht. Lässt sich allgemein nicht beurteilen.
          Na ja ein paar Worte zu meinem Problem: Die DLL bekommt einen HDC übergeben und erstellt zu diesem zwei Speicher DC. Auf einen Speicher DC wird einen Hintergrund gezeichnet der auf den HDC durch Bitblt transferiert wird.

          Auf dem HDC soll durch Mousemove eine schwarze Markierung von X1 bis X2 auf dem Hintergrund dargestellt werden. Dazu wird bei jedem Mousemove der Hintergrund DC und der Markierungs DC mit entsprechender Größe auf den HDC transferiert.

          Durch einen Mouseup wird der Hintergrund DC auf den HDC transferiert damit die Markierung wieder verschwindet.

          Das Funktioniert auch alles, nur wenn ich die Mouse schnell bewege und die Mousetaste dabei schnell drücke, friert das Bild ein. Wäre toll wenn jemand eine Idee hätte, weiß nicht so recht weiter!

          Comment


          • #6
            So aus dem holen Bauch kann man da wohl nicht helfen. Kannst du den Code (reduziert auf das Problem) hier posten?

            Comment


            • #7
              Ja... hier mal den Coder aus der DLL:

              Code:
              DrawExample::DrawExample(HDC dc)
              {
              	this->dc = dc;
              
              	backgrDC = CreateCompatibleDC(dc);
              	rectDC = CreateCompatibleDC(dc);
              	
              	HBITMAP backgrBmp = CreateCompatibleBitmap(dc, 700, 700);
              	HBITMAP rectBmp = CreateCompatibleBitmap(dc, 700, 700);
              	
              	SelectObject(backgrDC, backgrBmp);
              	SelectObject(rectDC, rectBmp);
              }
              
              void DrawExample::drawBackground()
              {
              	HPEN hPen = CreatePen(PS_SOLID, 1, (RGB(255,255,255)));
              	SelectObject(backgrDC, hPen);
              
              	HBRUSH brush;
              	brush = CreateSolidBrush(RGB(255,255,255));
              	SelectObject(backgrDC,brush);
              	Rectangle(backgrDC,0,0,700,700);
              
              	DeleteObject(brush);
              	DeleteObject(hPen);
              }
              
              
              void DrawExample::refresh()
              {
              	BitBlt(dc, 0, 0, 700, 700, backgrDC, 0, 0, SRCCOPY);
              }
              
              void DrawExample::drawRect(int x1, int x2)
              {
              	BitBlt(dc, 0, 0, 700, 700, backgrDC, 0, 0, SRCCOPY);
              	BitBlt(dc, x1, 0, x2, 700, rectDC, 0, 0, DSTINVERT);
              }
              Und der VB Code der diese Methoden aufruft:

              Code:
              Private Sub mymousedown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
              
                      XStart = e.X
              
                  End Sub
              
              
               Private Sub mymouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.mouseMove
              
                      If e.Button = MouseButtons.Left Then
                          DrawRect(XStart, e.X - XStart)
                      End If
              
                  End Sub
              
               Private Sub mymouseup(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
              
                      DrawBackground()
                      Refresh()
              
                  End Sub

              Danke nochmals! Im Prinzip funktioniert es. Nur wenn ich es schnell und oft die Mousaktionen ausfürhre bleibt das Zeichnung stehen und es tut sich nichts mehr.

              Comment


              • #8
                Wohl zuviele Events -> MouseMoves
                Christian

                Comment


                • #9
                  Originally posted by Christian Marquardt View Post
                  Wohl zuviele Events -> MouseMoves
                  Hm, da muss ich mich wohl nach einer alternativen umschauen

                  Comment


                  • #10
                    Hm, da muss ich mich wohl nach einer alternativen umschauen
                    Würde das erstmal testen, in dem man nur jeden x-ten Move mal bearbeitet.....
                    Christian

                    Comment


                    • #11
                      Ich würde es gern mal ausprobieren da ein Problem dem gezeigten Code nicht ansehbar ist. Dafür fehlt aber der Header von DrawExample und zumindest die Imports der Klasse(bzw. deren Methoden) in VB.Net.

                      Comment


                      • #12
                        An dem Teil des Codes liegt es nicht, habe den Teil mal getrennt getest und er funktioniert. Einiziges Manko ist das Speicher sich aufbläst...Naja zu der anderen Sache werde ich mal Teile des Codes der daran hängt auskommentieren und versuchen herauszufinden wo das Problem liegt...Danke nochmals!

                        Comment

                        Working...
                        X