evil_gates
اين نيز بگذرد ...
سلام دوستان
ظاهرا از عمده مشكلات كاربران براي طراحي يك پلير تو mmb ساخت seekbar هست. گرچه نمونههاي زيادي از seekbar ها تو انجمن وجود داره اما چون دوستان درخواست آموزش اين برنامه رو داشتن سعي ميكنيم قدم به قدم راهنمايي كنيم تا بتونيد يك Video seekbar براي برنامه خودتون بسازيد.
Seekbar چي هست؟ تو برنامه هايي مثل media player يا jet audio حتما ديديد دستگيره اي رو كه با جلو يا عقب كشيدنش فيلم يا فايل صوتي در حال پخش هم به جلو يه عقب منتقل ميشه. به اون دستگيره اصطلاحا seekbar ميگن.
معمولا وقتي قصد داشته باشيم يك برنامه Player شبيه media player ، jetaudio يا ... بسازيم احتياج به seekbar داريم.
البته ميشه با كمك دو تا كليد و استفاده از دستورات ساده FW و BW فيلم در حال پخش رو جلو يا عقب بكشيد اما seekbar علاوه بر زيبايي، برنامه ما رو حرفه اي تر ميكنه.
براي ساخت يك seekbar روشهاي متفاوتي ميتونه وجود داشته باشه. همونطور كه تو مثالهايي كه تو انجمن هست هم اگه دقت كنيد ميبيند كه هر مثال به روشي ساخته شده. البته بعضي از مثال ها ممكنه نواقصي داشته باشه كه اگه آشنايي كامل با مكانيزم seekbar داشته باشيم ميتونيم نواقصش رو رفع و يك نمونه كامل بسازيم.
من يك برنامه پيوست كردم كه شامل يك Video Seekbar هست. تو اين برنامه سعي شده اصول استانداردي براي ساخت seekbar تو اون استفاده بشه. اين اصول استاندارد نانوشته از نظر من رواني و سادگي كدها، انعطاف پذيري كدها براي ساخت seekbarهاي متفاوت، استفاده از كمترين تعداد خطوط براي كدنويسي يك seekbar و بدون مشكل يا پرش كاركردن seekbar ساخته شده هست.
دوستان ميتونن اين برنامه رو از اينجا دانلود كنن و مطابق توضيحاتي كه در ادامه ميدم با يكي از روشهاي ساخت seekbar آشنا بشن.
بهتره قبل از هر چيزي مكانيزم يك seekbar رو بررسي كنيم:
ما يك فيلم در حال پخش داريم و يك منطقه كه نقطه آغاز و پاياني داره. همزمان با پخش فيلم تو اين منطقه يك نوار رنگي در حال تكميل شدن هست. در واقع نوار رنگي از نقطه آغاز به سمت نقطه پايان همزمان با پخش فيلم در حال حركت هست و وقتي فيلم به انتها برسه نوار رنگي هم به نقطه پايان خودش رسيده.
وقتي شما روي نقطهاي در فضاي موردنظر درگ ميكنيد و همزمان با حركت ماوس نوار رنگي جابجا ميشه فيلم در حال پخش هم متناسب با اون جلو يا عقب كشيده ميشه دقيقا چه اتفاقي ميفته؟
براي اينكه يك seekbar بسازيم بايد بدونيم:
1- مدت زمان كل فيلم چقدر هست؟
2- الان در چه زماني قرار داريم؟ يعني چه مدت زمان از آغاز فيلم گذشته.
3- نقطه ابتدا و انتهاي seekbar كجاست و چه رابطه اي با مدت زمان فيلم داره؟
اول اختلاف نقطه ابتدايي و انتهايي seekbar رو بدست مياريم تا طول seekbar بدست بياد. مثلا فرض كنيد نقطه آغاز عدد 50 و نقطه پايان عدد 250 باشه.
فضايي كه بين نقطه آغاز و پايان وجود داره كه از اختلاف اين دو عدد بدست مياد يعني 250 – 50 = 200 طول seekbar ما هست.
(همونطور كه ميدونيد مبناي محاسبات در mmb بر اساس pixel هست پس وقتي ميگيم 200 منظورمون 200 پيكسل هست)
بعد از محاسبه طول seekbar بايد طول فيلم رو بر طول seekbar تقسيم كنيم. (براي راحتي انجام محاسبات طول فيلم رو به ثانيه يا ميلي ثانيه بر ميگردونيم و بعد تقسيم بر طول seekbar ميكنيم)
در اينصورت ميتونيم بگيم به ازاي هر پيكسل كه در seekbar جابجا بشيم چند ثانيه تو فيلم بايد به جلو بريم يا عقب برگرديم.
حالا ميتونيم همزمان با شروع پخش فيلم به كمك يك تايمر به ازاي هر x ثانيه اي كه از فيلم طي شد يك پيكسل طول seekbar رو اضافه كنيم تا در انتهاي فيلم seekbar ما هم به نقطه پاياني برسه.
برعكس اين اتفاق هم ممكنه بيفته. يعني همزمان با حركت seekbar و جلو يا عقب كشيده شدنش طول seekbar رو در لحظه جاري بدست بياريم و متناسب با اون بگيم فيلم ما چند ثانيه جلو بره يا عقب برگرده.
فرض كنيد فيلمي داريم به طول 6 دقيقه و 40 ثانيه. اگه طول اين فيلم رو به ثانيه تبديل كنيم ميشه عدد 400
اگه اين عدد رو بر طول seekbar ي كه بالاتر گفتيم كه همون 200 هست تقسيم كنيم به عدد 2 ميرسيم. يعني به ازاي هر يك پيكسل جابجايي در seekbar بايد 2 ثانيه در فيلم جابجا بشيم.
بنابراين اگه طول seekbar در لحظه جاري 10 باشه پس بايد ثانيه 20 فيلم رو نمايش بديم. يا اگه طول seekbar 50 باشه بايد ثانيه 100 (يك دقيقه و 40 ثانيه) فيلم رو نمايش بديم.
به طور كلي اين ايده ما براي ساخت seekbar بود. حالا چطور اين ايده رو به كد تبديل كنيم و تو برنامه قرار بديم؟
در ادامه جزئيات برنامه پيوست شده رو بررسي ميكنيم.
ظاهرا از عمده مشكلات كاربران براي طراحي يك پلير تو mmb ساخت seekbar هست. گرچه نمونههاي زيادي از seekbar ها تو انجمن وجود داره اما چون دوستان درخواست آموزش اين برنامه رو داشتن سعي ميكنيم قدم به قدم راهنمايي كنيم تا بتونيد يك Video seekbar براي برنامه خودتون بسازيد.
Seekbar چي هست؟ تو برنامه هايي مثل media player يا jet audio حتما ديديد دستگيره اي رو كه با جلو يا عقب كشيدنش فيلم يا فايل صوتي در حال پخش هم به جلو يه عقب منتقل ميشه. به اون دستگيره اصطلاحا seekbar ميگن.
معمولا وقتي قصد داشته باشيم يك برنامه Player شبيه media player ، jetaudio يا ... بسازيم احتياج به seekbar داريم.
البته ميشه با كمك دو تا كليد و استفاده از دستورات ساده FW و BW فيلم در حال پخش رو جلو يا عقب بكشيد اما seekbar علاوه بر زيبايي، برنامه ما رو حرفه اي تر ميكنه.
براي ساخت يك seekbar روشهاي متفاوتي ميتونه وجود داشته باشه. همونطور كه تو مثالهايي كه تو انجمن هست هم اگه دقت كنيد ميبيند كه هر مثال به روشي ساخته شده. البته بعضي از مثال ها ممكنه نواقصي داشته باشه كه اگه آشنايي كامل با مكانيزم seekbar داشته باشيم ميتونيم نواقصش رو رفع و يك نمونه كامل بسازيم.
من يك برنامه پيوست كردم كه شامل يك Video Seekbar هست. تو اين برنامه سعي شده اصول استانداردي براي ساخت seekbar تو اون استفاده بشه. اين اصول استاندارد نانوشته از نظر من رواني و سادگي كدها، انعطاف پذيري كدها براي ساخت seekbarهاي متفاوت، استفاده از كمترين تعداد خطوط براي كدنويسي يك seekbar و بدون مشكل يا پرش كاركردن seekbar ساخته شده هست.
دوستان ميتونن اين برنامه رو از اينجا دانلود كنن و مطابق توضيحاتي كه در ادامه ميدم با يكي از روشهاي ساخت seekbar آشنا بشن.
بهتره قبل از هر چيزي مكانيزم يك seekbar رو بررسي كنيم:
ما يك فيلم در حال پخش داريم و يك منطقه كه نقطه آغاز و پاياني داره. همزمان با پخش فيلم تو اين منطقه يك نوار رنگي در حال تكميل شدن هست. در واقع نوار رنگي از نقطه آغاز به سمت نقطه پايان همزمان با پخش فيلم در حال حركت هست و وقتي فيلم به انتها برسه نوار رنگي هم به نقطه پايان خودش رسيده.
وقتي شما روي نقطهاي در فضاي موردنظر درگ ميكنيد و همزمان با حركت ماوس نوار رنگي جابجا ميشه فيلم در حال پخش هم متناسب با اون جلو يا عقب كشيده ميشه دقيقا چه اتفاقي ميفته؟
براي اينكه يك seekbar بسازيم بايد بدونيم:
1- مدت زمان كل فيلم چقدر هست؟
2- الان در چه زماني قرار داريم؟ يعني چه مدت زمان از آغاز فيلم گذشته.
3- نقطه ابتدا و انتهاي seekbar كجاست و چه رابطه اي با مدت زمان فيلم داره؟
اول اختلاف نقطه ابتدايي و انتهايي seekbar رو بدست مياريم تا طول seekbar بدست بياد. مثلا فرض كنيد نقطه آغاز عدد 50 و نقطه پايان عدد 250 باشه.
فضايي كه بين نقطه آغاز و پايان وجود داره كه از اختلاف اين دو عدد بدست مياد يعني 250 – 50 = 200 طول seekbar ما هست.
(همونطور كه ميدونيد مبناي محاسبات در mmb بر اساس pixel هست پس وقتي ميگيم 200 منظورمون 200 پيكسل هست)
بعد از محاسبه طول seekbar بايد طول فيلم رو بر طول seekbar تقسيم كنيم. (براي راحتي انجام محاسبات طول فيلم رو به ثانيه يا ميلي ثانيه بر ميگردونيم و بعد تقسيم بر طول seekbar ميكنيم)
در اينصورت ميتونيم بگيم به ازاي هر پيكسل كه در seekbar جابجا بشيم چند ثانيه تو فيلم بايد به جلو بريم يا عقب برگرديم.
حالا ميتونيم همزمان با شروع پخش فيلم به كمك يك تايمر به ازاي هر x ثانيه اي كه از فيلم طي شد يك پيكسل طول seekbar رو اضافه كنيم تا در انتهاي فيلم seekbar ما هم به نقطه پاياني برسه.
برعكس اين اتفاق هم ممكنه بيفته. يعني همزمان با حركت seekbar و جلو يا عقب كشيده شدنش طول seekbar رو در لحظه جاري بدست بياريم و متناسب با اون بگيم فيلم ما چند ثانيه جلو بره يا عقب برگرده.
فرض كنيد فيلمي داريم به طول 6 دقيقه و 40 ثانيه. اگه طول اين فيلم رو به ثانيه تبديل كنيم ميشه عدد 400
اگه اين عدد رو بر طول seekbar ي كه بالاتر گفتيم كه همون 200 هست تقسيم كنيم به عدد 2 ميرسيم. يعني به ازاي هر يك پيكسل جابجايي در seekbar بايد 2 ثانيه در فيلم جابجا بشيم.
بنابراين اگه طول seekbar در لحظه جاري 10 باشه پس بايد ثانيه 20 فيلم رو نمايش بديم. يا اگه طول seekbar 50 باشه بايد ثانيه 100 (يك دقيقه و 40 ثانيه) فيلم رو نمايش بديم.
به طور كلي اين ايده ما براي ساخت seekbar بود. حالا چطور اين ايده رو به كد تبديل كنيم و تو برنامه قرار بديم؟
در ادامه جزئيات برنامه پيوست شده رو بررسي ميكنيم.