Highlighted
Absent Member.
Absent Member.
2592 views

Using MouseMove in a PictureBox to enter i.e a signature on a touch screen.

Jump to solution

Is there an example program available which catches the MouseMove event in a PictureBox to draw a line following the movement and allowing this to be saved as a bitmap. I've seen examples in C# but my knowledge of a possible translation to COBOL is inadequate.

Can somebody help me on this?

Regards

Rainer

0 Likes
1 Solution

Accepted Solutions
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Using MouseMove in a PictureBox to enter i.e a signature on a touch screen.

Jump to solution

Here is an example in a Windows Forms application:

       class-id savesignature.Form1 is partial
                 inherits type System.Windows.Forms.Form.
       
       working-storage section.
       01 prevLocation type Point value null.
       method-id NEW.
       procedure division.
           invoke self::InitializeComponent
           goback.
       end method.

       method-id pictureBox1_MouseDown final private.
       procedure division using by value sender as object e as type System.Windows.Forms.MouseEventArgs.
          set prevLocation to e::Location
          invoke self::pictureBox1_MouseMove(sender, e)
          
       end method.

       method-id pictureBox1_MouseMove final private.
       01 bmp type Bitmap.
       procedure division using by value sender as object e as type System.Windows.Forms.MouseEventArgs.
       
           if (PrevLocation not = null)
              if (pictureBox1::Image = null)
                 set bmp to new Bitmap(pictureBox1::Width, pictureBox1::Height)
                    perform using g as type Graphics = type Graphics::FromImage(bmp)
                       invoke g::Clear(type Color::White)
                    end-perform
                 set pictureBox1::Image to bmp
               end-if
               perform using g as type Graphics = type Graphics::FromImage(pictureBox1::Image)
                  invoke g::DrawLine(type Pens::Black, prevLocation::X, prevLocation::Y, e::X, e::Y)
               end-perform
               invoke pictureBox1::Invalidate
               set PrevLocation to e::Location
            end-if

       end method.

       method-id pictureBox1_MouseUp final private.
       procedure division using by value sender as object e as type System.Windows.Forms.MouseEventArgs.
           set prevLocation to null.
       end method.

       method-id button1_Click final private.
       01 bmp type Bitmap.
       procedure division using by value sender as object e as type System.EventArgs.
       
           set bmp to new type Bitmap(PictureBox1::Width, PictureBox1::Height)
           invoke PictureBox1::DrawToBitmap(bmp, PictureBox1::ClientRectangle)
           invoke bmp::Save("c:\\temp\mysignature.jpg", type System.Drawing.Imaging.ImageFormat::Jpeg)
    
       end method.
      
       end class.

View solution in original post

0 Likes
4 Replies
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Using MouseMove in a PictureBox to enter i.e a signature on a touch screen.

Jump to solution

Here is an example in a Windows Forms application:

       class-id savesignature.Form1 is partial
                 inherits type System.Windows.Forms.Form.
       
       working-storage section.
       01 prevLocation type Point value null.
       method-id NEW.
       procedure division.
           invoke self::InitializeComponent
           goback.
       end method.

       method-id pictureBox1_MouseDown final private.
       procedure division using by value sender as object e as type System.Windows.Forms.MouseEventArgs.
          set prevLocation to e::Location
          invoke self::pictureBox1_MouseMove(sender, e)
          
       end method.

       method-id pictureBox1_MouseMove final private.
       01 bmp type Bitmap.
       procedure division using by value sender as object e as type System.Windows.Forms.MouseEventArgs.
       
           if (PrevLocation not = null)
              if (pictureBox1::Image = null)
                 set bmp to new Bitmap(pictureBox1::Width, pictureBox1::Height)
                    perform using g as type Graphics = type Graphics::FromImage(bmp)
                       invoke g::Clear(type Color::White)
                    end-perform
                 set pictureBox1::Image to bmp
               end-if
               perform using g as type Graphics = type Graphics::FromImage(pictureBox1::Image)
                  invoke g::DrawLine(type Pens::Black, prevLocation::X, prevLocation::Y, e::X, e::Y)
               end-perform
               invoke pictureBox1::Invalidate
               set PrevLocation to e::Location
            end-if

       end method.

       method-id pictureBox1_MouseUp final private.
       procedure division using by value sender as object e as type System.Windows.Forms.MouseEventArgs.
           set prevLocation to null.
       end method.

       method-id button1_Click final private.
       01 bmp type Bitmap.
       procedure division using by value sender as object e as type System.EventArgs.
       
           set bmp to new type Bitmap(PictureBox1::Width, PictureBox1::Height)
           invoke PictureBox1::DrawToBitmap(bmp, PictureBox1::ClientRectangle)
           invoke bmp::Save("c:\\temp\mysignature.jpg", type System.Drawing.Imaging.ImageFormat::Jpeg)
    
       end method.
      
       end class.

