17 Jul 2008

Dual Monitor Programming on .NET



Introduction

Dual monitor programming, mungkin banyak dari kamu-kamu jarang temuin kasus kayak gini. Tapi be cool aja, kalo kamu pernah kerjakan project di karaoke, pasti mereka minta seperangkat komputer plus output ke layar televisi. Jadi komputer sebagai alat kontrol dari Karaoke, dan televisi untuk display lagu-lagu karaoke. Pastinya butuh effort banyak untuk wujudkan aplikasi Karaoke. Tapi gak juga lah. Pada dasarnya, aplikasi karaoke sekarang pake dual display yang ada di graphic card komputer client (per room tentunya). Mo diakalin pake apa? SLI? Boleh juga, tapi perlu diingat, 2 display menampilkan display yang berbeda tapi 1 machine.

Implementation
Di Notebook standard sekarang sudah punya dual output, 1 output ke layar, 1 output ke eksternal, bisa ke projector, ato ke monitor lain. Set aja displaynya jadi Extended Desktop. Kalo di notebook yang support Intel Graphics Media, biasanya di desktop ada icon "Intel(R) Graphics Media Accelerator Driver for Mobile" Di Display Settings ada 2 tipe display, Single Display ato Multiple Display. Multiple Display ini dibagi 2 lagi, Dual Monitor (2 monitor menampilkan tampilan sama) atau Extended Monitor (2 monitor yang pada dasarnya adalah 1 display, hanya saja dibagi 2).

Dan jangan dikira bahwa gak bisa dilakukan di .NET. .NET (2005 keatas) menyediakan class Screen untuk keperluan ini.

Coding
Satu contoh jika aku mo buat aplikasi karaoke, ada 2 form, 1 untuk kontrol panel, 1 untuk display video. Konsep Extended Monitor di notebookku adalah sbb, display 1 menggunakan area (X,Y,W,H) sebagai berikut (0,0,1280,800), dan display 2 (tergantung settingan display 2), adalah (1281,0,800,600). Settingan bisa berbeda tergantung dari masing-masing driver itu sendiri.
Lempar ke variabel array s() saat application mulai initialize. Screen.AllScreens ini gunanya retrieve jumlah display di komputer. Bisa dilempar ke module, ato di event Form_Load
Public s() As Screen = Screen.AllScreens
Kemudian var array s() ini bisa dilempar utk berbagai macam tujuan. Misal untuk aplikasiku, aku pake untuk ambil dimensi dari display 1 dan 2, sehingga saat startup, dialog1 bisa diposisikan di area display 1 dan dialog2 bisa diposisikan di area display 2.
Form2.Left = s(1).WorkingArea.X

Hal ini akan membuat Form2 diposisikan di display area 2. Form1 gak perlu di-set apa-apa, karena defaultnya akan muncul di display 1 ato display utamanya.

Preety Simple, right? Modifikasi terserah kamu, gimana imajinasimu, kembangkanlah....

That's all for today...