پلاگین ساخت شی درخت - Tree Object

silvercover

کاربر متخصص
سلام،

به منظور هر چه غنی تر شدن ابزارهای بیلدر و کمک هر چه بیشتر به جامعه بیلدر کارها این پلاگین موسوم به Tree Object تقدیم شما می شود.

nas1cpdg1glg236bn98.png


بر خلاف سایر پلاگین های دیگه که به ازای هر گونه از شی مورد نظر می بایست شی پلاگین در پروژه قرار داد، این پلاگین میتونه به صورت نا محدود در زمان اجرا بر روی پنجره بیلدر ساخته بشه.

** تغییرات در نسخه ی 1.1
در راستای پویایی بیشتر پلاگین شئ درختی و درک راحت تر روش ساختن درخت یکسری تغییراتی در پارامترهای پلاگین بوجود اومده.​
برای اضافه کردن هر آیتم به درخت 5 پارامتر موجود هست:​

  1. پارامتر اول مشخص کننده شناسه و شماره ی درختی هست که قراره آیتم بهش اضافه بشه
  2. پارامتر دوم شناسه ای هست که ما به هر آیتم اختصاص میدیم
  3. پارامتر سوم مشخص کننده ی میزان تورفتگی هست
  4. پارامتر چهارم متن و نام خود آیتم هست
  5. و پارامتر پنجم هم آیکنی هست که برای آیتم مشخص میکنیم و در صورت عدم وجود بجاش از صفر (0) استفاده میکنیم
تغییراتی که صورت گرفته در پارامتر سوم هست، قبلاً این پارامتر، شناسه آیتم والد بود، یعنی شناسه آیتمی که قرار هست این آیتم جدید زیر مجموعه ی اون آیتم باشه، ولی در روش جدید این پارامتر نشان دهنده ی میزان تورفتگی هست، یعنی اگر آیتمی، آیتم اصلی باشه و تورفتگی نداشته باشه، شناسه اون صفر خواهد بود​
اگر قرار هست آیتم جدید زیر مجموعه ی آیتم قبلی باشه، باید میزان تورفتگی یکی بیشتر از میزان تورفتگی قبلی باشه​

Structure.png


البته اگر بخواهیم آیتم ها را در یک حلقه به درخت اضافه کنیم موضوع کمی متفاوت خواهد بود​
به دلیل شرایط خاص اضافه کردن آیتم به درخت توسط حلقه، پارامتر دوم نیز دستخوش تغییراتی خواهد شد​
در این شرایط، بجای قرار دادن یک شناسه برای آیتم در کد، از عدد ثابت 1- استفاده میکنیم، این پارامتر به پلاگین میگوید که هر آیتم را به آخر لیست اضافه کند و نه به اول آن که این امر اهمیت بسزایی در اضافه کردن آیتم ها به درخت توسط حلقه دارد.

پس در صورتی که کد ما بصورت حلقه باشد (برای کدنویسی کمتر) علاوه بر تغییراتی که در مورد پارامتر سوم ذکر شد، پارامتر دوم را نیز به این شکل (1-) تغییر میدهیم.​
علاوه بر این تغییرات، یک دستور جدید نیز به پلاگین اضافه شده که این امکان را به ما میدهد که نام عنصر والد هر آیتم را نیز تشخیص دهیم (علاوه بر شناسه و نام خود آیتم).


برای توضیحات بیشتر به مثالی که در بسته ی پلاگین موجود هست توجه کنید.

دانلود نسخه ی 1.1


علی رغم مشارکت کم و سرد بیشتر بیلدر کار ها در زمینه تهیه مثال و نوشتن فایل راهنما باز هم این بار از علاقه مندان به ساختن مثال و نوشتن راهنمای فارسی دعوت می کنم که تقاضاشون رو اعلام کنند.

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

برای مشاهده نتیجه نهایی پروژه رو کنار پوشه Countries کامپایل و اجرا کنید.

در پایان نظرات، پیشنهادات، باگ ها و انتقاداتون رو در ادامه همین مبحث بیان کنید.
لطفا دوستانی که از ویندوز ویستا بهره می برن نتیجه بررسی ها شون رو حتما اعلام کنند.:rose:

