الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Conset , &h###

بدأه مبرمج مبتدا في 5 أبريل 2008 · 11 رد · 1,082 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

const :

ماهو const وكيف استعمله ؟؟

وايضا ارى في الكثير من دوال api :

Const LWA_ALPHA = &H2
Const lay = &H80000

ما هو :

اقتباس
&h8000

شكرا

startingprogremmer.jpg
#2

الأخ الكريم ، تحية طيبة وبعد ،

هناك نوعين رئيسيين من تخزين المعلومات علي الذاكرة :

النوع الأول : المتغيرات ( Variables )

ما هو المتغير :

أعتقد أخي من أسمة واضح جداً معناة

فيمكننا من خلال إدراج قيم به متغيرة كما نشاء

فالمتغير هو عبارة عن مكان يتم حجزة في ذاكرة الحاسب ويتخصص له إسم ويكون له قيمة قد تتغير أثناء تنفيذ البرنامج ، وكل متغير يأخذ حيز في ذاكرة الحاسب RAM تدعي Address Path . فالمتغير يمكننا إستخدامة في القيم التي تتطلب لتغيرة بصفة مستمرة ، علي سبيل المثال رقم الطالب وإسم الطالب والنوع و .... الي آخرة

القواعد العامة لتسمية المتغيرات :

1- يجب أن يبدأ بحرف وليس رقم.

2- لا يزيد إسم المتغير عن 255 حرف .

3- يجب ألا يحتوي المتغير علي رموز خاصة مثل ( %$#@!ّ^&*-+=/\| ) ، ولكن يمكن إستخدام الرمز ( _ ) .

4- يجب ألا يكون إسم المتغير من الكلمات المحجوزة مثل Dim, Public أو الدوال مثل Val,Trim, .... الي آخرة .

5- لا يحتوي المتغير علي مسافات ( Space ) .

تعريف المتغيرات :

تعريف المتغير هو إعطاء إسم لهذا المتغير طبقاً للقواعد الموضحة أعلاة وتحديد الطرق المناسبة له ، والشكل العام له هو ما يلي :

< Extent > < Variable Name > As < Data Type >

حيث أن Extent هو مدي المتغير ، و Variable Name هو إسم المتغير ، أما Data Type هو نوع البيان

وإليك الطرق المختلفة لمعرفة مدي المتغير :

1- Dim : هي إختصار للكلمة Dimension ، أي مقاس المتغير وتكتب بهذه الصورة :

Dim Radius As Integer
Dim Price As Single
Dim Structure As Double
Dim FirstName As String
Dim LastName As String * 30

ويستخدم علي مستوي الملف في حالة تعريفة بقسم التصريحات العامة ، ويمكن إستخدامة علي مستوي إجراء محدد .

وإذا تم إغلاق النافذة يتم إغلاق كل شيء من الذاكرة خصوصاً بعد إستخدام الجملة التالية بحدث Form_Unload وهي :

Set Form1 = Nothing

ويبدأ دائماً المتغير المعرف بواسطة الكلمة المحجوزة Dim بالقيمة صفر في حالة إجراء تعريف المتغير من جديد ، أي إذا قمت بإدراجة بحدث زر أمر Command1_Click يتم تعريفة كل مرة بالقيمة الإفتراضية ( 0 ) إلا إذا قمت بكتابة جملة Base في قمة الملف .

2- Public : هذه الكلمة المحجوزة تستخدم في حالة إنشاء متغير من نوع عام علي مستوي التطبيق ككل ، ويجب إدراجة في وحدة نمطية Module ، ولكن إذا أحببت أن تدرجة في ملف غير الـ Module يجب عليك إستدعائة بكتابة إسم الملف ومن ثم كتابة إسم المتغير ، ولا يجوز له أن يدرج في إجراء بل يدرج علي مستوي الملف Declaration . ونفس شروطة هو نفس شروط الـ Dim .

3- Static : هذا النوع من مدي تعريف المتغيرات يستخدم علي مستوي الإجراء فقط لا غير ، حيث وظيفتة الأساسية هو الإحتفاظ بالقيمة القديمة التي أعطيت له عكس الـ Dim الذي لا يحتفظ بالقيمة القديمة علي مستوي الإجراء ، أما باقي الشروط فهو مطابق لـ Dim من حيث القيمة المبدئية .

4- Global : هذا النوع من المتغيرات لا يمكننا إستخدامة إلا علي مستوي الـ Module فقط لا غير ، وهو شبية بالـ Public ولكن الـ Public يمكننا إستخدامة علي مستوي الملفات العادية ( Form, Class, User Control .... الي آخرة ) ، أما الـ Global لا يمكننا إستخدامة سوي علي مستوي الـ Module ( الوحدات النمطية ) ، وبخصوص القيمة الإفتراضية فنفس فكر الـ Dim .

النوع الثاني : الثوابت ( Constant )

أولاً شروط كتابتة مماثل للمتغير ، ولكن يختلف عن المتغير بأن قيمتة ثابتة لا يمكن تغييرها ، فمن إسمة ( ثابت ) لا يتغير أثناء تشغيل البرنامج

ولكي يتم كتابة هذا النوع من التعريفات كما يلي :

Const < Variable Name > As <Data Type> = < Value >

ودائماً يكتب في حالة إستخدام قيمة معينة ثابتة يمكن أن ينساها المبرمج ، فعلي سبيل المثال لحساب نصف مساحة الدائرة نحتاج الي المعادلة التالية :

مساحة الدائرة = ط نق 2

ف ( ط ) هو ثابت رياضي قيمتة الإفتراضية ( 3.14 ) ، فحتي لا ينسي المبرمج القيمة يمكن تمثيلها في ثابت كما يلي :

Const PI As Single = 3.14

وهذا يتم علي مستوي الملف أو الإجراء .

وإذا أحببت أن تنشأ ثابت علي مستوي النموذج يمكن كتابتة في قسم التصريحات العامة

أما إذا كنت ترغب في إنشاء ثابت علي مستوي التطبيق يتم كتابة كلمة Public قبلها كما يلي :

Public Const PI As Single = 3.14

وهذا في حالة إذا كنت ترغب في إنشاء متغير علي مستوي النموذج أو علي مستوي التطبيق ( Module ) ولكن لا يجوز إنشاء هذه الطريقة علي مستوي الإجراء

ولكن يمكن بناء الطريقة كما يلي :

Global Const PI As Single = 3.14

هذه الطريقة لا بد إستخدامها علي مستوي التطبيق أي ( Module ) فقط لا غير ، ولكن لا يمكن إنشائة علي مستوي الملف

أما بخصوص الثوابت التي تعرف مع توابع API فهي معظمها رقمية ، ومتوبة بنظام السادس عشر كما يلي :

Const X = &H7

حيث الرقم H7 ليس رقم عشري أو ثنائي ولكنة رقم سادس عشر ويبدأ بالقيمة &

شكراً

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 5 أبريل 2008 في 21:32

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#3

شرح ممتاز

شكرا اخي لكن سؤالي :

&H7 :

هذا الرقم السادس عشري :

ماذا يعني حيث اني عملت :

Const X = &H7
form1.caption = x

اكيد تطلع ارقام :)

