View Full Version : سوال: اضافه کردن اکتیو ایکس در حال اجرا و چیدن آنها
Blue Rose
شنبه 19 مرداد 1387, 20:14 عصر
سلام
یه اکتیو ایکس ساده دارم با یک دگمه(یا لیبل) داخلش
کاربر میتونه متن داخل اون رو تغییر بده (بوسیله یه پراپرتی ساده -Get & Let)
حالا سوالم
میخام مثلا 5 تا (این عدد قابل تغییر بوسیله کاربر هست) از این اکتیو ایکس رو در حال اجرای برنامه جفت هم جا بدم
و بهشون مقدار دهی کنم یا ازشون مقدار بگیرم
تنها نتیجه ای که گرفتم خطوط پایین بود
Dim BR() As Ociks
Dim cnt As Integer
Set BR(cnt) = Me.Controls.Add("Project1.Ociks", "CtrlName" & cnt)
در ضمن نمایش و انتقال اونها کنار هم یه مشکل دیگه ست
پیشاپیش از کمکتون مچکرم
Blue Rose
چهارشنبه 20 شهریور 1387, 23:57 عصر
سلام
هیچکس کمک نکرد خودم گشتم تا اینجا رو تونستم درست کنم
اما حالا نمیتونم بچینمش
یعنی این قسمت کار نمیکنه
اندازه ها درست نیستند
'BR(isum).Move (isum Mod (ScaleWidth \ 900)) * 900, 960 + (isum \ (ScaleWidth \ 900)) * 350, 900, 350
'BR(isum).Visible = True
در ضمن رویداد کلیک برای کنترل کار نمیکنه
ایا راه حلی برای این 2 تا مشکل هست
نتونستم فایل رو آپلود کنم عین متن سورس رو میذارم
Form 1
Dim BR() As Ociks
Dim cnt As Integer
Const CtlName As String = "Ociks"
Private Sub AddCom()
Dim Obj As Control
isum = 1
For Each Obj In Controls
If InStr(Obj.Name, CtlName) > 0 Then _
isum = Val(Right(Obj.Name, Len(Obj.Name) - Len(CtlName))) + 1
Next
ReDim Preserve BR(isum)
Set BR(isum) = Me.Controls.Add("Project1.Ociks", CtlName & CStr(isum))
'BR(isum).Move (isum Mod (ScaleWidth \ 900)) * 900, 960 + (isum \ (ScaleWidth \ 900)) * 350, 900, 350
BR(isum).Text = "Ocix" & CStr(isum)
'BR(isum).Visible = True
For Each Obj In Controls
Obj.Visible = True
Next
End Sub
Private Sub DelCom(Ctl As Integer)
Set Ociks(Val(Ctl)) = Nothing
End Sub
Private Sub Command1_Click()
AddCom
End Sub
Private Sub Command2_Click()
DelCom (Text1.Text)
End Sub
Private Sub Form_dblClick()
Dim Obj As Control
For Each Obj In Controls
'MsgBox Obj.Type
MsgBox Obj.Name
Next
End Sub
Private Sub Ociks_Click(Index As Integer)
MsgBox Index
End Sub
Private Sub Ociks_DblClick(Index As Integer)
MsgBox Index
DelCom (Index)
End Sub
Ociks
Dim XX, YY As String
Dim Rosie As Boolean
Event Click()
Event DblClick()
Public Property Get Text() As String
Text = Label1.Caption
End Property
Public Property Let Text(ByVal vNewValue As String)
Label1.Caption = vNewValue
PropertyChanged "Text"
End Property
Private Sub Label1_DblClick()
X = InputBox("Input Message", "Plz", Text)
Text = X
End Sub
Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
XX = X
YY = Y
Rosie = True
End Sub
Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Rosie = True Then
UserControl.Extender.Left = UserControl.Extender.Left + (X - XX)
UserControl.Extender.Top = UserControl.Extender.Top + (Y - YY)
End If
End Sub
Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Rosie = False
End Sub
VB.SOS
پنج شنبه 21 شهریور 1387, 07:49 صبح
روش صحيح اين نيست. خب اول بگو اين كار اضافه كردن اكتيوايكس رو قرار كجا انجام بدي تو فورمت يا تو اكتيوايكست؟
Blue Rose
پنج شنبه 21 شهریور 1387, 18:13 عصر
سلام
خیلی ممنون بخاطر توجهتون
عین متن سورس اکتیوایکس رو گذاشتم
حالا میخوام توی فرم در حال اجرای برنامه مثلا 3تا از این اکتیوایکس بذارم کنارهم
امکان کم و زیاد کردن هم بذارم
در ضمن این جابجایی اکتیوایکس در حال اجرا که الان با 3 تا رویداد توی سورس اکتیوایکس گذاشتم هم بر میدارم چون لازم نیست و به رویداد کلیک نیاز دارم
VB.SOS
جمعه 22 شهریور 1387, 19:17 عصر
ببين جواب منو ندادي ولي تو حالت كلي فرقي نداره. ساده ترين روش همينه كه برات تو يه نمونه ساده نوشتم. اگه چيزي كه مي خواي اين نيست بازهم بيشتر توضيح بده:چشمک:
Blue Rose
پنج شنبه 28 شهریور 1387, 15:58 عصر
سلام
خيلي ممنون بخاطر اين نمونه کار
کارمو راه انداخت
در ضمن من گفتم اکتيو ايکس دقيقا مثل يه کنترله (مثل همون چک باکس) که در زمان اجراي فرم ميخواهيم چند تا ازش روي فرم بچينيم
اما يه چيزي مونده
اونم رويداد کليک اکتيوايکسه
که اونم من اينطوري درستش کردم
توي قسمت جنرال اکتيوايکس
public event click()
توي رويداد کليک اکتيوايکس
raiseevent click()
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.