نکته: این پلاگین به صورت رایگان عرضه میشه. کسانی که قصد استفاده از این پلاگین رو در برنامه های تجاری دارند باید به منظور کمک هر چه بیشتر به جامعه بیلدر یکی از کارای زیر رو انجام بدن:

- ساختن یک مثال کاربردی
- نوشتن یک مقاله آموزشی
- ساختن یک قالب گرافیکی

در غیر اینصورت استفاده از این پلاگین برای کسانی که ازش در پروژه های تجاری استفاده می کنند مجاز نیست و از نظر بنده حرام هست.:rose:
 

پیوست ها

  • TreeObjectPlugIn1_1.rar
    119.8 کیلوبایت · بازدیدها: 1,180
آخرین ویرایش:

Free Man

کاربر متخصص مولتی مدیا بیلدر
سلام به آقای silvercover عزیز :

پلاگین خیلی خوب و کم حجمی ایجاد کرده اید.

اگر ممکن است یک مثال با ام ام بی قرار دهید که از یک شی پلاگین ،

دو عدد TreeView ایجاد کند.

حالا که شما برای استفاده ی تجاری ، مجوز صادر نکرده اید ، بهتر است که

Version Info را در پلاگین خود قرار دهید و LegalCopyright را نام خود بگذارید

و یا نام شرکتی که صاحب پلاگین می باشد.

البته یکمی حجم پلاگین با این کار زیاد خواهد شد ، که زیاد هم محسوس نیست.

به طور نمونه (Version Info در پلاگین System Rezone) :


attachment.php

 

پیوست ها

  • Copyright.png
    Copyright.png
    33.3 کیلوبایت · بازدیدها: 529

silvercover

کاربر متخصص
ممنون از حسن توجه شما Free Man عزیز. راستش این پلاگین تنها برای ایرانی ها این شرط رو داره و برای سایرین متوجه شدید که این شرط رو بیان نکردم. همیشه میخاستم این شرط رو روی یکی از کارام بذارم ببینم نتیجش چی میشه.

در مورد اون مثالی که فرمودین چشم. اما فردا آمادش می کنم. تا اون موقع اگر خودتون نیاز داشتین این کار رو بکنین کافیه که اسکریپ CreateTree رو باز کنید و پارامتر اول همه رو که یک هست به عددی دیگر تغییر بدین و ازش استفاده کنید. در واقع این عدد شناسه هر درخت هست برای پلاگین. پس نهایتن می تونین با کپی و پیست کردن کد و تغییر این عدد اولی به نتیجه مورد نظر برسین.
 

splinter cell

Well-Known Member
کار نیکو کردن از پر کردن است!
با تقدیر و تشکر از زحمات حامد عزیز در ساخت این پلاگین مفید و قطعاً پرطرفدار در آینده.
چند سئوال برام پیش اومد که مطرح میکنم
1-در معرفی پارامترها در اسکریپت AddTreeItems تون اعداد طرز مقدار دهیشون به چه شکله؟ مثلاً من میخوام به شاخه ایران یک زیر شاخه که خودش شامل چند آیتم باشه اضافه کنم طرز مقدار دهی param$ = '1|16|0|Iran' به چه شکل باید باشه؟
2-همین سئوال درباره پارامترهای اسکریپت CreateTree نیز هست. سایز و پوزیشن چطور معرفی میشن؟ مثلاً
param$ = '1|10|120|250|270' رو توضیح بدین!
3-اگر دکمه RemoveTreeItem رو پی در پی بزنیم یکی دو تا از آیتمها در انتها حذف نمیشن چرا؟
بازم از کار پسندیده تون در ساخت این پلاگین تشکر میکنم.
یا حق!
 

silvercover

کاربر متخصص
کد:
param$ = '1|16|0|Iran'
  PluginSet("PlugIn","param$")
  PluginRun("PlugIn","AddTreeItem")
  param$ = '1|17|16|Population: 65,875,223'
  PluginSet("PlugIn","param$")
  PluginRun("PlugIn","AddTreeItem")