طبعا انا المستوى المتوسط اي عمري 14

واظن ان النظام السادس عشري يدرس في المرحلة الثانوية :)

startingprogremmer.jpg
#4

أولاً أخي أنا لم أدرس هذا في الثانوية ، حيث أنني قديم ولست حديث !!

ولكنني درستة في المعهد !!

الأخ الكريم ، الحاسب الآلي يحتوي علي ثلاثة لغات رئيسية ( بغض النظر عن أنواع البرمجة المختلفة ) !!!

هذه الأنوع هي :

1- اللغة ذات المستوي الراقي :

هي اللغة المفهومة للغة الإنسان نسبياً ، حيث يحتوي علي النظام العشري الذي يتكون من ( 0 ) الي ( 9 ) ، ومن أمثلة لغات المستوي الراقي ( VB6.0 - VB.NET - Basic - Bascal - C - ..... الي آخرة ) .

2- لغة ذات مستوي منخفض :

هي اللغة الوحيدة الذي يفهمها الحاسب الآلي وهي اللغة الثنائية التي تحتوي علي رقمين وهم ( 0 ، 1 ) . لذلك يطلق علي الحاسب الآلي الإشارات الرقمية لأن كافة إشاراتة وتخزيناتة علي مشغل السواقة تحتوي علي الأرقام الثنائية ( 0 أو 1 ) . وصعبة الفهم حتي علي للمستخدم الخبير .

من الصحيح أن مبرمج لغة التجميع يعتمد جزء عليها ولكن ليس كلياً ( مجرد فهم فقط لا غير ) .

3- لغة ذات مستوي رفيع :

