View Full Version : WriteMethod
علی اکبر
سه شنبه 05 شهریور 1387, 14:15 عصر
با سلام
مي خوام با كد نويسي يك دکمه به فرمم اضافه کنم وبعد از اون در اونت کلیک اون دستوری رو تایپ کنم که بشه اجرا کرد
اینو نوشتم اما خطا میده
thisform.AddObject('command2','commandbutton')
thisform.command2.Visible= .T.
THISFORM.command2.WriteMethod('Click','WAIT WIND 1')
ممنون میشم راهنمایی بفرمائید
rezaTavak
سه شنبه 05 شهریور 1387, 20:08 عصر
Writes the specified text to the specified method. Available at design time only.
http://msdn.microsoft.com/en-us/library/wtc11as1(VS.80).aspx
فقط در زمان طراحی قابل استفاده است یعنی اینکه اول باید یک کلاس داشته باشید سپس آنرا بنویسید و بعد از روی این کلاس شی بسازید.
علی اکبر
چهارشنبه 06 شهریور 1387, 07:43 صبح
يعني راهي نيست در زمان اجرا برنامه يه دكمه به فرم اضافه كرد
سعید حمیدیانفر
چهارشنبه 06 شهریور 1387, 08:23 صبح
فقط در زمان طراحی قابل استفاده است یعنی اینکه اول باید یک کلاس داشته باشید سپس آنرا بنویسید و بعد از روی این کلاس شی بسازید.
فرمايش درست
اما اگه محدوديتهاي زمان اجراي برنامتون اجازه بده ميشه يه همچين كلكي هم زد
&&init
PUBLIC fobject as object
PUBLIC fname as String
fname="form2.scx"
&&----------------------
DO FORM (fname) NAME fobject
fobjname=ALLTRIM(fobject.name)
fobject.release
PRIVATE tmpfobject
MODIFY FORM form2 NOWAIT
FOR EACH fsetobj as FormSet IN _vfp.Objects
FOR EACH fobj as Form IN fsetobj.Objects
IF ALLTRIM(fobj.Name)==fobjname then
tmpfobject=fobj
EXIT
ENDIF
NEXT fobj
NEXT fsetobj
tmpfobject.AddObject("btn1","CommandButton")
tmpfobject.btn1.top=10
tmpfobject.btn1.left=10
tmpfobject.btn1.visible=.t.
tmpfobject.btn1.writemethod("click","messagebox('ya ali madad')")
tmpfobject.SaveAs(fname)
DO FORM form2 NAME fobject
توضيح اينكه اين كد نميتونه داخل ابجكت هاي خود فرم اجرا بشه و درواقع بايد بيرون از فرم توسط يك prg و يا يك فرم ديگه اجرا بشه
بعنوان مثال من از يك فرم براي اجرا استفاده كردم كه تو ضميمه ميتونيد دانلودكنيد
موفق باشيد
ashkan_gorg
چهارشنبه 20 شهریور 1387, 15:06 عصر
ببخشید من یک کلاس دارم کهتو برنامه های ازش استفاده می کنم ولی الان میخوام توی این کلاس بنویسم که هروقت ازش استفاده کردم توی همه اشیای داخل فرم توی متد mouseenter بنویسه messagebox(this.name) باید چه جوری این کاررو انجام بدم؟
NewFoxStudent
چهارشنبه 20 شهریور 1387, 16:25 عصر
توی init کلاس کد زیر رو بنویس
FOR i=1 TO this.parent.ControlCount
cc = "BINDEVENT(this.parent.Controls("+ALLTRIM(STR(i))+"),'MouseEnter',this,'msg')"
&cc
ENDFOR
بعد یه متد به نام msg به کلاس اضافه کن و کد زیر رو توش بنویس
LPARAMETERS nButton, nShift, nXCoord, nYCoord
AEVENTS(arr,0)
MESSAGEBOX(arr(1).Name)
NewFoxStudent
چهارشنبه 20 شهریور 1387, 16:28 عصر
اینم یه نمونه
اگه از این کلاس روی فرم استفاده کنید
وقتی موس روی هر کنترلی میره نام اون کنترل به صورت پیغام داده میشه
23021
ashkan_gorg
چهارشنبه 20 شهریور 1387, 17:37 عصر
حالا چه جوری باید تشخیص دادکه بعضی از کنترلها مثلا از OCX استفاده کردیم که خاصیت SETFOCUS ندارند حساب نکنه وخطا نده داخل فرم
NewFoxStudent
پنج شنبه 21 شهریور 1387, 08:19 صبح
میتونی توی init یه شرط بزاری که برای هر کنترلی برقرار بود bindevent نکنه
مثل نام کنترل یا BaseClass
ashkan_gorg
پنج شنبه 21 شهریور 1387, 08:41 صبح
من هرچی دارم تلاش می کنم که ببینم یک شی خاصیت setfucos دارد یا نه نمیشه پشت هم خطا می ده.
NewFoxStudent
پنج شنبه 21 شهریور 1387, 08:47 صبح
اگه درست متوجه شده باشم
شما میخواهید ببینید یک کنترل دارای خاصیت Setfocus هست یا نه
PEMSTATUS(Control,"Setfocus",5)
اگه آبجکتی که به جای Control تو دستور بالا بکار میره دارای خاصیت ذکر شده باشه این تابع مقدار .T.برمیگردونه
NewFoxStudent
پنج شنبه 21 شهریور 1387, 08:58 صبح
به عنوان مثال
PEMSTATUS(_Screen,"Setfocus",5)
PEMSTATUS(_Screen,"Click",5)
خط اول .F. و خط دوم .T. برمیگردونن
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.