توی قطعه کد بالا متغیر پارامتر اولی مقادیرش به این شکل هستند:

- اولی: شناسه شی درخت رو بیان می کنه که همون طور که می بینید توی همه زیر شاخه ها هم مقدار اول همین هست. مثلا اگر ما بخایم یک درخت دیگه داشته باشیم این یک میشه دو یا هر عدد صحیح بزرگتر از صفر که شما دوست داشته باشید. بعدا از همین شناسه برای ارسال دستور های بعدی همچون تغییر فونت و رنگ بهره برده میشه.

- دومی: شناسه هر عنصر درخت هست. صرفا نیازی نیست که این شناسه ها یکی با هم اختلاف داشته باشند. اما عدد کوچکتر بالاتر قرار می گیره. اما برای خوانایی کد و ساده تر شدن کار بهتر هست که هر عنصر شناسه ای رو داشته باشه که ترتیب و توالی حکم می کنه.

- سومی: برای سر شاخه ها و اونهایی که فرزند عنصر دیگه نیستند این عنصر باید صفر باشه. در غیر این صورت این عدد باید شناسه عنصر والدش باشه. مثلا برای جمعیت ایران از همین شناسه عنصر ایران که 16 هست در بخش پارامتر سوم بهره برده شده.

- چهارمی: این بخش هم همون طور که مشخص هست عنوان عنصر و متنش رو معین می کنه که خوشبختانه کلمات فارسی هم میشه درش نوشت. اما فعلا امکان راست به چپ کردن مهیا نیست.


در دستور CreateTree که بنیان درخت رو پایه ریزی می کنه بخش اول پارامتر شناسه اون درخت هست که در بخش قبلی توضیح دادم. بخش دوم پارامتر و سوم موقعیت مکانی درخت به ترتیب X و Y رو مشخص می کنه و دو بخش آخر هم به ترتیب برای عرض و ارتفاع درخت هستند.

توی کد برداشتن آیتم ها چون بنده گفتم هر بار سومین عنصر درخت رو بردار و در انتها تنها دو عنصر باقی می مونه که هیچ کدومشون عنصر سوم نیست و به این دلیل تنها دو عنصر باقی مونده و حذف نمیشن.
 

K@M@L

Well-Known Member
سلام

دستت درد نکنه واقعا قافل گیرمون کردین


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

چندتا نکته هست که عرض میکنم

1 - حالت نمایش آیتم ها از چپ به راست هست ، پس زبان فارسی که از راست به چپ هست چی ؟

2 - آن عدد یک که در همه کد ها وجود داره چیه ؟ تو توضیح شما این عدد شناسه هر درخت در پلاگین هست ولی آیا منظورتون از هر درخت اینه که با یک پلاکین میشه چندتا درخت ساخت ؟

3 - اگر امکان داره قرار دادن آیکون رو نیز برای آیتم ها تعبیه کنید.


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

تشکر ...
 

silvercover

کاربر متخصص
سلام

دستت درد نکنه واقعا قافل گیرمون کردین


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

چندتا نکته هست که عرض میکنم

1 - حالت نمایش آیتم ها از چپ به راست هست ، پس زبان فارسی که از راست به چپ هست چی ؟

2 - آن عدد یک که در همه کد ها وجود داره چیه ؟ تو توضیح شما این عدد شناسه هر درخت در پلاگین هست ولی آیا منظورتون از هر درخت اینه که با یک پلاکین میشه چندتا درخت ساخت ؟

3 - اگر امکان داره قرار دادن آیکون رو نیز برای آیتم ها تعبیه کنید.


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

تشکر ...

ممنون بابت تست توی ویندوز ویستا.

1- فعلا حالت راست به چپ امکان پذیر نیست و توی نسخه های بعدی روش کار خواهم کرد.

2- این مورد رو توی نوشته قبلی در پاسخ سوال جناب splinter cell پاسخ دادم.

3- امیدوارم در نسخه بعدی این مورد امکان پذیر بشه.
 

K@M@L