هذه اللغة أرقي من اللغة العشرية ، حيث أنها مرنة عن العشري ، فتحتوي علي الأرقام السادس عشر بدئاً من الرقم 0 حتي الرقم 15 ، ولكن بالصورة التالية :

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

بحيث أن A هو الرقم 10 ، و B هو الرقم 11 ، ............. ، و F هو الرقم 15

أما اللغة الوحيدة التي تتعامل معها هي لغة التجميع Assimble ، حيث أن هذه اللغة هي اللغة الوحيدة التي يمكنها التعامل مع لغة الآلة مباشرتاً دون وسيط .

سبب وجود هذه اللغات :

السبب الرئيسي لوجود هذه اللغات هو الإنسان العادي والآلة ، حيث الإنسان العادي لا يفهم سوي لغتة العشرية أياً كان ( إنجليزي - فرنسي - عربي - صيني - .... الي آخرة ) ، أما الآلة فلا تفهم سوي اللغة الرقمية الثنائية .

فكان الحل الأمثل هو إيجاد لغة وسيطة تدعي ( لغة سادس عشر ) أو كما يقال ( لغة ذات مستوي رفيع ) !!!

فأي جملة ترسلها من برنامج مصنع بالفيجوال 6 كعلي سبيل المثال ، يرسل هذه القيمة الي لغة التجميع ، ومن ثم يقوم لغة التجميع بتحويل الرسالة الي لغة مفهومة للآلة ، ومن ثم تقوم الآلة بإجراء معالجاتها وبعد الإنتها ترتجع القيمة للغة التجميع مرة أخري ( ثنائي ) ، ثم يقوم لغة التجميع بعرضها للمستخدم العادي في النهاية الي لغة عشرية مفهومة للإنسان العادي .

لذلك أي لغة برمجة عشرية ( مستوي راقي ) يسمي ترجم Compiler ، وهذا الإسم أطلق علية لهذا الهدف ، والهدف هو تحويل العشري الي سادس عشر الي ثنائي ، ومن ثم إرتجاع النتيجة من ثنائي الي سادس عشر الي عشري .

وكل هذه العمليات تتم فيلحظات معدودة حسب سرعة جهازك الشخصي !!

لذلك أخي كلما أقتربت الي لغة الآلة كلما ذادت السرعة وكلما حدث بطء في فهمة ... وكلما إقتربت الي لغة مفهومة لك كلما كانت السهولة عالية والسرعة بطيئة نسبياً .

أخيراً أخي :

بخصوص الثابت :

Const X = &H7

فالقيمة هي رقم ( 7 ) ، وإذا أحببت أن تكتبها علي هذا الأساس فهذا سليم !!!

ولكن يمكنك كتابتها بالأرقام ( سادس عشر ) خصوصاً إذا كان الرقم كبير ، ولكي تجد أي متغير تم كتابتة بهذه الطريقة يمكنك التمييز بين الرقم العشري والسادس عشر بوضع قيمة قبل الرقم بكتابة H& ومن ثم تكتب الرقم كما تشاء !!!

ولكن إنتبة ، الرقم 7 إذا كتب يكون النتيجة ( 7 ) ، أما الرقم ( 77 ) يكون النتيجة ( 119 ) !!!

كيف تم ذلك ( هذا شيء يطول شرحة )

لكنني حاولت أن أوصل لك المعلومة مبدئياً بصورة خفية ، لكن موضوع التحويل من عشري الي سادس عشر ، أو من عشري الي ثنائي ، أو العكس يطول شرحة ( فمعزرتاً أخي ) .

ملحوظة أخيرة ، يمكنك تحويل الرقم بطرقية سهلة جداً ( من سادس عشر الي عشري ) وهو نسخ القيمة الرقمية ( &H77 ) الي سطر جديد بالفيجوال 6.0 ومن ثم سيقم لك بتحويل الرقم الي عشري كما تشاء .

شكراً

Pic.bmp

post-126779-1207467955_thumb.jpg

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 6 أبريل 2008 في 10:45

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#5

اخي انظر هذا الكود :

Const LWA_ALPHA = &H2
Const lay = &H80000


Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Dim Ret As Long



Private Sub Form_Load()
	Ret = lay
	SetWindowLong Me.hWnd, -20, Ret
	SetLayeredWindowAttributes Me.hWnd, 100, 255, 1
End Sub


Private Sub Slider1_Scroll()

		SetLayeredWindowAttributes Me.hWnd, RGB(10, 10, 10), Slider1.Value, LWA_ALPHA
