برامج

لآول مرة (دروس في الرسم بالفجوال بيسك):0 [الأرشيف] - برامج نت

المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : لآول مرة (دروس في الرسم بالفجوال بيسك):0


hamata00
12-08-2006, 08:32 PM
http://www.9o9i.com/uploads/5f64be0b4c.gifاخواني في منتدى الفجوال بيسك السلام عليكم
اود ان اتطرق الى موضوع الرسم في الفورم في لغة الفيجوال بيسك
و ارجو ان ينال رضاكم و ارجو المشاركة من الاخوة المختصين

اولا من الصيغ الاساسية للتعامل مع الالوان الدالتين
pset( , )
point( , )

و هما عكس بعضهما
فالدالة الاولى تقوم بارسال لون لنقطة محددة مثلا

CODE

pset(100,100)



ترسل الي النقطة ذات الاحداثيات (100و100) لونا =لون الخط في الفورم
form1.forecolor
والوضع الطبيعي هو اللون الاسود ما لم يغيره المستخدم

بالنسبة للاحداثيات في الشاشة :
تعتبر النقطة اعلى يسار الشاشة هي النقطة (0و0)والتدرج يذداد كلما اتجهنا يمينا او الى اسفل
اي ان المحور الراسى معكوس من ما معتاد لنا في الرسم البياني

نعود الان الى الالوان ونفرض اننا نريد ان نضع نقطة بيضاء في النقطة (50و150) فيصبح الكود

CODE

pset(50,150),vbwhite



ستلاحظ ان النقطة صغيرة جدا و يمك التحكم في حجم النقطة عن طريق

CODE

form1.drawwidth=7



و وضع اي رقم بدلا 7 التي في المثال
بالنسبة للالوان توجد عدة طرق لكتابتها ..اشهرها
vbcolor
مثل
vbwhite,vbred , vbblack
و غيرها من الالوان و لكن في بعض الاحيان تحتاج لدرجة لون محددة و هنا نستعمل
rgb( , , )
و هي الحروف الاولى للالوان احمر اخضر و ازرق
فنضع في البارميتر درجة كل لون من الالوان الثلاث ( وهي الالوان الاساسية ) لنحصل على درجة اللون المطلوب
مع ملاحظة ان درجة اللون تتدرج من 0 الى 255

الصيغة point
تقوم بالعملية العكسية فباختيار اي نقطة تقوم هذه الدالة بارجاع درجة لونها
لنجرب الان هذا المثال

CODE

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
form1.drawwidth=7
pset(x,y),rgb(100,100,100)
end sub


سيقوم البرنامج برسم خطوط متقطعة اقرب الى نقاط متقطعة مع حركة الماوس
لمعالجة التقاطعات نستعمل دالة اخرى و هى
line(,)-(,)
وباعطاء احداثيات نقطتين يتم رسم خط بينهما مثلا
مع اضافة
text1 and text2 to the form

CODE

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Form1.ForeColor = vbRed
Line (X, Y)-(Val(Text1.Text), Val(Text2.Text))
Text1.Text = X
Text2.Text = Y
End Sub



مواصلة لما انقطع من حديث سأعدل في اخر مثال
و قد كان يرسم خطوطا كلما تحرك الماوس
و نود الان ان نحكم ذلك بالا يرسم ما لم يضغط المستخدم على الماوس
اولا نحتاج الى متغيير
global
و لنسمه
x1
(أي أنه متاح لكل جزئيات الفورم)
نصرح عن المتغيير في اعلى الكودفي جزئية
general
الان سنعطى هذا المتغيير القيمة 1 اذا كان الماوس مضغوطا و القيمة 0 في غير ذلك

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
x1=1
end sub

Private Sub Form_Mouseup(Button As Integer, Shift As Integer, X As Single, Y As Single)
x1=0
end sub
الان سنعيد نفس الكود في الدرس السابق مع مراعاة التنفيذ اذا كان المتغيير =1
ليصبح كل الكود كما يلي

CODE

dim x1 as integer

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
x1=1
end sub
Private Sub Form_Mouseup(Button As Integer, Shift As Integer, X As Single, Y As Single)
x1=0
end sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Form1.ForeColor = vbRed
if x1=1 then
Line (X, Y)-(Val(Text1.Text), Val(Text2.Text))
Text1.Text = X
Text2.Text = Y
End if
End Sub



مع مراعاة ان الفورم يجب ان يحتوي على
text1 and text2



الان وصلنا الى رسم اشكال مثل الدائرة
و صيغة رسم الدائرة بسيطة

CODE

circle(x,y),(100)



حيث البارمترين الاولان للمركز و البارميتر الثالث لنصف القطر
يمكنك قبل ان تحدد لون المحيط بالصيغة
form1.forecolor=(color)
مثلا
او
circle(x,y),(200),vbwhite

اما لون التعبئةفبالصيغة
form1.fillcolor=(color)
و لكن لاضافة تعبئة فعليك ان تختار واحدة من ثمانية انواع للتعبئة
0 وهي تعبئة كاملة
1 بدون تعبئة او شفاف
2 خطوط افقية
3 خطوط راسية
4-5 خطوط مائلة
6 خطوط متقاطعة
7 خطوط متقاطعة مائلة
لتعبئة خطوط متقاطعة مثلا نستعمل الصيغة