Well-Known Member
آقا حامد من فکر میکنم که منظور splinter cell اینه که چطور چندتا آیتم به ایران اضافه شه مثلا Population: 65,875,223 ، دو بار در زیز مجموعه ایران قرار بگیره .
کد:
  param$ = '1|20|0|United States'
  PluginSet("PlugIn","param$")
  PluginRun("PlugIn","AddTreeItem")
  param$ = '1|21|20|3'
  PluginSet("PlugIn","param$")
  PluginRun("PlugIn","AddTreeItem")
  param$ = '1|21|20|2'
  PluginSet("PlugIn","param$")
  PluginRun("PlugIn","AddTreeItem")
  param$ = '1|21|20|1'
  PluginSet("PlugIn","param$")
  PluginRun("PlugIn","AddTreeItem")

برای این کار من از کد بالا استفاده کردم ولی ترتیب قرار گرفتن آیتم ها تغیر کرد. چرا ؟

و

لطفا یه مثال در این زمینه قرار بدین که یه آیتم چندین زیر مجموعه داشته باشه .


تشکر ...
 
آخرین ویرایش:
سلام حامد جان . توي انجمن فتوشاپ دنبال چند تا براش بودم كه يهو اين تاپيك رو ديدم اومده بالا بازش كردم ببينم چيه . ظاهرا كه پلاگين خوبي براي بيلدر كاراها هست و جاي تقدير داره .

فقط يك انتقاد دارم . اگه خودتون پلاگين رو رليز كردين لطفا اون پرچم انگلستان رو از روي اون عكسي كه از دموي پلاگين قرار دادين بردارين . برام سوال شده كه عكس پرچم انگليس روي پلاگين نوشته شده توسط يك ايراني چيكار ميكنه :-? ؟؟؟؟
 

silvercover

کاربر متخصص
فقط يك انتقاد دارم . اگه خودتون پلاگين رو رليز كردين لطفا اون پرچم انگلستان رو از روي اون عكسي كه از دموي پلاگين قرار دادين بردارين . برام سوال شده كه عكس پرچم انگليس روي پلاگين نوشته شده توسط يك ايراني چيكار ميكنه ؟؟؟؟

شما نمونه رو بگیرید و تست کنید متوجه خواهید شد.
ضمنا اون پرچم انگلیس نیست و پرچم استرالیاست.
 
شما نمونه رو بگیرید و تست کنید متوجه خواهید شد.
ضمنا اون پرچم انگلیس نیست و پرچم استرالیاست.

كنجكاو شدم و بيلدر رو نصب كردم و نمونه رو دانلود كردم و تست كردم ...

عجب سوء تفاهم خنده داري :shock: اخه واسم جاي سوال بودم كه اون پرچم به قول خودم انگليس ... ( چون اون تيكه ي بالاش دقيقا پرچم انگليس هست ... و من تا حالا پرچم استراليا رو نديده بودم و فكر كردم مال همون انگليس هست :lol:) اونجا توي دموي پلاگين حامد چيكار ميكنه .

در هر صورت مرسي از نكته اي كه ذكر كردي .... اگه نمونه رو نميگرفتم فكر ميكردم راست راستي رفتي اونور اقامت گرفتي :lol:
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
امروز که بعد از چندروز دوری از اینترنت و متعاقباً تالار، تونستم که سری به تالار بزنم، اولین چیزی که توجهم رو جلب کرد این مبحث بود....!!!!
یه لحظه شاخ درآوردم، یه جورایی خیلی غافلگیر شدم، اصلاً توقعش رو نداشتم، بهتر بگم توقع تولد یه پلاگین دیگه در حالی که اخیراً حامد یه پلاگین بنام TinyWindow رو عرضه کرده بود، رو نداشتم.

واقعاً پلاگین جالب و کاربردی ئی هست، بخصوص اینکه قابلیت تولید نامحدود شئ TreeView رو بر روی فرم برنامه هم داره،
یه تبریک و خسته نباشید از طرف من به Silvercover عزیز، کارت عالی بود.

منم سعی میکنم اول با پلاگین و توابعش بیشتر آشنا بشم و بعدهم در در صورت توان مثالی براش درست کنم یا مقاله ای بنویسم براش (یا شایدم هردو !!!) ولی قطعاً گزینه ی موردنظر من گزینه ی سوم نخواهد بود !! :wink:

