PDA

View Full Version : آموزش: افزودن شیء یا اشیا به صفحه با کد (مهم, تخصصی, واجب!)



www.pc3enter.tk
جمعه 02 آبان 1399, 06:15 صبح
سلام عزیزان برنامه نویس مخصوص vb6 کاران

یکی از مسائلی که دیدم خیلی کم به اون تو سایت برنامه نویس پرداخت افزودن شی به صفحه با کد هست
شاید لابد به خودتون بگید که کارایی اینکار چیه و به چه دردی میخوره.

خب در خصوص این موضوع بگم که چند اهمیت داره.
1. سرعت لود برنامه شما سریع میشه چرا چون وقتی با کد باشه خیلی سریعتر اونو لود میکنه تا با ایجاد ترسیم
2. حجم برنامه شما خیلی کمتر میشه
3. در جایی که نیاز دارید از تعداد بالایی شی استفاده کنید بی نیاز می شوید. مثل جدول که فقط با 2 تا حلقه FOR به سادگی قابل انجام است
4. قابلیت هک ساختار فرم شما را به شدت پایین میاره
5. اگر از کامپونتت استفاده میکنید خیلی راحتر می تونید انون لود بکنید و حتی باز هم اگر نه کامپوننت وجود نداشت و نه ریجیستری شده بود برنامه شما از کار نمی افته. چون باکد که دارید لود می کنید اگر مشکلی پیش آمد از دستور On Error Resume Next به سادگی استفاده می کنید
6. و غیره .... که خودتون کشفش کنید.


دستور مادر به این شکل هست

Controls.Add

و اصل دستور به این شکل تعریف میشه

Set NAMESET = Controls.Add("NAMEOBJ", "NAMESET", LOCTION)

• در اینجا NAMESET ما میتوانیم هر نامی ایجاد برای ارتباط به شی که فرقی نمیکند چه باشد

• و NAMEOBJ که اصل داستان کار با این کد هست شما باید / نام رسمی شناخته / را به کار ببرید که فعلا فقط میتوانید اشیایی که به صورت پیش فرض ذر خود VB6 هست را استفاده کنید.

• "NAMESET" این هم مثل قبلیه ولی برای کد نویسی و یا ارتباط اون باید جداگانه نوشته شود, کنارش یک عدد هم بذارید بد نیست.

• و در آخر هم LOCTION مکانی هست که اون شیء باید توی تمایش داده بشه که می تونه ME یا Frame1 و یا هر چیزی که قابلیت اونو داشته باشه.

مثلا با دستور زیر ما یک تکس باس می سازیم:

Set TxtBos = Controls.Add("VB.TextBox", "TxtBos", Me)


حالا اگر ما برنامه را اجرا کنیم خب طبیعتا نتیجه ای نمی بینیم برای دیدن شی خودمون با این کد ساده نتیجه را میتوانیم ببینم.
اول باید نمایش اونو فعال کنیم و بعد مختصات به اون بدیم برای نمایش
این را بگویم که از این به بعد هرکاری که با اون تکس باکس مییخواهیم انجام دهیم باید با نام TxtBos انجام دهیم

TxtBos.Move 150, 240, 1500
TxtBos.Visible = True


تا اینجا همه چیز درسته. ولی اما ما الان نام رسمی شناخته شده را از کجا پیدا کنیم؟؟؟ مثلا اینو VB.TextBox
تنها راهی که بنده سریع و راحت سراغ دارم اینکه برای بدست اوردن نام اصلی اشیاء ها
شیء هایی که میخواهید روی صفحه همینطوری ایجاد کنید مثلا دکمه و بعد اونو ذخیره کنید. فقط با پسوند FRM اون کار داریم
حالا بعدش با نودپد فایل باز را کنید که میبینید اطلاعاتی از اشیاء نوشته داخلش.
یک همچین چیزی:

<hr>
ما فقط دقیقا با این یک تیکه کار داریم برای گرفتن نام و مابقی پوچ
EndProperty
Height = 2385
Left = 4230
TabIndex = 1
Top = 510
Width = 2940
End
Begin VB.CommandButton Command1
Caption = "Command1"
BeginProperty Font
Name = "Tahoma"
Size = 8.25
Charset = 178
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 4020
TabIndex = 0
Top = 3795


<hr>

خب تا اینجا ما یاد گرفتیم چگونه شیء مورد نظر خودمونو ایجاد کنیم حالا برای ایجاد چندین تا به شکل index چه کنیم؟؟؟ هــــــــــــــا!

خیلی ساده یک تابع به شکل آرایه تعریف میکنیم مثلا:
Dim TxtBos(10) As VB.TextBox
که در ادامه اش کد تعریف ما هم این میشه.
Set TxtBos(0) = Controls.Add("VB.TextBox", "TxtBos", Me)

خب این هم نمونه کد تمرینی
Dim TxtBos(9) As VB.TextBox


For b = 1 To 3
For a = 1 To 3
Set TxtBos(a + b) = Controls.Add("VB.textbox", "TxtBox" & Fix(Rnd * 30), Me)
TxtBos(a + b).Move 500 * a, 500 * b, 400, 400
TxtBos(a + b).Visible = True
Next a
Next b

