ارسال دستور از mbd به master

sibil

Active Member
سلام به تمام بروبچه های مجید آنلاین .
یه سوال حیاتی داشتم که اگر کارمو راه بندازین ، کلی دعاتون می کنم .

میخواستم ببینم چجوری میشه از یه فایل mbd به برنامه اصلی دستور داد . یعنی مثلا من در mbdدستور next page رو
دادم ، ولی می خواهم اون دستور به پنجره اصلی داده بشه . لطفا کمک کنید .
 

Saman

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

تا بعد...!
 

silvercover

کاربر متخصص
منظورتون این هست که میخاین از فایلی که توسط دستور RunMBD اجرا شده یه دستور به برنامه اصلی ارسال کنید؟
 

Saman

مدیر انجمن مولتی مدیا بیلدر
سلام
اگه سوال این باشه خیلی جالبه !! آخه من تاحالا واسم پیش نیومده !!

تا بعد...!
 

silvercover

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

در حالت اول برنامه باید با گزینه Allow only one instance کامپایل شده باشه. چونکه در روش Command Line ما از فرمان Run استفاده می کنیم و اگر اون گزینه موقع کامپایل انتخاب نشده باشه با هر بار کلیک روی دکمه ارسال فرمان یک نسخه دیگه از برنامه نمایان و اجرا میشه.

برای تست این مثال هم حتما باید اون (فایل Media2.mbd) رو کامپایل کنید. فایل Media1.mbd همون فایلی هست که قرار با دستور RunMBD اجرا بشه. کلا از این تکنیک ها می تونین توی برنامه هاتون برای ایجاد ارتباط بین پنجره ها و برنامه استفاده کنید. البته برنامه هایی که با بیلدر ساخته شدن.
 

پیوست ها

  • Communication.zip
    30.6 کیلوبایت · بازدیدها: 73

sibil

Active Member
دوستان دقیقا منظورم همین بود .

از جناب silvercoverهم به خاطر پیوستشون بسیار ممنونم . اما 2 مورد هست که باید ذکر کن
مثال کلیپ بورد کمتر کارآمد است .
- مثال دوم که فکر می کنم خیلی بهتر باشه . پیغام زیر رو میده . چرا ؟

ete7gg.gif
 

silvercover

کاربر متخصص
جناب sibil شما به گفته های من توجه نکردین. من گفتم که برای تست نمونه باید کامپایل بشن ( تبدیل به فایل EXE) . این پیامی که شما باهاش مواجه شدی درش گفته شده که در زمان اجرا ( اجرا در حالتی که برنامه کامپایل شده باشه) فایل در پنجره ای دیگر نمایش داده خواهد شد و نهایتا اینکه درست کار خواهد کرد.

ضمنا هر دوی این فایل ها مکمل هم هستن و مثال جداگانه نیستن.
 

sibil

Active Member
واقعا ممنونم . همون طوری بود که شما گفتین .

به نظر شما میشه اون رو تو ابعاد بزرگتر هم استفاده کرد . مثلا در یک mbd صد و چند دکمه باشد
و هر کئوم دستور خاصی را به main ارسال کنند . . . ؟
 

sibil

Active Member
ممنون........................................................................................................................................
 

sibil

Active Member
با عرض معذرت از جناب silvercover :

میشه یه آموزش کلی در مورد این کار و نحوه ی عملکردش بدید .

خیلی ممنون میشم .
 

silvercover

کاربر متخصص
20az2bm.png


خب مختصر و مفيد خدمتتون توضيح ميدم. همون طور که گفتم من در اين نمونه از دو مدل Command Line و Clipboard استفاده کردم. اول Clipboard رو توضيح ميدم. در اين مدل همانند حالتي که شما توسط دستور کپي يک متن يا عکس را به حافظه منتقل مي کنيد و در جايي که مد نظرتون هست اون رو Paste ميکنين، عمل شده. يعني از ساير برنامه هايي که قرار هست با برنامه اصلي ارتباط داشته باشن مقاديري در clipboard ريخته ميشه و از اونجايي که همه به کليپ برد دسترسي دارن ميشه مکانيزمي ( حلقه) رو تدارک ديد تا مدام اين کليپ برد رو پايش ( Scan) کنه تا به محض ورود مقداري جديد وارد عمل بشه. البته اين مدل روش ساده ترين مدل برقراري ارتباط بين موجوديت هاست. هنگامي که تعداد موجوديت ها زياد بشه و قرار باشه از اين مدل استفاده بشه تداخل به وجود مياد و بايد راهي انديشيده بشه تا هر موردي که مياد و ميره شناسه اي منحصر به فرد داشته باشه تا بشه مبداش رو تشخيص داد. خب ما به همون مدل سادش بسنده کرديم. البته بايد هوشمندي به خرج بديم و به هنگامي که از مقادير ارسالي استفاده شد Clipboard رو با فرستادن يک مقدار تهي خالي کنيم. همانند آن چيزي که در نمونه مي بينيد.

در متد دوم که موسوم به Command Line هست از يک آرايه سراسري ( قابل دسترس در همه جا) به نام [CmdLineParam$[n استفاده ميشه. به اين ترتيب که برنامه مقصد به همراه پارامترهاي لازم همانند مثال فراخواني ميشه و در برنامه مقصد توسط همين آرايه سراسري [CmdLineParam$[n دريافت ميشه.

برای نمونه کد زیر دو پارامتر رو که توسط Space از هم جدا شدن رو به برنامه MyApp.exe ارسال میکنه :

کد:
MyApp.exe param1 param2

خب حالا برای اینکه برنامه MyApp بتونیه این مقادیر رو دریافت کنه یک شی اسکریپت به نام CBK_CMDLINE در Master Top Layer قرار میدیم و کدهای پردازشی لازم رو درش قرار میدیم. مثل زیر:

کد:
n=VAL(CmdLineParam$[0])
** if number of parameters is > 0 then...
If (n>0) Then
  ** This loop simply enumerate the passed parameters
  For i=1 To n
    ** ..and show the obtained parameters in message box (or do anything you want)
    Message("Command line parameter:","CmdLineParam$[i]")
  Next i
End

اندیس صفر آرایه رشته ای [CmdLineParam$[0 همیشه تعداد پارامترهای ارسال شده رو نگه میداره که در اینجا میشه 2 تا. به همین ترتیب و توسط حلقه ای که می بینین میشه در آرایه پیمایش کرد و مقادیر رو دریافت کرد. به این نکته توجه کنید که وقتی میخای به برنامه ای مقادیری رو به این ترتیب ارسال کنید و نیاز دارید که تنها یک نسخه از برنامه در آن واحد در حالت اجرا باشه باید موقع کامپایل گزینه Allow only one instance رو انتخاب کنید.

بنده در استفاده از تکنیک Command Line از ثابت CBK_CMDLINE استفاده نکردم. دلیل خاصی نداشته. اما شما میتونین بر اساس چیزی که گفتم ازش استفاده کنید.
 

sibil

Active Member
از توضیحاتتون واقعا ممنونم . اگر چه کمی در اعلام کرم .آخه چند روزی بود که سفر بودم .
 

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

بالا