بازهم تبریک و تشکر و تعجب و تأثر و و و و ....!!!
 

peyman136

کاربر متخصص مولتی مدیا بیلدر
سلاتم دوستان !
خسته نباشی حامد جان پلاگین واقعا کاربردی هستش و یکی از اصلی ترین خلاهای mmb رو پر کرده و نیاز خیلی از کاربر ها رو برطرف کرده
تبریک میگم
موفق باشی
 

peyman136

کاربر متخصص مولتی مدیا بیلدر
دوستان من یه نمونه گذاشتم برای ساخت دوتا درخت توی یک صفحه البته این مثال چقدر دقیق هستش رو حامد باید مشخص کنه من نظری نمیتونم بدم
امیدوارم مفید باشه

البته من نتونستم بفهم چطور باید برای دو تادرخت مختلف اکشن جدا گذاشت ( مجبوریم اکشن همه درخت ها رو توی یه اسکریپت بنویسیم که این کار رو جایی مشکل میکنه یه اسم مشابه توی دوتا درخت جدا باشه. ) چون موقع انتخاب نام شی اسکرپت برای درخت ، پلاگین این کار رو برای تمام درخت ها انجام میده و نمیشه شماره درخت رو مشخص کرد
البته شاید هم من تنونستم این کار رو انجام بدم ممنون میشم حامد جان اگه در این مورد توضیخ بدی
 

پیوست ها

  • multi treeview.rar
    13.5 کیلوبایت · بازدیدها: 118

silvercover

کاربر متخصص
البته من نتونستم بفهم چطور باید برای دو تادرخت مختلف اکشن جدا گذاشت ( مجبوریم اکشن همه درخت ها رو توی یه اسکریپت بنویسیم که این کار رو جایی مشکل میکنه یه اسم مشابه توی دوتا درخت جدا باشه. ) چون موقع انتخاب نام شی اسکرپت برای درخت ، پلاگین این کار رو برای تمام درخت ها انجام میده و نمیشه شماره درخت رو مشخص کرد
البته شاید هم من تنونستم این کار رو انجام بدم ممنون میشم حامد جان اگه در این مورد توضیخ بدی

بله حق با پیمان بود. من فراموش کرده بودم که این مورد رو بیان کنم. برای این منظور توی اسکریپ EventHandler یه دستور هم برای دریافت یک نتیجه عددی درج کردم که این عدد همون شناسه هر درخت رو بر می گردونه. لطفا از پست اول بسته پلاگین رو مجددا دانلود کنید.
 

peyman136

کاربر متخصص مولتی مدیا بیلدر
خوب با توضیحی که حامد جان داد من هم مثال رو اصلاح کردم میتونید از زیر دریافت کنید
 

پیوست ها

  • multi treeview.rar
    13.6 کیلوبایت · بازدیدها: 148

ubuntu

Member
راستش من همون اوايل پلاگ‌اين رو دانلود کردم. ولي فرصت نشد تبريک بگم. واقعاً پلاگ‌اين خوبي هستش. من يکي بهش نياز داشتم. متشکر...
 

silvercover

کاربر متخصص
بنا به درخواست دوستان پلاگین به هنگام شد:

nas1cpdg1glg236bn98.png


- حالت راست به چپ کردن برای زبان های فارسی، عربی و ... ( کامنت توی اسکرپیت CreateTree رو مطالعه کنید)
- درج آیکن کنار هر گره درخت ( کامنت توی اسکرپیت CreateTree رو مطالعه کنید)
- تغییر اندازه و موقعیت درخت در زمان اجرا
- باز کردن و بستن گره ها از طریق اسکریپت در زمان اجرا

دانلود نسخه جدید
 

K@M@L

Well-Known Member
سلام

واقعا خیلی سریع این کار رو کردید. تشکر ...:rose:
برای نمایش آیکون در پلاگین ، فایل های ico و bmp رو میشه استفاده کرد ولی آیا امکان استفاده از jpg رو نیز میتونید فراهم کنید
 

جدیدترین ارسال ها

بالا