__________________________________________________ ____________________________________

شرمنده که اینقدر طول کشید ولی خب لذت آموختن خستگی برای برنامه نویس نداره
خب بریم سر قسمت آخر

آقا جون حالا چجوری کاموپنت ها و یا همان ocx را اضافه کنیم
خیلی ساده مثل روش های بالا تلاش کنید نام رسمی اصلی اونو پیدا کنید
اما نکته ی مهمی ایتجا وجود داره شما باید حتما License اونو به برنامه یا به عبارتی به خط کد خودتون اضافه کنید.

مثلا من میخوام DataGrid را به برنامه اضافه کنم
نامی که من پیدا کردم برای خودم این بود MSDataGridLib.DataGrid
و با دستوری های بالا اضافه میکنم حالا اگر میخواهید لایسنس را اضافه کنید دقیقا مثل نام بالا باید توی لایسنس خودتون هم اضافه کنید.
مثال:

Licenses.Add "MSDataGridLib.DataGrid" ', "CDE57A40-8B86-11D0-B3C6-00A0C90AEA82"
Set CAFE = Controls.Add("MSDataGridLib.DataGrid", "cafe")
CAFE.Visible = True
CAFE.Move 1050, 150, 3800, 5350


تا اینجا کار ما کلا تمامه و برنامه اجرا میشه
ولی چندتا نکته خیلی مهم و واجب است بدانید اینکه.
1- لازم نیست ocx فایل را به برنامه اضافه کنید کارهایی که شما انجام میدهید دقیقا همون کار هستنند.
2- و دیگر اینکه انجام اینکار دلیل نمیشه شما فایل ocx را در سیستم کاربر ریجستر نکنید.
3- و در آخر ختم کلام. با این نوع روش اگر برنامه ocx پیدا نکرد یا حتی ریجستر نشده بود روی سیستم کاربر به راحتی میتوانید با دستور on error اونو رد بکنید و برنامه را اجرا بکنید ولی طبیعتا جاهای دیگر کدهای شما مرتبط با اون دچار خطا در زمان خودشون میشوند.

تا چند روز دیگه یک سورس کامل و آموزشی مناسب در این رابطه زیر همین جا اضافه میکنم.

شاد پیروز و موفق باشید/ حالا که سایت برنامه نویس گزینه تشکر را برداشته اگر مطلب به دردتون خورد خوشحال میشم زیر اینجا تشکر کنید. :)
http://google.com/pic.png

www.pc3enter.tk
یک شنبه 04 آبان 1399, 06:02 صبح
این هم یک نمونه کد کامل با تمام جزییات. البته خودتون هم میدونید که تو اینترنت جستوجو کنید با موارد زیادی روبه رو میشوید.

Option Explicit' If you are adding an ActiveX control at run-time that is
' not referenced in your project, you need to declare it
' as VBControlExtender.
Dim WithEvents ctlDynamic As VBControlExtender
Dim WithEvents ctlText As VB.TextBox
Dim WithEvents ctlCommand As VB.CommandButton


Private Sub ctlCommand_Click()
ctlText.Text = "You Clicked the Command button"
End Sub


Private Sub ctlDynamic_ObjectEvent(Info As EventInfo)
' test for the click event of the TreeView
If Info.Name = "Click" Then
ctlText.Text = "You clicked " & ctlDynamic.object.selecteditem.Text
End If
End Sub


Private Sub Form_Load()
Dim i As Integer
' Add the license for the treeview to the license collection.
' If the license is already in the collection you will get
' the run-time error number 732.
Licenses.Add "MSComctlLib.TreeCtrl"


' Dynamically add a TreeView control to the form.
' If you want the control to be added to a different
' container such as a Frame or PictureBox, you use the third
' parameter of the Controls.Add to specify the container.
Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl", "myctl", Form1)
' set the location and size of the control.
ctlDynamic.Move 1, 1, 2500, 3500


' Add some nodes to the control.
For i = 1 To 10
ctlDynamic.object.nodes.Add Key:="Test" & Str(i), Text:="Test" & Str(i)
ctlDynamic.object.nodes.Add Relative:="Test" & Str(i), Relationship:=4, Text:="TestChild" & Str(i)
Next i

' Make the control visible.
ctlDynamic.Visible = True


' add a textbox
Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1)
' Set the location and size of the textbox
ctlText.Move (ctlDynamic.Left + ctlDynamic.Width + 50), 1, 2500, 100


' Change the backcolor.
ctlText.BackColor = vbYellow


' Make it visible
ctlText.Visible = True


' Add a CommandButton.
Set ctlCommand = Controls.Add("VB.CommandButton", "ctlCommand1", Form1)


' Set the location and size of the CommandButton.
ctlCommand.Move (ctlDynamic.Left + ctlDynamic.Width + 50), ctlText.Height + 50, 1500, 500


' Set the caption
ctlCommand.Caption = "Click Me"


' Make it visible
ctlCommand.Visible = True
End Sub