Subscribe RSS Join our Facebook Group Follow us on Twitter!
in Search

Jeffrey Hermanto Halimsetiawan's Blog

October 2010 - Posts

  • InkCanvas dengan Windows MultiPoint Mouse SDK

    InkCanvas adalah sebuah control pada Windows Presentation Foundation (WPF) yang memungkinkan user untuk melakukan coretan-coretan pada control tersebut layaknya aplikasi Paint sederhana pada Microsoft Windows. InkCanvas ini tentunya akan sangat digemari terutama oleh anak-anak yang baru mulai belajar komputer. Di sisi lain, Windows MultiPoint Mouse SDK memungkinkan sebuah komputer dapat digunakan oleh lebih dari satu user secara simultan dimana setiap user akan memiliki mouse pointer nya masing-masing. Tentunya akan sangat mengasyikkan apabila serunya melakukan coretan-coretan tersebut dapat dilakukan secara bersama-sama oleh banyak user. Sayangnya, Control yang didukung oleh MultiPoint baru sebatas MultipointButton, MultipointTextBox, dan MultipointCheckBox pada Samples dari Windows MultiPoint Mouse SDK versi 1.5.1. Memang Controls yang ada memungkinkan untuk menjadi Multipointable (dapat dikenai event multipoint) dengan melakukan pengubahan yang cukup rumit. Terinspirasi oleh Aplikasi Flash dengan Microsoft MultiPoint Mouse SDK, cara termudah yang dapat dilakukan adalah meletakkan MultipointButton transparan di depan InkCanvas kemudian MultipointButton inilah yang akan menerima segala MultipointMouseEvent yang ada dan melakukan penambahan coretan secara manual pada InkCanvas. Langkah-langkahnya adalah sebagai berikut:

    1. Buatlah sebuah Project dari template "Multipoint Application" yang disediakan oleh Windows MultiPoint Mouse SDK
    2. Tambahkan InkCanvas pada Window1.xaml dan beri nama icArea
    3. Tambahkan control MultipointButton tepat diatas InkCanvas pada Window1.xaml dan beri nama mpbDrawing
    4. Subscribe MultipointMouseDownEvent, MultipointMouseMoveEvent, dan MultipointMouseUpEvent dari mpbDrawing
    5.  ///   
      /// This is event handler for window "Loaded" Event.
      /// All MultiPoint initialization should happen on this event.
      ///
      private void MultipointWindow_Loaded(object sender, RoutedEventArgs e)
      {
      // initialize the MulitPoint system
      MultipointSdk.Instance.Register(this);
      this.mpbDrawing.MultipointMouseDownEvent += new RoutedEventHandler(mpbDrawing_MultiPointMouseDownEvent);
      this.mpbDrawing.MultipointMouseUpEvent += new RoutedEventHandler(mpbDrawing_MultiPointMouseUpEvent);
      this.mpbDrawing.MultipointMouseMoveEvent += new RoutedEventHandler(mpbDrawing_MultipointMouseMoveEvent);
      }
    6. Tambahkan field untuk menyimpan posisi pertama dan kedua mouse serta variabel bool sebagai penanda apakah mouse sedang didrag.
    7.  private int _secondX;  
      private int _secondY;
      private int _firstX;
      private int _firstY;
      private bool _isDraw = false;
    8. Definisikan method mpbDrawing_MultiPointMouseDownEvent
    9.  private void mpbDrawing_MultiPointMouseDownEvent(object sender, RoutedEventArgs e)  
      {
      MultipointMouseEventArgs args = (MultipointMouseEventArgs)e;
      DeviceInfo mouseObject = args.DeviceInfo;
      MultipointMouseDevice mpDevice = (MultipointMouseDevice)mouseObject.DeviceVisual;
      int x = (int)mpDevice.Position.X;
      int y = (int)mpDevice.Position.Y;
      if (!_isDraw)
      {
      _isDraw = true;
      _secondX = x;
      _secondY = y;
      _firstX = x;
      _firstY = y;
      }
      else
      {
      mpbDrawing_MultiPointMouseUpEvent(sender, e);
      }
      }
    10. Definisikan method mpbDrawing_MultipointMouseMoveEvent
    11.  private void mpbDrawing_MultipointMouseMoveEvent(object sender, RoutedEventArgs e)  
      {
      if (_isDraw)
      {
      MultipointMouseEventArgs args = (MultipointMouseEventArgs)e;
      DeviceInfo mouseObject = args.DeviceInfo;
      MultipointMouseDevice mpDevice = (MultipointMouseDevice)mouseObject.DeviceVisual;
      int x = (int)mpDevice.Position.X;
      int y = (int)mpDevice.Position.Y;
      _firstX = _secondX;
      _firstY = _secondY;
      _secondX = x;
      _secondY = y;
      AddLine(_firstX, _firstY, _secondX, _secondY);
      }
      }
    12. Definisikan method mpbDrawing_MultiPointMouseUpEvent
    13.  private void mpbDrawing_MultiPointMouseUpEvent(object sender, RoutedEventArgs e)  
      {
      MultipointMouseEventArgs args = (MultipointMouseEventArgs)e;
      DeviceInfo mouseObject = args.DeviceInfo;
      MultipointMouseDevice mpDevice = (MultipointMouseDevice)mouseObject.DeviceVisual;
      int x = (int)mpDevice.Position.X;
      int y = (int)mpDevice.Position.Y;
      _isDraw = false;
      }
    14. Kemudian definisikan method AddLine yang akan melakukan penambahan garis pada icArea
    15.  private void AddLine(int x1, int y1, int x2, int y2)  
      {
      Line line = new Line();
      line.X1 = x1;
      line.Y1 = y1;
      line.X2 = x2;
      line.Y2 = y2;
      line.Stroke = Brushes.Red;
      this.icArea.Children.Add(line);
      }

    Berikut adalah hasil dari program sederhana ini: 

     

    Silahkan lakukan modifikasi dengan menambah variabel bool dan koordinat yang ada untuk setiap mouse apabila ingin melakukan coretan secara bersamaan.

    Selamat mencoba :D

    313 Views, 1 Comment(s), Published on: 10-25-2010 6:26 by jeffrey to Jeffrey Hermanto Halimsetiawan's Blog
    | More
    Filed under: ,
  • ISS Knowledge Sharing at Mitrais

    Pada tanggal 21 Juni 2010 hingga 20 Agustus 2010 lalu, saya memperoleh kesempatan untuk melaksanakan Kerja Praktek di Mitrais, Bali. Kebetulan, saya bergabung pada divisi Internal System Support (ISS) yang memiliki agenda Knowledge Sharing setiap bulannya. Tema Knowledge Sharing tersebut bebas dan ditentukan oleh salah satu anggota divisi ISS yang ditunjuk untuk berbagi pengetahuan. Saya dan teman saya, Alexander, selaku trainee memperoleh kehormatan sebagai pembicara dalam acara ISS Knowledge Sharing bulan Juli. Setelah memikirkan tema yang akan diangkat, kami pun memutuskan "MultiPoint" sebagai tema. Beruntungnya, teman-teman di Divisi ISS masih belum pernah mendengar tentang "MultiPoint" sehingga mereka memiliki antusiasme yang tinggi untuk mengetahuinya.

     Acara Knowledge Sharing ini berlangsung selama kurang lebih satu jam dengan materi presentasi sebagai berikut:

    Presentasi Windows MultiPoint Mouse SDK - Knowledge Sharing ISS 

    Kami juga sempat mendemonstrasikan sebuah game edukasi bertemakan Aksara Jawa dengan Flash dan Microsoft MultiPoint SDK 1.1 yang telah kami kembangkan sebelumnya, bernama "Petualangan Aksara di Tanah Jawa". Anggota Divisi ISS sangat antusias karena memperoleh wawasan baru tentang adanya teknologi MultiPoint melalui presentasi ini. Kami juga memberikan CD Multipoint yang diperoleh dari Microsoft beberapa waktu lalu kepada Team Leader Divisi ISS sebagai kenang-kenangan :D

    365 Views, 0 Comment(s), Published on: 10-25-2010 5:38 by jeffrey to Jeffrey Hermanto Halimsetiawan's Blog
    | More
    Filed under: , ,