عبد الله فتحي

تعلم الرسومات في فيجول بيزيك

4 ردود في هذا الموضوع

هذا الدرس منقول ولا أعرف من هو مؤلفه

جعلها الله في ميزان حسناته

الرسومات في فيجوال بيزيك

الالوان : هناك طريتقتين لتحديد الالوان فى لغة الفيجوال بيزيك

1- باستخدام الوظيفة RGB Function لتحديد قيمة الالوان الاساسية ( احمر ، اخضر ، ازرق)

RGB (0, 128, 0 )

يمكن اعطاء قيمة الالوان من O الى 255

امثلة :

FORM1. BACKCOLOR = RBG (0,128, 0 ) ( Green)
FORM2. BACKCOLOR = RGB (255 , 255, 0 ) (Yellow)
Pset ( 100, 100), RGB ( 0,0,64) ' Set Point to blue dark

- استخدام الوظيفة QBCOLOR

وهى تحدد قيمة الالوان طبقا لجدوال الالوان الموجودة فى ميكروسوفت كويك بيزك

وهى الالوان من 0 الى 15، مثال :

FORM1.BACKCOLOR = QBCOLOR (5)  

لانشاء الرسوم فى تطبيق يمكن استخدام ايكونات التحكم فى مسطرة الادوات:

Shape Control
Line Control

اضافة الصور للتطبيق :

من السهل اضافة الصور خلال مرحلة التصميم

* لعرض صورعلى سطح الفورمة :-

اضغط خاصية picture للفورمة ثم قم باختيار

الصورة المراد عرضها على سطح الفورمة

* او يمكن استخدام أداة image او picture وذلك بسحب الاداة المطلوبة وادراجها فى الفورمة ، ثم من نافذة الخواص Properties List خاصية picture حمل الصورة المطلوبة لاحظ الفرق بين اداة image ، واداة picture

فالاداة picture بها خاصية autosize لامكانية ضبط ابعاد الاداة حسب حجم الصورة ، والاداة image ليس لها هذه الخاصية .

كما يمكن استخدام اللصق واللزق / او النسخ واللصق من اى برنامج أخر مثل paint brush

ولتحميل الصورةاُثناء التشغيل :-

نستخدم الوسيلة LoadPicture كما يلى ** ادرج على فورمة اداة صورة picture وغير اسمها الى picShow .

** لتحميل صورة home.jpg من الدليل c:\images اكتب الامر كما يلى

PicShow.Picture = LoadPicture ("C:\images\home.jpg")

ويمكن استخدام loadpicture لتحميل صورة من اداة/ او صندوق صورىة اخر فاذا كان لدينا اداة image تسمى imgShow فى نفس الفورمة ونريد أن ننسخ الصورة الموجودة فى picShow فى هذه الاداة ، نستخدر الامر التالى :-

Set imgDisplay.Picture = PicDisplay.Picture  

يمكن استخدام الوظيفة Load Picture لحذف صورة اثناء التشغيل كمايلى :

Set imgDisplay.Picture = LoadPicture("")  

الرسم فى VB

تستخدم اوامر الرسم فى vb لرسم نقط Pset او خطوط Line او دوائر circle

رسم النقط :-

يتم تحديد موقع النقطة على الشئ المراد الرسم داخله ، ولتكن موقع النقطة داخل هذا الشئ هى 50,70 يكون الامر كالتالى

Pset(50,70)

يمكن استخدام الالوان - انظر درس الالوان فى vb - كما يلى

Pset(50,70),RGB(0,0,255)  

جرب المثال التالى لرسم نقط عشوائية على الاداة الحالية

sub DrawPointsRnd()
         R= 255 * Rnd
         G= 255 * Rnd
         B = 255 * Rn
         XPos = Rnd * Scale Width
         Ypos = Rnd * Scale Height
         Pset (Xpos, Ypos), RGB ( R,G,B)
END SUB

رسم الخطوط والاشكال الرباعية :-

يستخدم امر line لرسم خط بين نقطتين كما يلى

