View Full Version : آموزش: خاصيت هاي و متدهاي Negotiate, CausesValidation, ClipControls, HasDC, LinkItem, Font, PaintPicture
vbhamed
سه شنبه 12 مرداد 1389, 18:11 عصر
سلام
يكي از تو تاپيك زير دوستان سؤالاتي راجع به موارد بالا پرسيدن كه جوابش واسه بقيه هم مي تونه خيلي مفيد باشه، براي همين تو اين تاپيك جوابشون رو مي دم
http://barnamenevis.org/forum/showthread.php?t=237015
خاصيت هاي و متدهاي Negotiate, CausesValidation, ClipControls, HasDC, LinkItem, Font, PaintPicture
CausesValidation
بعضي ابزارها مانند TextBox متدي به نام Validate دارند كه خيلي مفيده و ميشه قبل از خروج از TextBox هر چيزي رو چك كرد مثلا اينكه مقدار وارد شده در اون صحيح است يا خير
فرض كنيد در قسمتي از برنامه، كاربر بايد عددي بين 1 تا 10 رو وارد كنه
يك TextBox روي صفحه بزاريد
اين دستورات رو بنويسيد
Private Sub Text1_Validate(Cancel As Boolean)
If Val(Text1) < 1 Or Val(Text1) > 10 Then
Cancel = True
MsgBox "Error : Enter 1...10"
End If
End Sub
حالا اگر كاربري چيزي يا عددي غير از محدوده 1 تا 10 وارد كنه نمي تونه از TextBox خارج بشه و روي كنترل ديگه اي بره !
اما اگر خاصيت CausesValidation مثلا يك دكمه رو False كنيم فقط روي اون دكمه خاص مي تونه بره
البته نمي تونيد كلك بزنيد و از اون دكمه روي جايي ديگه بريد چون برمي گرده روي TextBox !!!
مثال :
vbhamed
سه شنبه 12 مرداد 1389, 18:12 عصر
ClipControls
اين دستورات رو بنويسيد
Private Sub Form_Paint()
BackColor = &HFFFFFF * Rnd
End Sub
وقتي فرم از صفحه خارج ميشه، بزرگ و كوچك ميشه يا فرمي روي فرم ما مياد و بعد ميره، رويداد Paint اتفاق ميفته
حالا برنامه رو اجرا و با ماوس فرمتون رو از صفحه مانيتور خارج و وارد كنيد يا اينكه اون رو Maximize و Normal كنيد
اين بار خاصيت ClipControl رو False و همون كار رو تكرار كنيد
خودتون همه چي رو مي بينيد
در حقيقت اين دستور تعيين مي كنه وقتي روي فرم به هر دليل پوشانده شد يا قسمتي يا كل فرم مخفي شد و بعد ظاهر شد تمام فرم دوباره رسم بشه يا همون قسمت
در مورد همه كنترلهاي داراي اين خاصيت همينطوره
مثال :
vbhamed
سه شنبه 12 مرداد 1389, 18:13 عصر
PaintPicture
با اين دستور مي تونيد تصوير درون يك پيكچرباكس يا فرم رو روي همون پيكچر باكس يا فرم يا پيكچر و فرم ديگه رسم كنيد، ضمن اينكه ميشه سايزش رو هم به دلخواه تغيير داد
روي يك فرم يك عكس به اندازه تمام صفحه بزاريد و دو تا پيكچر باكس با سايز 4500 * 3000 هم بزاريد و خاصيت AutoRedraw اونها رو True كنيد بعد دستورات زير بنويسيد
Private Sub Form_Load()
Picture1.PaintPicture Me.Image, 0, 0, 4000, 2000, 0, 0, 16000, 8000
Picture2.PaintPicture Me.Image, 0, 0, 4000, 2000, 0, 0, 2000, 1000
End Sub
vbhamed
سه شنبه 12 مرداد 1389, 18:13 عصر
Font
اين خاصيت فونت PictureBox رو تعيين مي كنه
ميشه هم تو PictureBox و هم تو فرم نوشت
يك PictureBox بزاريد و خاصيت AutoRedraw رو True كنيد
Private Sub Form_Load()
Picture1.DrawWidth = 4
Picture1.Line (1000, 1000)-(2000, 200), vbMagenta
Picture1.PaintPicture Me.Image, 0, 0, 4000, 2000, 0, 0, 16000, 8000
Picture2.PaintPicture Me.Image, 0, 0, 4000, 2000, 0, 0, 2000, 1000
Picture1.ForeColor = vbRed
Picture1.Font.Name = "tahoma"
Picture1.Font.Size = 30
Picture1.CurrentX = 800
Picture1.CurrentY = 100
Picture1.Print "This is a test"
Picture1.DrawWidth = 4
Picture1.Circle (1000, 1000), 600, vbYellow
Picture1.DrawWidth = 4
Picture1.Line (1000, 1000)-(2000, 200), vbMagenta
End Sub
مثال :
vbhamed
سه شنبه 12 مرداد 1389, 18:14 عصر
HasDC
كاربرد اين خاصيت يك مقدار تخصصي است
تعيين مي كند كه آيا ويندوز به اين پيكچر باكس يك زمينه منحصر به فرد اختصاص دهد تا با توابع API بتوان روي اين پيكچر چيزي رسم كرد يا خير
زمينه هم يعني فضايي است در حافظه مشابه مستطيلي به اندازه پيكچر باكس مورد نظر كه اطلاعات مربوط به چيزهاي رسم شده درون پيكچر توسط توابع API رو در خودش نگه مي داره
vbhamed
سه شنبه 12 مرداد 1389, 18:15 عصر
LinkItem
براي برقراري ارتباط بين دو برنامه مختلف استفاد ميشه
يك TextBox و يك دكمه روي فرم بزاريد
دستورات زير رو بنويسيد
Private Sub Command1_Click()
Dim CurRow As String
Static Row ' Worksheet row number.
Row = Row + 1 ' Increment Row.
If Row = 1 Then ' First time only.
' Make sure the link isn't active.
Text1.LinkMode = 0
' Set the application name and topic name.
Text1.LinkTopic = "Excel|Sheet1"
Text1.LinkItem = "R1C1" ' Set LinkItem.
Text1.LinkMode = 1 ' Set LinkMode to Automatic.
Else
' Update the row in the data item.
CurRow = "R" & Row & "C1"
Text1.LinkItem = CurRow ' Set LinkItem.
End If
End Sub
نرم افزار اكسل رو اجرا كنيد و در ستون اول سطر اول تا مثلا دهم هر چي دلتون خواست بنويسيد
برنامه رو اجرا كنيد و به طور مداوم روي دكمه كليك كنيد و TextBox رو ببينيد
تو دستورات بالا منظور از R1 سطر يكم و منظور از C1 ستون يكم در شيت اكسل مي باشد
در كدهاي بالا برنامه با اولين شيت از فايل باز شده در نرم افزار اكسل مرتبط شده و اطلاعات ستون اول رو به ترتيب نمايش ميده
مثال :
vbhamed
سه شنبه 12 مرداد 1389, 18:20 عصر
NegotiatePosition
فرض كنيد شما با استفاده از كنترل OLE كه تو نوار ابزار هست (آخرين ابزار) يك برنامه مثلا Microsoft Word Document رو به برنامتون اضافه ميكنيد
حالا اگر برنامتون رو اجرا كنيد و روي كنترل OLE دابل كليك كنيد، منوهاي نرم افزار Word تو نوار منوي برنامه شما ظاهر ميشه
با استفاده از اين خاصيت مي تونيد تعيين كنيد كه در اين حالت منوهاي فرم خود شما تو نوار منو اول ظاهر بشن يا وسط يا آخر
vbhamed
سه شنبه 12 مرداد 1389, 18:21 عصر
WindowList
فرض كنيد يك فرم MDI داريد با 3 فرم فرزند
اگر ديده باشيد تو اكثر برنامه هاي منوي Window وجود داره كه مي تونه بين فرزندهاي مختلف سوئيچ كنه
ضمنا وقتي يك فرم فرزند فعال ميشه منوهاي تعريف شده در اون فرم تو فرم MDI ظاهر ميشه
اين خاصيت براي ايجاد همون منوي Window هست كه البته اسمش دست خودتونه
بنابراين شما كارهاي زير رو انجام بدين
يك فرم MDI اضافه كنيد
مثلا 3 فرم معمولي اضافه و گزينه MDIChield اونها را True كنيد
تو تمام فرمهاي فرزند منويي با نام Window ايجاد كرده و گزينه Window List اون رو علامت بزنيد، ضمنا اين گزينه فقط براي يك دونه از منوهاي هر فرم قابل علامت زدن هست
تو MDIForm_Load فرم MDI اين دستورات رو بنويسيد
Private Sub MDIForm_Load()
Form1.Show
Form2.Show
Form3.Show
End Sub
برنامه رو اجرا كنيد
با اين كار هنگامي منويي به نام Window در فرم ِMDI ظاهر ميشه كه ليست 3 تا فرم فرزند توشه و ميشه انتخابش كرد و بالا آوردش
مثال :
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.