نبیل
تکنیکی معاون
میں اپنی ایک گزشتہ پوسٹ میں ڈاٹ نیٹکے ایڈٹ کنٹرول سے ڈیرائیو کیے ہوئے ایک اردو ایڈٹ کنٹرول کی ضرورت کے بارے میں بات کر چکا ہوں۔ اب مجھے ایسا ایک کسٹم اردو ایڈٹ کنٹرول بنانے میں جزوی کامیابی حاصل ہوئی ہے۔ جزوی اس لیے کہ کرسر ابھی تک تماشے کر رہا ہے اور ابھی تک اس میں لینگویج سویچنگ بھی امپلیمنٹ نہیں ہوئی ہوئی۔ بہرحال اسی implementation کو بنیاد بنا کر اردو کنٹرولز کی ایک لائبریری بنائی جا سکتی ہے جس کے ذریعے اردو اپلیکیشنز بنانا آسان ہو جائے گا۔
ذیل میں اردو ایڈٹ کنٹرول کا کوڈ پوسٹ کر رہا ہوں۔ اس کے علاوہ میں سی شارپ کا ایک پراجیکٹ بھی پوسٹ کر رہا ہوں جس میں یہ کنٹرول استعمال کیا گیا ہے۔ بعد میں اس پر مزید پوسٹ کروں گا۔
ذیل میں اردو ایڈٹ کنٹرول کا کوڈ پوسٹ کر رہا ہوں۔ اس کے علاوہ میں سی شارپ کا ایک پراجیکٹ بھی پوسٹ کر رہا ہوں جس میں یہ کنٹرول استعمال کیا گیا ہے۔ بعد میں اس پر مزید پوسٹ کروں گا۔
کوڈ:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace UrduCtrl
{
/// <summary>
/// Summary description for Class1.
/// </summary>
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
public class UrduTextBox: System.Windows.Forms.TextBox
{
private int WM_CHAR = 0x102;
private int WM_KEYDOWN = 0x100;
private Hashtable CharMap;
private bool m_bIsUrdu;
public UrduTextBox()
{
//
// TODO: Add constructor logic here
//
this.Font = new System.Drawing.Font("Urdu Naskh Asiatype", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(178)));
// this.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
this.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.m_bIsUrdu= true;
CharMap= new Hashtable();
CharMap['a']=0x627;
CharMap['b']=0x0628;
CharMap['c']=0x0686;
CharMap['d']=0x062F;
CharMap['e']=0x0639;
CharMap['f']=0x0641;
CharMap['g']=0x06AF;
CharMap['h']=0x06BE;
CharMap['i']=0x06CC;
CharMap['j']=0x062C;
CharMap['k']=0x06A9;
CharMap['l']=0x0644;
CharMap['m']=0x0645;
CharMap['n']=0x0646;
CharMap['o']=0x06C1;
CharMap['p']=0x067E;
CharMap['q']=0x0642;
CharMap['r']=0x0631;
CharMap['s']=0x0633;
CharMap['t']=0x062A;
CharMap['u']=0x0626;
CharMap['v']=0x0637;
CharMap['w']=0x0648;
CharMap['x']=0x0634;
CharMap['y']=0x06D2;
CharMap['z']=0x0632;
CharMap['A']=0x0622;
CharMap['B']=0x0628;
CharMap['C']=0x062B;
CharMap['D']=0x0688;
CharMap['E']=0x0651;
CharMap['F']=0x064D;
CharMap['G']=0x063A;
CharMap['H']=0x062D;
CharMap['I']=0x0670;
CharMap['J']=0x0636;
CharMap['K']=0x062E;
CharMap['L']=0x0628;
CharMap['M']=0x064B;
CharMap['N']=0x06BA;
CharMap['O']=0x0628;
CharMap['P']=0x064F;
CharMap['Q']=0x0628;
CharMap['R']=0x0691;
CharMap['S']=0x0635;
CharMap['T']=0x0679;
CharMap['U']=0x0621;
CharMap['V']=0x0638;
CharMap['W']=0x0624;
CharMap['X']=0x0698;
CharMap['Z']=0x0630;
CharMap['>']=0x0650;
CharMap['<']=0x064E;
CharMap[Convert.ToChar(58)]=0x061B;
CharMap[Convert.ToChar(59)]=0x061B;
CharMap[Convert.ToChar(39)]=0x2018;
CharMap[Convert.ToChar(34)]=0x201C;
CharMap[Convert.ToChar(46)]=0x06D4;
CharMap[Convert.ToChar(44)]=0x060C;
CharMap[Convert.ToChar(33)]=0x0021;
CharMap[Convert.ToChar(43)]=0x002B;
CharMap[Convert.ToChar(45)]=0x002D;
CharMap[Convert.ToChar(42)]=0x00D7;
CharMap[Convert.ToChar(47)]=0x00F7;
CharMap[Convert.ToChar(37)]=0x066A;
CharMap[Convert.ToChar(41)]=0x0028;
CharMap[Convert.ToChar(40)]=0x0029;
CharMap[Convert.ToChar(61)]=0x003D;
//CharMap[Convert.ToChar(32)]=32;
CharMap['?']=0x061F;
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_CHAR)
{
if(m_bIsUrdu)
{
char strChar= (char) m.WParam;
if(CharMap.ContainsKey(strChar))
{
int iChar= (int) CharMap[strChar];
m.WParam= (IntPtr) iChar;
}
}
}
if (m.Msg == WM_KEYDOWN)
{
if (m.WParam== (IntPtr) 32)
{
if((Control.ModifierKeys & Keys.Control) == Keys.Control )
{
this.m_bIsUrdu= !(this.m_bIsUrdu);
}
}
}
base.WndProc(ref m);
}
}
}