End Sub

هل ممكن ان اعمله كالاتي ::

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Dim Ret As Long



Private Sub Form_Load()
	Ret = 524288
	SetWindowLong Me.hWnd, -20, Ret
	SetLayeredWindowAttributes Me.hWnd, 100, 255, 1
End Sub


Private Sub Slider1_Scroll()

		SetLayeredWindowAttributes Me.hWnd, RGB(10, 10, 10), Slider1.Value, 2
End Sub
startingprogremmer.jpg
#6
524288

هذا الرقم هو نفسه

&h8000

SetWindowLong Me.hWnd, -20, Ret

لماذا يحتاج setwindowlong الى هذا الرقم ؟؟

وماهو عمل هذه الدالة : setwindowlong

startingprogremmer.jpg
#7

نعم أخي يجوز ، طالما قمت بإستخدام نفس القيمة المدرجة بالثابت .

فإذا كان مدرج ( &H2 ) فيجب إدراج الرقم ( 2 ) ، أما إذا كان مدرج ( &H80000 ) فيجب إدراج الرقم ( 524288 ) كما فعلت بالضبط

ولكن معزرتاً لأنني ضعيف نسبياً في توابع API ، ولكن يمكنك شرح وظيفة التوابع لي إذا كان يواجهك أي مشكلة

شكراً

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 6 أبريل 2008 في 16:00

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#8

شكرا لك اخي الكريم :)

لماذا يحتاج هذا الكود لهذا الرقم : &h80000

مع شكري لك

اخي const تستعمل لاضافة خصائص الى function او ادوات ؟؟

startingprogremmer.jpg
#9
اقتباس
لماذا يحتاج هذا الكود لهذا الرقم : &h80000

صراحتاً لا أعلم أخي ، ولكن هذا مجرد باراميتر كما تعلم ، حيث هذا التابع API ما هو إلا Function مخزن بملف علي الويندو والباراميتر المدخل يمكنة أن يتغير بصفة مستمرة حسب نوع العملية التي ترغب في إجرائها !!!

بمعني أدق ، أنت قمت بإنشاء Function يقوم بإجراء عملية ( حذف ملف Kill - تحريك ملف Name - نسخ ملف Copy - تغيير إسم ملف Name - .... الي آخرة ) ، حيث قمت بإدراج باراميتر به بحيث إذا تم إدخال القيمة ( 1 ) يتم تنفيذ عملية الحذف ، وإذا تم إدخال الرقم ( 2 ) يتم إجراء نسخ الملف ، .... وهكذا

أنظر المثال :

Public Function FileEx(FileType As Integer) As Boolean
On Error GoTo ExitFileEx
	 If(FileType = 1)Then
		  Kill "C:\Data.dat"
	 ElseIf(FileType = 2)Then
		  CopyFile "C:\Data.dat", "D:\Data.dat"
	 End If
	 Exit Function
ExitFileEx:
	FileEx = False
End Function

ومن المؤكد أن هناك قيمة يمكن إدخالها أخري لها الباراميتر ، ولكن في نفس الوقت هناك باراميتر لا يستقبل سوي شيء محدد ، مثلاً مسار الملف ، أو إسم النموذج أو .... الي آخرة

اقتباس
اخي const تستعمل لاضافة خصائص الى function او ادوات ؟؟

أولاً الثابت ثابت لا يتغير ، اما الخاصية قيمتها تتغير طالما تم إدراج Get و Let أو Set بالخاصية !!!

ولكن الخاصية لها أسلوبها الخاص !!!

أما بخصوصو إضافة خصائص الي Function فكيف أخي !!!

هل تقصد إضافة خصائص داخل Class .

شكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#10
اقتباس
هل تقصد إضافة خصائص داخل Class .

بالضبط

startingprogremmer.jpg
#11

السلام عليكم

الدالة SetWindowLong تقوم بإعادة وضع أحد خواص النافذة مثل Window procedure-style-ExStyle واشياء أخرى ...

تأخذ ثلاث بارامترات الأول وهو مقبض النافذة التي تريد تغيير خصائصها

الثاني وهو لتحديد الخاصية التي تريد تغييرها , في المثال كانت القيمة -20 وهي تعبر عن GWL_EXSTYLE أي سنقوم بتغيير الـExtended Style .

الثالث وهو القيمة الجديدة لهذه الخاصية وفي هذا المثال كانت 0x8000 وهي تعبر عن WS_EX_LAYERED أي سنعطي خاصية الشفافية لهذه النافذة .