line(50,50)-(700,500)  

ويستخدم الامر line لتوصيل خط من اخر نقطة تم رسمها لنقطة اخرى كما يلى

line -(1000,1000)  

لقد تم رسم الخط من اخر نقطة تم رسمها (500,700) الى النقطة (1000,1000) - لاحظ استخدام "-" كما يمكن رسم الاشكال الرباعية - المستطيل او المربع - بألامر line كما يلى

Line(500,500)-(1000,1000),,B  

لقد تم رسم شكل رباعى طول ضلعه 500 (تويب) من النقطة (500،500) ( اى الى النقط (1000،1000) ويمكن أن نرسم نفس هذا الرسم بأستخدام step والتى نستخدمها لنسب النقط واحدة بالاخرى انظر المثال لتفهم مااعنيه :

Line (500,500) - step (1000, 0)
Line- step (0,1000 )
Line - step( - 1000 , 0)
Line- step ( 0, -1000)

الخطوة الاولى باستخدام step رسمنا خط طوله 1000 تويب من عند النقطة 500 موازيا للمحور x

الخطوة الاولى باستخدام step رسمنا خط طوله 1000 تويب من عند النقطة 500 موازيا للمحور y عموديا على الخط الاول

وهكذا .. رسمنا الشكل الرياعى باستخدام step

لاحظ علامتى ",," فهما يستخدمان لادراج اللون ، كما أن استخدام حرف b يستخدم لرسم شكل رباعى مفرغ ، ولرسم شكل رياعى مصمت نستخدم bf كما يلى

line(500,500)-(1000,1000),qbcolor(4),bf  

لقد رسمنا شكلا رباعيا مصمتا لونه احمر - راجع درس الالوان -

لاستخدام هذه الاساليب لابد من تحديد الكائن object ، والا سيعتبر VB ان الكائن المراد الرسم عليه هى الفورمة التى تنادى الكود .

***المثال التالى برسم على الفورمة MyForm

MyForm.pset( 500, 500)  

***المثال التالى يرسم فى صندوق صورة يسمى PicShow

PicShow.Pest (500, 500)  

***المثال التالى يرسم فى الفورمة الحالية :

Pest ( 500 , 500 )

***استخدام CLS لمسح الشاشة :

PicShow.cls  

رسم الدوائر

[Object.] Circle[Step] (x,y), Radius [ , Color]  

المثال يرسم دائرة نصف قطرها raduis عشوائى وبالوان عشوائية :

Sub CircleDemo ( )
  Dim Radius
  R = 255 * Rnd
  G = 255 * Rnd
  B = 255 * Rnd
  Xpos = ScaleWidth/12
  Ypos = ScaleHeight/12
  Radius = (( YPOS * 0.9) +1) * Rnd
  Circle ( Xpos,Ypos) , Radius , RGB(R,G,B)
END SUB

لرسم القوس :

لابد من تحديد الزاوية او نقطة البداية والنهاية

[ Object.] Circle[Step] (x,y), Radius, [color], Start,End[, aspect]  

قيمة aspect هى النسبة بين البعد العمودى و البعد الافقى

ويمكن رسم الشكل البيضاوى كما فى المثال التالى :

Private sub form-click( )
  FillStyle = 0
  Circle ( 600, 1000) , 800 ,,,, 3
  FillStyle = 1
  Circle ( 1800 , 1000) ,800,,,, 1/ 3
END SUB

لاحظ استخدام fillstyle ، فاذا كانت قيمتها = صفر فأن الرسم يكون مفرغا ، واذا كان يساوى واحد فأن الرسم يكون مصمتا

انشاء رسم بسيط متحرك Animation

ي

مكن انشاء رسم بسيط متحرك وذلك بالتبادل فى اظهار رسمين او اكثر كما يمكن ذلك بتحريك الصورة :

- ضع اداة الصورة PICTURE على سطح الفورمة ، غير الاسم الى picIcon

- انسخ هذه الاداة والصقها بالفورمة ، ستظهررسالة لانشاء مصفوفة من اداة الصورة picIcon

- كرر ذلك ثانية

- اصبح لديك الان ثلاث ادوات لصندوق الصور هى picIcon(0),picicon(1),picIcon(2)

- ضع صندوق صورة على الفورمة وغير اسمها الى picDisp

- الان من قائمة الخواص حدد الايكونة التى تظهر فى كلا من صناديق الصور الثلاث الاولى وهى صور اشارة المرور الخضراء والانتظار الصفراء والحمراء بالتوالى

وستجد هذه الصور فى مكتبة الصور القادمة مع vb6 على مجلد common/graphics/icons/traffic

- ضع اداة المؤقت timer

- فى حدث timer1_timer اكتب الاوامر

Private Sub Timer1_Timer()
If Form1.picDisp = PicIcon1(0).Picture Then
    Form1.picDisp = PicIcon1(1).Picture
ElseIf Form1.picDisp = PicIcon1(1).Picture Then
    Form1.picDisp = PicIcon1(2).Picture
ElseIf Form1.picDisp = PicIcon1(2).Picture Then
    Form1.picDisp = PicIcon1(0).Picture
End If
End Sub

جرب تشغيل هذا البرنامج ، هل رأيت الاشارات الثلاث يتبادلن الظهور فى صندوق الصور picDisp ، اذا حدث ذلك فقد نجحت والا اعد كتابة البرنامج لاتنسى ان تكتب الامر التالى فى form1_load

Form1.picDisp = PicIcon1(0).Picture  

هل عرفت لماذا ؟

الان فلتجرب هذا البرنامج :

- ضع اداة المؤقت timer ، اضبط مواصفة interval =500 - او اكثر اذا اردت أن تجعل الاستجابة بطيئة - واكتب الاوامر التالية

Private Sub Timer1_Timer()
Dim OldDrawStyle%
OldDrawStyle% = Form1.DrawStyle
Form1.DrawStyle = vbSolid
DrawRubberBand picDisp.Top, picDisp.Left, picDisp.Height, picDisp.Width
Form1.DrawStyle = OldDrawStyle%
End Sub

- اكتب الاجراء التالى

Sub DrawRubberBand(ByVal x1, ByVal y1, ByVal x2, ByVal y2 As Single)
Dim OldDrawMode%
OldDrawMode% = Form1.DrawMode
Form1.DrawMode = vbInvert

Line (y1 - 10, x1 - 10)-(y2 + y1 + 10, x2 + x1 + 10), , B
Form1.DrawMode = OldDrawMode%
End Sub

لاحظ استخدام اوامر drawmod ,drawstyle

استخدام Anto Redraw :

خاصية AntoRedraw هى خاصية boolean والتى بضبطها الى TRUE يجعل مخرجات الرسم تخزن فى ذاكرة الحاسب .

فعند عرض نافذة فوق نافذه اخرى ، يجب حفظ النافذه الاولى بالذاكرة حتى يمكن اعادتها ثانية بعد انتهاء استخدام النافذة الثانية ، لذا يجب ان تضبط خاصة ِAutoRedraw للاولى الى TRUE والثانية الى FALSE ( حتى يمكن الغاؤها تماما ).

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا على هذة المعلومات المفيدة

ولوسمحت كان فى سوال ارجو الرد علية

كيف اجعل لزر كوماند لونا غير لونة هل يمكن ان اغير لونة ولا لونة هذا ثابت لا يتغير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم يمكن تغيير لون الكوماند عن طريق خاصيتين وهما

backcolor

حيث تختار ال balette

والخاصية الثانية هي

style

حيث تجعلها graphical

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تحية طيبة وبعد

بداية اود ان اشكر جميع الاعضاء والمشرفين وكذلك ادارة الموقع على هذا الصرح العلمي الذي تعلمنا منه الكثير وكان ذلك بجهود هؤلاء الاعضاء والمشرفين الذين تميزوا باعطاء الدوروس فجزاهم الله كل الخير ووفقهم لما فيه الخير والنجاح .

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .