Zum Inhalt springen

Schreiben auf einer WinForm-Oberfläche


Bioernus

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Natürlich ließe sich die Performance von dem Code noch verbessern. Aber selbst mit dem unveränderten Code lief es bei mir zufriedenstellend.

Vielleicht sind auch deine Ansprüche zu hoch. Starte doch einmal Paint und male ein wenig herum. Sieht das signifikant anders aus als bei deinem Programm?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...