لمزيد من المعلومات راجع هذه الصفحة :

http://msdn2.microsoft.com/en-us/library/ms997507.aspx

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#12
اقتباس
اقتباس
هل تقصد إضافة خصائص داخل Class .

بالضبط

لا يا أخي ، صفة بناء الخصائص بالكلاس مثل صفة بناء الخصائص بعنصر التحكم مثل صفة بناء الخصائص بأي مكان آخر تختارة ، فهو كما يلي :

Public Property Get Caption() As Variant

End Property

Public Property Let Caption(ByVal vNewValue As Variant)

End Property

حيث يحتوي علي إجرائين ، الأول Get والثاني Let !!!

الوظيفة Get هي الوظيفة الخاصة لجلب معلومات من الخاصية ، أما الوظيفة Let هي المسئولة عن إرسال قيمة جديدة للخاصية ، وإليك مثال بسيط :

نحتاج لبناء Class يحتوي علي خاصية تدعي FormatEx ، يتم إرسال هذه الخاصية بقيمة معينة ويرتجعها بتنسيق معين !!!

أتبع الخطوات التالية :

1- أفتح Class جديد وأكتب بداخلة الكود التالية :

Option Explicit
Private strFormat As String

Public Property Get FormatEx(Optional FormatString As String) As String
	FormatEx = Format(strFormat, FormatString)
End Property

Public Property Let FormatEx(Optional FormatString As String, ByVal NewValue As String)
	strFormat = Format(NewValue, FormatString)
End Property

حيث في الكود السابق يحتوي علي متغير strFormat الذي يستقبل معلوماتة من الخاصية FormatEx بالإجراء Let ، حيث في الإجراء يتم إستقبال القيمة حسب التنسيق المدخل !!!

أما في الإجراء Get يستخدم في إرتجاع القيمة من جديد بتنسيق معين ، ليس من الشرط أن يتم إرتجاع القيمة بنفس التنسيق المرسل ، حيث يمكن أن يكون المتغير منسق بأسلوب معين ، ولكن عند إرتجاع نفس القيمة يمكننا بإرتجاعة بتنسيق معين .

2- أفتح نموذج جديد وأدرج به زر أمر ومن ثم أكتب بداخلة الكود التالي :

Option Explicit
Dim c As New Class1

Private Sub Command1_Click()
	c.FormatEx("yyyy/mm/dd") = Date
End Sub

Private Sub Command2_Click()
	Me.Caption = c.FormatEx("dddddd")
End Sub

لاحظ أخي أننا أرسلنا قيمة التاريخ الحالي بالتنسيق ( "yyyy/mm/dd" ) بحيث أن يكتب بالعربي داخل الكلاس ( من اليمين الي اليسار ) وذلك في زر أمر ( Command1 ) .

أما في زر أمر ( Command2 ) فيتم إرتجاع نفس القيمة المرسلة من قبل علي شكل ( yyyy/mm/dd ) ، يتم إرتجاعها بالشكل ( "dddddd" ) أي تاريخ طويل ( 07 ابريل، 2008 ) .

لكن بالنسبة للأمر Const فيمكننا إستخدامها في أي وقت وأي ملف بالشروط المدرجة من قبل ، ولكن إذا أحببت أن تدرج Const داخل Class في هذه الحالة يجب عليك إنشاء ثابت يحتوي علي Const فقط لا غير دون إستخدام جملة Public فأحياناً لا يقبلها .

اقتباس
السلام عليكم

الدالة SetWindowLong تقوم بإعادة وضع أحد خواص النافذة مثل Window procedure-style-ExStyle واشياء أخرى ...

تأخذ ثلاث بارامترات الأول وهو مقبض النافذة التي تريد تغيير خصائصها

الثاني وهو لتحديد الخاصية التي تريد تغييرها , في المثال كانت القيمة -20 وهي تعبر عن GWL_EXSTYLE أي سنقوم بتغيير الـExtended Style .

الثالث وهو القيمة الجديدة لهذه الخاصية وفي هذا المثال كانت 0x8000 وهي تعبر عن WS_EX_LAYERED أي سنعطي خاصية الشفافية لهذه النافذة .

لمزيد من المعلومات راجع هذه الصفحة :

كودhttp://msdn2.microsoft.com/en-us/library/ms997507.aspx

شكراً أخي الكريم ، ويارب يجعلة في ميزان حسناتك

شكراً

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 7 أبريل 2008 في 10:49

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook