سلام
- چطور ميشه يه ابجکت Line بدون استفاده از فرمان Load بسازيم، يعني از روي نمونه کپي نسازه ، بلکه يه ابجکت که وجود نداره ايجاد کنه و انديس 0 به خودش بگيره.
- چطور ميشه چک کرد ابجکت وجود دارد يا خير.
نبی
سلام نبی جان
یک مدت نبودم اما حالا می تونم کمی بیشتر تو سایت باشم
کد زیر رو درون فرمت بنویس برای ایجاد Line, اگر برای ایجاد بقیه اشیاء مشکل داشتی به خودم بگو:
Dim WithEvents NewLine As VB.Line
Private Sub Form_Load()
Set NewLine = Controls.Add("VB.Line", "NewLine", Me)
With NewLine
.X1 = 100
.Y1 = 100
.X2 = 100
.Y2 = 1000
.Visible = True
End With
End Sub
سلام
از جوابت خیلی ممنونم .
- خط اول آیا صرفا برای بهینه کردن حافظست؟! چون بدون خط اول هم کار میکنه .
- در مورد پارامتر های متند add هم بگو ، فقط پارامتر دومی رو متوجه نشدم چیکار میکنه.
- چطور میشه اندیس هم براش تعریف کرد .
- و چطور میشه وجودش رو چک کرد تا در صورت موجود بودن اون رو unload کرد.
بازم ممنون
نبی
NabiKAZ نوشته است:- خط اول آیا صرفا برای بهینه کردن حافظست؟! چون بدون خط اول هم کار میکنه .
درسته بدون خط اول هم کار میکنه اما این خط فقط برای اینه که رویدادهای مربوط به شیء جدید قابل فراخوانی و کد نویسی باشه. درسته که این یک Line و هیچ رویدادی نداره اما برای اسجاد شیء مانند یک CommandButton به طور حتم به رویداد های مربوطه و تعریف خط تول احتیاج میشه!
NabiKAZ نوشته است:- در مورد پارامتر های متند add هم بگو ، فقط پارامتر دومی رو متوجه نشدم چیکار میکنه.
دستورش به شکل زیره:
Collection.Add ObjectClassName,ObjectName,ObjectParent
Collection که درون یک فرم تبدیل به Controls میشه چون تمامی اشیاء فرمت درون این کلکسیون قرار میگیره
ObjectClass در واقع کلاس قابل تعریف برای اشیاء موجوده که البته ما اینجا فقط به اسم اون احتیاج داریم
ObjectName هم همون نام شیء جدیده
ObjectParent هم شیء مادر که شئ جدید روی اون قرار میگیره شما میتونید از تمام اشیایی که خاصیت Container داشته باشند رو به جای شیء مادر استفاده کنید.
NabiKAZ نوشته است:- چطور میشه اندیس هم براش تعریف کرد .
متاسفانه هنوز من هم موفق به ایجاد اشیاء اینچنینی ایندکس دار نشدم. یعنی خیلس سعی کردم اما به جایی نرسیدم
می دونید در قسمت وارد کردن نام شیء در متد Add نمیشه ایندکس شیء جدید رو وارد کرد
NabiKAZ نوشته است:- و چطور میشه وجودش رو چک کرد تا در صورت موجود بودن اون رو unload کرد.
در کد زیر پیغام اول Nothing چون NewLine هنوز به شیء منتسب نشده اما پیغام بعدی Line خواهد بود ...
Dim WithEvents NewLine As VB.Line
Private Sub Form_Load()
MsgBox TypeName(NewLine)
Set NewLine = Controls.Add("VB.Line", "NewLine", Me)
With NewLine
.Visible = True
End With
MsgBox TypeName(NewLine)
End Sub
البته برای تشخیص وجود یک شیء راههای دیگه ای هم هست که فعلا به ذهن من نمی رسه
سلام
از توضیحات کاملتون ممنون ، مفید بود و استفاده کردم .
فقط یه مشکل کوچیک ، این TypeName که گفتید در ازای هر اندیسی مقدار Line رو برمیگردونه ، ولی من میخوام متوجه بشم شیء با اندیس خاص وجود دارد یا خیر .
ببینید من میخوام یه فرم مشبک ، تشکیل شده از یه سری خط افقی و عمودی داشته باشم ، و با یه اسکرول که تعیین کننده فاصله خطوط است فاصله اونها رو تنظیم کنم . طبیعیه که در ازای فاصله خطوط بیشتر ، تعداد خطوط هم کمتر میشه و بلعکس . یعنی به نسبت تعداد فواصل خطوط ، تعداد خطوط لازم هم متغییره که نیاز میشه در ابتدا خطوط موجود را unload کنیم و به تعداد مورد نیاز خط رو Load کنیم .
شاید حالا بهتر بتونید جواب سوالم رو بدید .
متشکرم
نبی
یه سوال دیگه !
در مورد فرم مشبکی که توضیح دادم ، ما با نقاط برخورد خطوط افقی و عمودی یعنی گره ها هم کار داریم ، و لازمه از روی مختصات نقاط به گره خاص دسترسی داشت. به نظرم رسید که روی هر گره یک Image کوچک قرار داد که رویداد پذیر هم باشه ، اما این شیء تنها یک اندیس رو میپذیره ، ولی ما به دو اندیس یکی برای افق و یکی برای عمود نیازمندیم . چطور میشه به ابجکت های روی نقاط گره با استفاده از طول و عرض اون دسترسی داشت.
راهکار خاصی در نظر دارید؟
تشکر
نبی
منم تو یه برنامه لازم بود یه picturebox با خطوط عمودی و افقی درست کنم. این کارو با متد line تو یه حلقه با چند خط کد کوتاه انجام دادم. چرا از این متد استفاده نمی کنی؟
اگه یه عکس از اون فرم بهم بدی می تونم برات بنویسمش که با یه اسکرول فاصله کم و زیاد بشه. چون تغریبا قبلا بیشتر کاراش رو کردم.
در مورد اون گره ها هم بیشتر توضیح بده که می خوای چیکار کنی شاید بشه کاریش کرد
خوب شما بیا با مختصات نقاط کار کن و با در دست داشتن یک ماتریس n*nمی تونی به هر گرهی دسترسی داشته باشی
spiderman برنامه خوبی نوشتی دستت درست (فقط ای کاش برای دکمه Exit خروج رو کد نویسی می کردی

)
یک راه اینه که به جای استفاده و پردازش ایندکس اشیاء از حافظه کمک بگیری یعنی آرایه ای تعریف کنی ساختارش یک ماتریس باشه همون طور که دوستان اشاره کردند
اما اگر من جای شما بودم (روش خودم) اصلا هیچ کار اضافی یا تعریف حافظه ای در نظر نمی گرفتم چرا که خود ایندکس ها جواب رو در هر فراخوانی به ما میدند فقط یکمی محاسبه ریاضی می خواهد
این هم بپستگی داره به ترتیب چیدمان اشیاء روی هر گره
فرض کنیم که اشیاء رو به شکل زیر بچینی
3 2 1 0
7 6 5 4
11 10 9 8
15 14 13 12
خوب حالا میخوای بفهمی شیء ایندکس 11 کجاست یعنی شماره ردیف و ستونش چیه
ستونش میشه: I mod 4+1 ===> 11 mod 4=3+1=4
ردیفش: I\4+1 ===> 11\4+1=3
NabiKAZ نوشته است:این TypeName که گفتید در ازای هر اندیسی مقدار Line رو برمیگردونه ، ولی من میخوام متوجه بشم شیء با اندیس خاص وجود دارد یا خیر .
یه مثلی هست که میگه شما اول برادری خودت رو ثابت کن (چه ربطی داشت)
شما اول بیا تایین کن که شیء وجود داره بعدا خیلی روش هست که میشه فهمید فلان ایندکش هم هست با نه
مثلا تله خطا : اگر بخوای یک شیء با یک ایندکس رو که وجود داررو دوباره ایجاد کنی خطلا میده (این فقط یه مثال بود مطمعنم راههای بهتری هم به ذهنت میرسه)
با اینکه برای چک کردن حداکثر ایندکس های یک شیء یا آرایه از فرمان
UBound
و برای مینیمم از فرمان
LBound
استفاده کن
راستی اگر تونستی شیء جدید ایندکسی ایجاد کنی روشش رو به ماهم بگو یاد بگیریم.
spiderman نوشته است:منم تو یه برنامه لازم بود یه picturebox با خطوط عمودی و افقی درست کنم. این کارو با متد line تو یه حلقه با چند خط کد کوتاه انجام دادم. چرا از این متد استفاده نمی کنی؟
اگه یه عکس از اون فرم بهم بدی می تونم برات بنویسمش که با یه اسکرول فاصله کم و زیاد بشه. چون تغریبا قبلا بیشتر کاراش رو کردم.
در مورد اون گره ها هم بیشتر توضیح بده که می خوای چیکار کنی شاید بشه کاریش کرد
سلام
عزيز دست شما درد نکنه که راهنمايي کردي. برنامت هم ديدم ، خوب بود.
راستش من خودم ابتدا در نظر داشتم از Line استفاده کنم ، ولي فکر کردم سرعت اين کار پايين باشه ولي برنامه شما رو که ديدم فهميدم که اشتباه کردم ! يعني استفاده از متد Line خيلي سريع تر از شيء Line عمل ميکنه و حسن بزرگي هم که داره اينه که راحت ميشه فرم رو همراه با خطوط مشبک در قالب يک تصوير ذخيره کرد... حالا که متوجه شدم احتمالا روي متد Line سوئيچ کنم .
البته در مورد گره ها ناچارم که از شيء استفاده کنم ، چون يه سري مشخصه ها در مورد گره ها هست که بايد ذخيره بشن و در محاسبات استفاده بشن.
ببينيد پروژه من نرم افزار پروژه تسطيح اراضي است ، يعني اينکه روش کار بدين شکله که زمين رو به شبکه هاي منظم با طول ثابت و مقايس مشخص تقسيم ميکنند ، نقاط برخورد خطوط عمودي و اففي گره نام داره که ارتفاع و مختصات هر گره بايد جداگانه ذخيره بشه تا در مواقع نياز مشخصات گره ها در محاسبات استفاده بشه. البته بعضي گره ها ممکن است مجهول باشند.
ضمنا براي ساده تر شدن وارد کردن اطلاعت ورودي ، ميخوام کاربر روي هر گره کليک کنه و پنجره مربوط به مشخصات هر گره ظاهر بشه تا براحتي بتونه مشخصات گره رو وارد کنه.
فکر ميکنم الان دقيقا متوجه شديد دنبال چي هستم .
باز هم تشکر ميکنم .
نبي