CODE

form1.fillstyle=6



يمكن ادراج جزء من الدائرةوذلك باضافة عدد بين 0 الى 6 بعد صيغة الرسم للدائرة و ذلك كالاتي

CODE

circle(x,y),(100),,3



وصلنا الان الى حفظ الرسم و صيغته

CODE

SavePicture Form1.Image,"C:\flower.bmp"



نلاحظ انه يقبل بارمترين ..الثاني نكتب فيه المسار و اسم الرسم مع الامتداد
اذا اردت اعطاء المستخدم حرية مسار الحفظ نستعمل من components الاداة ms common dialog
مع استعمال الصيغة .save في كود الحفظ

اود الان ان اضيف جملتين لاحد الاكواد المكتوبة لتزيد من امكانية البرنامج

CODE

dim x1 as integer

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = X
Text2.Text = Y
x1=1
end sub
Private Sub Form_Mouseup(Button As Integer, Shift As Integer, X As Single, Y As Single)
x1=0
end sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Form1.ForeColor = vbRed
if x1=1 then
Line (X, Y)-(Val(Text1.Text), Val(Text2.Text))
Text1.Text = X
Text2.Text = Y
End if
End Sub


لاحظ اننا اضفنا قيم لtext1 , text2 داخل كود ال MouseUp
بحيث انه يمكن رسم خطوط منفصلة كلما ضغطنا الماوس ضغطة جديدة

الان حاول ان ترسم اي شيء ثم قم بتصغير الفور م minimize ثم اعده ستلاحظ ان الرسم قد اختفى ...لتحاشي اختفاء الرسم اضف السطر التالي في الform_load

CODE

Form1.AuteRedraw=True

لننتقل الان الى مرحلة اخرى و هي التحكم بصور موجودة اصلا في الجهاز
و هنا سنعود الى الصيغة point()
المثال الاول سندرج صورة الى الفورم ثم نقوم بنسخ صورة منها على نفس الفورم
لنسمي الصورة image1
ثم نستعمل الكود التالي

CODE

Private Sub Command1_Click()
Dim x
Image1.Stretch = True
Image1.Move 0, 0, 2000, 1000
For i = 0 To 2000 Step 10
For j = 0 To 1000 Step 10
x = Point(i, j)
PSet (i, j + 2000), x
Next
Next
End Sub


كل ما تحتاجه هنا command و image
اما في حالة اردنا نسخ الصورة بشرط ان تكون النسخة معكوسة
نستعمل الكود السابق مع هذا التعديل

CODE

Private Sub Command1_Click()
Dim x
Image1.Stretch = True
Image1.Move 0, 0, 2000, 1000
For i = 2000 To 0 Step -10
For j = 0 To 1000 Step 10
x = Point(i, j)
PSet (2000 - i, j + 2000), x
Next
Next
End Sub

ساحاول ان اوجز بعض الدروس في الحركة
لنفرض اننا نريد ان نرسم دائرة سوداء تتحرك
نستعمل التايمر و نجعل خاصية الenabled = false و خاصية interval=50
ثم نضيف زر للفورم اضف الكود التالي

CODE

Dim x As Integer
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Cls
x = x + 100
Circle (x, 5000), (500)
End Sub




الامر cls يقوم بمسح محتويات الشاشة من رسومات و كتابة الان داخل كود التايمر لاحظ الاتي اولا نمسح محتويات الشاشة ثانيا المتغير x و هو الاحداثي السيني لمركز الدائرة نقوم بتغييره بمقدار معين و نرسم الدائرة الجديدة بعد تغيير الاحداثي السيني

لاحظ انه يمكن تغيير كل من الارقام و الاحداثي الصادي لنجعل التحرك في اتجاهات مختلفة


انتهي الدرس

البرنامج برعايه:0
1.hamata00
2.ahmed ksnv

Ahmed_ghanam
12-08-2006, 09:18 PM
مشكورين على الدرس اخوانى الكرام

ahmed ksnv
12-08-2006, 09:22 PM
مشكورين على الدرس اخوانى الكرام

مشكور على المرور أخي الكريم

Benghanem
12-08-2006, 10:23 PM
بارك الله فيك اخي الكريم على هاد الموضوع القنبلة:smailes44:

veto_44
12-08-2006, 11:12 PM
بارك اللهم فيك اخي موضوع مميز ومختلف عن الباقي
بارك الله فيكم جميعا ولكم خالص التقدير والاحترام .

^الفجر^
12-09-2006, 02:19 PM
شكرا على الموضوع ..:smailes37:

hamata00
12-09-2006, 02:56 PM
شكرا على الموضوع ..:smailes37:

شكرا علي الرد الحلو

(li) صقر (li)
12-09-2006, 05:26 PM
شكراً لكما على الموضوع وننتظر اللتكملة ( إن وجدت يا ريت )

Euro
12-12-2006, 09:44 PM
حاجة حلوة قوي شكرا

hamata00
01-07-2007, 05:50 PM
شكرا علي ردودك اخواني الكرام

shush
01-07-2007, 09:25 PM
مشكوريين جدايا اخوان
واذا في بقيه افيدونا فيها

zo0oma
01-07-2007, 09:43 PM
مشكووووووووووووووووووور

hamata00
03-24-2007, 09:10 PM
شكرا علي مروركم