PDA

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 تا فرم فرزند توشه و ميشه انتخابش كرد و بالا آوردش

مثال :