View solution in original post

0 Likes
Highlighted
Absent Member.
Absent Member.

RE: Using MouseMove in a PictureBox to enter i.e a signature on a touch screen.

Jump to solution

Seems I've answered the question myself. Should anyone need this feature, here is a piece of code using Windows Forms.

1st Create a pictureBox

2nd set the mouse properties Up, Down Move

     $set ilusing "System.Drawing".

     $set ilusing "System.Drawing.Graphics".

     $set ilusing "System.IO.Stream".

working-storage

      01 Pen              type Pen.

      01 bmp              type Bitmap.

      01 g                type Graphics.

      01 _Previous        type Point.

      01 mouseval         pic 9.

       88 mousedown       value 1 false 0.

Methods:

      method-id pictureBox1_Paint final private.

      procedure division using by value sender as object e as type System.Windows.Forms.PaintEventArgs.

          set Pen to new Pen(type Color::Black, 3)

      end method.

      method-id pictureBox1_MouseMove final private.

      procedure division using by value sender as object e as type System.Windows.Forms.MouseEventArgs.

          if mousedown

              if pictureBox1::Image = Null

                  set bmp to new Bitmap(PictureBox1::Width, PictureBox1::Height)

                  set g to type Graphics::FromImage(bmp)

                  invoke g::Clear(type Color::White)

                  set pictureBox1::Image to bmp

              else

                  invoke g::DrawLine(Pen, _Previous::X, _Previous::Y, e::X, e::Y)

              end-if

              invoke pictureBox1::Invalidate()

              set _Previous::X to e::X

              set _Previous::Y to e::Y

          end-if

      end method.

      method-id pictureBox1_MouseDown final private.

      procedure division using by value sender as object e as type System.Windows.Forms.MouseEventArgs.

          set _Previous to new Point(e::X, e::Y)

          set mousedown to true

      end method.

      method-id pictureBox1_MouseUp final private.

      procedure division using by value sender as object e as type System.Windows.Forms.MouseEventArgs.

          set mousedown to false

          set _Previous to Null

      end method.

      method-id button2_Click final private.

      procedure division using by value sender as object e as type System.EventArgs.      

          invoke bmp::Save("Signature.bmp", type System.Drawing.Imaging.ImageFormat::Bmp)

          set pictureBox1::Image to Null

      end method.

0 Likes
Highlighted
Absent Member.
Absent Member.

RE: Using MouseMove in a PictureBox to enter i.e a signature on a touch screen.

Jump to solution

Sorry Chris,

didn't notice you had already answered my question. On the other hand - shows I'm getting better.

0 Likes
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Using MouseMove in a PictureBox to enter i.e a signature on a touch screen.

Jump to solution

Yes Karl, you did quite well on the code conversion.

I am very impressed!

0 Likes
The opinions expressed above are the personal opinions of the authors, not of Micro Focus. By using this site, you accept the Terms of Use and Rules of Participation. Certain versions of content ("Material") accessible here may contain branding from Hewlett-Packard Company (now HP Inc.) and Hewlett Packard Enterprise Company. As of September 1, 2017, the Material is now offered by Micro Focus, a separately owned and operated company. Any reference to the HP and Hewlett Packard Enterprise/HPE marks is historical in nature, and the HP and Hewlett Packard Enterprise/HPE marks are the property of their respective owners.