اردو کنٹرول لائبریری

نبیل

تکنیکی معاون
میں اپنی ایک گزشتہ پوسٹ میں ڈاٹ نیٹ‌کے ایڈٹ کنٹرول سے ڈیرائیو کیے ہوئے ایک اردو ایڈٹ کنٹرول کی ضرورت کے بارے میں بات کر چکا ہوں۔ اب مجھے ایسا ایک کسٹم اردو ایڈٹ کنٹرول بنانے میں جزوی کامیابی حاصل ہوئی ہے۔ جزوی اس لیے کہ کرسر ابھی تک تماشے کر رہا ہے اور ابھی تک اس میں لینگویج سویچنگ بھی امپلیمنٹ نہیں ہوئی ہوئی۔ بہرحال اسی 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);
		}
	}
}
 

Attachments

  • prototype2_155.zip
    89.3 KB · مناظر: 68

الف نظامی

لائبریرین
نبیل نے کہا:
میں اپنی ایک گزشتہ پوسٹ میں ڈاٹ نیٹ‌کے ایڈٹ کنٹرول سے ڈیرائیو کیے ہوئے ایک اردو ایڈٹ کنٹرول کی ضرورت کے بارے میں بات کر چکا ہوں۔ اب مجھے ایسا ایک کسٹم اردو ایڈٹ کنٹرول بنانے میں جزوی کامیابی حاصل ہوئی ہے۔ جزوی اس لیے کہ کرسر ابھی تک تماشے کر رہا ہے اور ابھی تک اس میں لینگویج سویچنگ بھی امپلیمنٹ نہیں ہوئی ہوئی۔ بہرحال اسی 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);
		}
	}
}
نبیل ٹیکسٹ باکس کی ٹیکسٹ ڈائریکشن کی پراپرٹی رائٹ ٹو لیفٹ سیٹ کریں ، میرا خیال ہے کہ کرسر کا معاملہ حل ہوجائے گا۔
 

نبیل

تکنیکی معاون
راجہ، تم کمپائل کرکے دیکھو تمہاری طرف کیسا چلتا ہے پروگرام؟ میں بتا چکا ہوں کہ گھر والے پی سی پر Visual Studio.NET 2002 میں کمپائل کرنے پر کرسر کا معاملہ ٹھیک رہتا ہے جبکہ آفس میں Visual Studio.NET 2003 میں کمپائل کرنے پر کرسر عجیب و غریب حرکتیں کرتا ہے۔ پتا نہیں Visual Studi.NET 2005 اور .NET 2.0 پر یہ کیسا چلے گا؟
 

الف نظامی

لائبریرین
نبیل نے کہا:
راجہ، تم کمپائل کرکے دیکھو تمہاری طرف کیسا چلتا ہے پروگرام؟ میں بتا چکا ہوں کہ گھر والے پی سی پر Visual Studio.NET 2002 میں کمپائل کرنے پر کرسر کا معاملہ ٹھیک رہتا ہے جبکہ آفس میں Visual Studio.NET 2003 میں کمپائل کرنے پر کرسر عجیب و غریب حرکتیں کرتا ہے۔ پتا نہیں Visual Studi.NET 2005 اور .NET 2.0 پر یہ کیسا چلے گا؟
یہاں بھی کرسر کا معاملہ خراب ہی ہے۔
 

دوست

محفلین
اس سے عوام الناس جو سی شارپ جانتے ہیں اور پروگرامر کہلاتے ہیں ایسے پروگرام بنا سکتے ہیں۔ جن میں‌اردو لکھی جاسکے۔
 

فرخ

محفلین
نبیل بھائی
یہ کام اردو کا علیحدہ کنٹرول بنائے بغیر بھی تو کیا جاسکتا ہے۔
اگر آپ RichTextBox کنٹرول کا استعمال کریں تو آپ کو اتنا کچھ نہیں کرنا پڑے گا۔
میں نے ابھی C# 2008 Express میں اسے Try کیا تھا، اچھا خاصا آسان کام ہے۔ صرف اردو ونڈوز میں ہونی چاھئیے۔۔۔
 

نبیل

تکنیکی معاون
فرخ، ان کنٹرولز کو استعمال کرنے کے لیے ونڈوز میں اردو سپورٹ انسٹال ہونی ضروری ہے لیکن ان میں اردو ٹائپ کرنے کے لیے اردو کی بورڈ انسٹال کرنا ضروری نہیں ہے۔
 

فرخ

محفلین
فرخ، ان کنٹرولز کو استعمال کرنے کے لیے ونڈوز میں اردو سپورٹ انسٹال ہونی ضروری ہے لیکن ان میں اردو ٹائپ کرنے کے لیے اردو کی بورڈ انسٹال کرنا ضروری نہیں ہے۔
جی میں‌سمجھ گیا تھا آپ کے کوڈ میں characters definitions دیکھ کر۔ مگرجہاں‌ونڈوز میں اردو انسٹال ہوتی ہے، وہاں کی بورڈ بھی ڈالا جاسکتا ہے۔ اور جب آپ اپنا یہ پروگرام انسٹالر کے ذریعے لوگوں‌کو دیں گے، تو اردو سپورٹ اور کی بورڈ بھی دے سکتے ہیں۔

میری ذاتی رائے میں یہ اردو ایڈیٹر ویب کے لیئے بہت اچھا ہے، جیسا کہ ابھی محفل کا اردو ایڈیٹر بھی ہے۔ لیکن جب ہم پروگرام بنا کر انسٹالر کے ذریعے دیں تو کی بورڈ بھی ساتھ انسٹال کیا جاسکتاہے
 
Top