Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich bin gerade dabei mit c# die Möglichkeit, auf einer Oberfläche zu schreiben, umzusetzen.

Allerdings hab ich ein Problem und keine Idee zur Lösung.

Vielleicht habt ihr ja eine Idee zur Lösung.

Das Ganze funktioniert derzeit so, dass ich mir die Koordinaten aus dem MouseEventArgs greife und diese zum einen in eine Liste packe zum Zweck der Speicherung und zum anderen bei jeder Koordinate ein 2x2 Pixel grosses Quadrat zeichne (der Schreibvorgang).

Bei schnelleren Mousebewegungen werden allerdings nicht mehr alle Mousekoordinaten erfasst. Diese fehlen dann zum einen in der Liste und entsprechend das Quadrat an dieser Position. Je schneller die Mousebewegung ist, desto mehr Koordinaten fehlen.

Zum besseren Verständnis mal der Code:


public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }


        bool mouseStatus = false;

        SavedLines printedLines = new SavedLines();


        private void panel1_MouseMove(object sender, MouseEventArgs e)

        {

            if (mouseStatus)

            {

                Point MovePos = new Point(e.X, e.Y);

                printedLines.Coordinates(MovePos);


                Graphics gobj = panel1.CreateGraphics();

                SolidBrush br = new SolidBrush(Color.Black);

                gobj.FillRectangle(br, MovePos.X, MovePos.Y, 2, 2);

                gobj.Dispose();

            }

        }


        private void panel1_MouseDown(object sender, MouseEventArgs e)

        {

            Point DownPos = new Point(e.X, e.Y);

            printedLines.Coordinates(DownPos);


            Graphics gobj = panel1.CreateGraphics();

            SolidBrush br = new SolidBrush(Color.Black);

            gobj.FillRectangle(br, DownPos.X, DownPos.Y, 2, 2);

            gobj.Dispose();


            mouseStatus = true;


        }


        private void panel1_MouseUp(object sender, MouseEventArgs e)

        {

            Point UpPos = new Point(e.X, e.Y);

            printedLines.Coordinates(UpPos);


            Graphics gobj = panel1.CreateGraphics();

            SolidBrush br = new SolidBrush(Color.Black);

            gobj.FillRectangle(br, UpPos.X, UpPos.Y, 2, 2);

            gobj.Dispose();


            mouseStatus = false;


            label1.Text = "Anzahl Koordinaten: " + printedLines.Coordinates();

        }

Eine "grafische Nachbearbeitung" als Lösung ist mMn doof.

Die Lücken mit einer Geraden zu schliessen, macht das ganze Schriftbild unansehnlich, und da Schrift keiner mathematischen Funktion folgt, kann ich die Koordinaten auch nicht nachberechnen.

Kennt jemand z.B. eine Möglichkeit, die Koordinatenerfassung zu verbessern? Allerdings bin ich noch in der Ausbildung, wenn die Lösung zu komplex wird, müsst ihr das bitte für Dummies erklären :-).

Viele Grüße,

Bioernus

Wie oft die Maus Positionsdaten an den PC meldet, ist beschränkt. Es ist völlig normal, dass du selbst bei geringen Mausgeschwindigkeiten nicht für jeden einzelnen Pixel ein Maus-Event bekommst.

Trotzdem sollte selbst die minimale Abfragegeschwindigkeit ausreichen, um ein halbwegs ordentliches Bild zu erzeugen, wenn du die Punkte durch Geraden verbindest. Vielleicht bremst irgendetwas anderes dein Programm aus.

  • Autor

Danke für Hinweis. Also wenn du sagst, dass es grundsätzlich funktionieren sollte, dann werd ichs wohl einfach *hust* suboptimal programmiert haben.

Kanns vielleicht sein, dass das ständige Neuerstellen des Graphics-Objects Performance kostet?

Hab in einem Buch gelesen, dass man das so macht mit dem Erstellen-Benutzen-Disposen, aber vielleicht kann man auch bei allen Events immer dasselbe Graphics-Object benutzen.

Wäre natürlich cool, wenn das Problem damit schon behoben wäre.

  • Autor

Habs mal mit Paint verglichen. Paint ist natürlich perfekt, auch schnellste Bewegungen werden vollständig umgesetzt, während bei mir auch normalschnelle Bewegungen Lückenhaft umgesetzt werden.

Sah denn das Ergebnis bei dir genauso aus wie auf meinem Screenshot? Vielleicht hab ich echt zu hohe Ansprüche :-)

(Die unterste Zeile ist von einer schnellen Bewegung, die Paint problemlos mitmacht. Der Text waren jetzt eher langsame Bewegungen. Wenn ich auf einem Tablet schreiben würde mit Touch-Event statt Mouse-Event, wären die Lücken wohl noch grösser.....)

post-92945-14430449926992_thumb.png

  • Autor

Ok, dann setz ich noch Geraden zwischen den Punkten. Muß ja auch nicht die Qualität von Paint erreichen, nur lesbar solls sein.

So eine Methoden kann ich dann vielleicht auch noch gebrauchen, wenn ich math. Funktionen zeichne.

Vielen Dank für die Unterstützung !

:-)

  • Autor

Weil WPF nicht Inhalt unseres Unterrichts ist. Und Warum DAS so ist, weiß mein Lehrer allein :-))

WPF wollte ich mir aber privat nochmal anschauen. Canvas muß ich wohl auch mal googlen, der Begriff ist mir hier und da schonmal über den weg gelaufen.

Das Ganze soll im Endeffekt auf eine Präsentationssoftware hinauslaufen, bei der man dynamisch Informationen unterschiedlicher Art einfach zusammenstellen kann, mit drag and drop.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.