- ارسال شده در ۱۳۹۲ خرداد ۰۱ ساعت ۱۷:۴۱
- توسط پویا شفیعی
- ۳۴۳ نظر
- در مالتی مدیا بیلدر » اسکریپ نویسی
آموزش اسکریپت نویسی در برنامه MultiMedia Builder ( بخش دوم )
کد:
RunMBD("Address","parameters")
خوب اول باید یه کمی توضیح بدم براتون
فایل های با mmb ساخته می شن و کامپایل می شن به دلیلی که دلیلش رو نمی دونم فضای زیادی رو از رم و CPUاشغال می کنن و این خودش تو پروژه های سنگین خیلی آزار دهنده هست برای کاربر توسعه دهندگان mmb اومدن و یه فکری به حال این کردن اونم استفاده از فایل های سورس mmb هست که کم حجم هستن و برای این که از سنگین شدن پروژه جلو گیری کنن می تونین از این دستور و اجرا کردن فایل ها سورس برای کم شدن حجم نهایی کار و در نتیجه افزایش سرعت استفاده کنین
خوب تو دستور بالا به جای address آدرس فایل mbd رو باید بدین که این می تونه از داخل و یا خارج فایل کامپایل شده باشه
این دستور هم دو تا پارامتر داره که می تونین جدا جدا و یا با هم استفاده کنین
کد:
RunMBD("filename.mbd","NEW_WINDOW")
با استفاده از پارامتر بالا که از اسمش مشخصه فایل mbd رو تو یه پتجره جدید باز می کنه
کد:
RunMBD("filename.mbd","Page 3")
این دستور هم به صفحه دلخواه فایل mbd می ره و اون صفحه رو باز می کنه که تو این مثال می ره به صفحه ای که اسم اون صفحه Page 3 هست
کد:
RunMBD("filename.mbd","NEW_WINDOW,Page 3")
و اما دو تاش با هم مثل مثال خط بالا می شه شما می تونین از هر دو استفاده کنین با هم ولی باید دقت کنین که اسم صفحه باید آخر باشه
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
Run("Address","")
با استفاده از این دستو می تونین فایل های مختلف رو با هر پشوندی که باشن اجرا کنین و فقط کافیه که آدرس فایل رو به جای آدرس وارد کنین
قسمت parameters هم فعلا باهاش کاری نداریم چون دیگه وارد مباحث پیشرفته تر و تقریبا حرفه ای می شه
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
SysCommand("command name","parameters")
دستور بالا هم یه سری از دستور های سیستمی رو اجرا می کنه و از اسمش هم مشخصه
برخی از کامند و و پارامتر های این کامند ها رو با هم بررسی می کنیم
ResizeWindow این کامند سایز پنجره پروژه رو عوض می کنه و دو تا پارامتر داره که اون پارامتر ها اندازه طول و عرض پتجره جدید هستن به مثال زیر توجه کنید
کد:
SysCommand("ResizeWindow","800,600")
توجه : تو دستور بالا عدد اول طول پنجره هست و عدد دوم هم عرض پنجره یا همون ارتفاع
MoveWindow این کامند هم پنجره پروژه رو به محل دلخواه جا به جا می کنه و مثل دستور قبل دو تا پارامتر داره که مختصات پنجره هستن و باید اول مختصات نقطه x و بعد نقطه y رو وارد کنین و بین این دو تا هم از علامت , استفاده کنین
CenterWindow این کامند هم پنجره پروژه رو به وسط صفحه میاره و پارامتری نداره
AlwaysOnTop این کامند هم مثل کامند قبلی پارامتری نداره و پنجره پروژه رو همیشه بالای پنجره های دیگه قرار می ده
NotAlwaysOnTop این کامند هم دقیقا بر عکس کامند بالا عمل می کنه
CopyFile و اما این کامند ، این کامند همون جور که از اسمش مشخصه برای کپی کردن فایل استفاده می شه و با این دستور می تونین یه فایل رو کپی کنین
و اما پارامکتر های این کامند هم دو تا هستن که اولی باید آدرس فایل که قراره کپی بشه به صورت کامل و با اسم و پسوند و یک علامت , و بعد هم محلی که می خواین فایلتون کپی بشه اون جا به صورت کامل و با نام و پسوند فایل مثل زیر
کد:
SysCommand("CopyFile","c:\test.txt,d:\test.txt")
دستور بالا فایلی با اسم test.txt رو از درایو c به درایو d کپی می کنه
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
MoveObject("Label","x,y,w,h")
دستور بالا یک آبجکت که داخل پروزه هست رو جا به جا می کنه
در قسمت Label اسم آبجکت رو وارد کنید و x مختصات نقطه x که می خواین به اون محل منتقل بشه و y هم مختصات نطقه yمقصد هست و w طول فایل بعد از انتقال و h هم اندازه عرض یا ارتفاع آبجکت در مقصد هست
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
MoveTo("Label","x,y,Steps,Type")
این دستور هم مثل دستور قبلی عمل می کنه با این تفاوت که ان دستور مسیر حرکت رو هم نشون می ده دستور قبل یه دفعه آبجکت رو می پرونه تو مقصد ولی این دستور مسیر حرکت رو هم نشون می ده
Label که مشخصه و به جای اون باید اسم آبجکت رو بنویسید xوy هم که مشخصه و مختصات مقصد هستن
Steps این قسمت باید یک عدد وارد کنید و این عدد نشون دهنده سرعت حرکت آبجکت هست که هر چی عدد کوچیک تر باشه سرعت حرکت زیاده و هر چی عد بزرگ تر بشه و به عدد 100 نزدیک تر بشه سرعت حرکت کمتر می شه
توجه کنید که اگر چیزی وارد نکنی برابر با عدد یک می شه و یک هم برابر عدد صد هست و سرعت کمی داره
Type در این قسمت دو تا چیز می تونین وارد کنین و اون هم EASYTO و EASYFROM. در قسمت EASYTOحرکت در انتها و موقع رسیدن به مقصد با شتاب کم می شه در واقع مثل وایسادن ماشین کم کم سرعت حرکت کم می شه و اگر چیزی تایپ نکنین یه دفه وای میشه و اما EASYFROM که رو شروع حرکت تاثیر می زاره و حرکت رو کم کم شروع می کنه و کمی که گذشت به سرعت نهایی خودش می رسه البته سرعت نهایی که بشته به عدی که شما وارد کردین هست
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
ReorderObject("Label","Parameters")
این دستور باعث می شه که آبجکتی که اسم اون رو به جای Label نوشتید با توجه به پارامتر های این دستور جا به جا بشه و عقب یا جلو بره منظورم از عقب و جلو رفتن در واقع همون ترتیب قرار گیری آبجکت ها هست
این دتور چها رتا پارامتر داره و شما در یه زمان فقط از یکی شون می تونین استفاده کنین
FRONT آبجکت مورد نظر رو جلوی تمام آبجکت ها دیگه قرار می ده
BACK آبجکت مورد نظر رو پست تمام آبجکت ها قرار می ده
FORWARD آبجکت مورد نظر رو یک لایه و یا یک آبجکت جلو تر میاره
BACKWARD آبجکت مورد نظر رو یه لایه به عثب می بره و یا یک آبجکت عقب تر می بره
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
DisplayValue("label","VARIABLE")
این دستور مقدار یک متغییر رو به نمایش در میاره و در قسمت Label اسم اون شی تکست و یا پاراگرف رو وارد کنین و در قسمت VARIABLE هم اسم متغییر رو وارد کنید
توجه کنید که این متغییر هم می تونه از نوع عددی باشه هم ریشه ای
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
LoadText("Lbale","Path/Variable$")
این دستور هم تقریبا مثل دستور قبل هست اما با چند تا تفاوت اون هم در این که فقط می تونین با اون متغییر ها از نوع ریشه ای رو به نمایش در بیارین و یه کاره یگه هم انجام میده و اون هم این هست که محتویات یک فایل متنی رو می تونه تو یک متغییر ذخیره کنه تا بتونین بعد از اون متغییر تو کدهاتون استفاده کنین و طریقه ذخیره کردن هم مثل زیر هست
کد:
LoadText("String$","c:\test.txt")
کد بالا متن داخل فایل test.txt تو درایو c رو داخل متغییر String$ که از نوع ریشه ای هست می ریزه
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
Return()
از این دستور موقعی استفاده می شه که میخواین اجرای بقیه کد های یک اسکریپت رو متوقف کنین و معمولا هم داخل یک if ( یا همون شرط نوشته میشه )
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
Break()
این دستور هم دقیقا مثل دستور قبل عمل می کنه ولی با کمی تفاوت
سوال : حالا فرق این دو تا دستور چی هست ؟
خوب برای این که فرق این دو دستور رو از هم بدونید باید براتون یک مثال بزنم که تو اون مثال بهتر متوجه خواهید شد
امیدوارم با حلقه اشنایی داشته باشین چون مثالی که می خوام بزنم تو حلقه هستش
اگر هم آشنا نیستین اشکال نداره چون الان یه توضیح کوچولو می دم که این جا متوجع بشین
حلقه همون جور که از اسمش معلومه در واقع یه مسیر بسته هست و تو برنامه نویسی مسیری می شه که طی اون مقدار یک متغییر در هر دور حلقه افزایش پیدا می کنه و روی مسیر حرکت حلقه هم دستوراتی هستن که بسته به اون متغییری که در حال افزایش هست یک سری عملیات انجام می دن اما این حلقه بالاخره یک جایی تموم می شه و اون هم جایی هست که مقدار متغییری که در حال افزایش هست به مقدار دلخواه ما رسیده باشه و این زمان هست که از حلقه خارج می شه و یک صورت دیگه هم داره که در ادامه توضیح می دم
خوب فک کنم همین قدر کافیه فعلا برای این که این کد ها رو متوجه بشین
کد:
maxloop=5
For i=1 To maxloop
Message("loop 1","i")
For n=1 To 10
If (n=3) Then
Break()
End
Message("loop 2","n")
Next n
Next i
خوب تو مثال بالا تو خط اول یک مغییر از نوع عددی تعریف کردیم که مقدار اون برابر با عدد پنج هست و این همون حداکثر مقدار دور زدن حلقه هست که ما می خوایم حلقه این تعداد دور بزنه و مقدار متغییر I که همون متغییری هست که با هر دور حلقه یکی مقدار اون زیاد می شه خط دوم هم شروع حلقه هست و خط سوم هم یک پیغام معمولی به کاربر می ده و مقدار I رو نمایش می ده و خط چهارم هم حلقه حلقه دوم هست در واقع این جا حلقه تو در تو هست که تو مباحث پیشرفته تر خیلی به کار میاد و حداکثر مقداری که این حلقه دور می زنه 10 دور هست و متغیر مخصوص این حلقه nهست و در خط پنجم هم یه شرط گذاشتیم که اگر n=3 بود عمل break() انجام بشه یعنی کد ها قطع بشه و این تو خط ششم گفته شده و تو خط هفتم هم شرط ما تموم می شه و تو خط هشتم هم یک پیغام دیگه می ده که مقدار متغییر nرو نمایش می ده و خط نهم هم پایان حلقه داخلی هست و خط آخر هم پایان حلقه اولی و بیرونی
کد:
maxloop=5
For i=1 To maxloop
Message("loop 1","i")
For n=1 To 10
If (n=3) Then
Return()
End
Message("loop 2","n")
Next n
Next i
خوب این کد ها هم توضیحش مثل کد های قبلی هست با این تفاوت که این جا تو خط ششم به جای Break() از Return() استفاده شده
خوب حالا یه کاری کن دوسته عزیز
چی کار ؟
این که سوال نداره تمرین کن
خوب چه تمرینی کنم ؟
آخ ببخشید یادم رفت بگم :دی
اول کد اولی که مربوط به Break() بود رو واسه یه دکمه کپی کن و بعد اجرا کن پروژه رو و دکمه رو فشار بده و ببین چه اتفاقی می افته
بعد که این کار رو کردی کد ها بعدی که مربوط به Return() هست رو کپی کن و این ها رو هم تست کن
خوب متوجه تغییر شدی ؟
اگه متوجه شدی که آفرین
اگر هم متوجه نشدی اشکال نداره ان شاالله دفعه بعد دقتت رو بیشتر کن تا موفق خودت بتونی متوجه بشی
خوب تو قسمت Break() وقتی که شرط درست می شه و Break() رو اجرا می کنه کد ها قطع می شن و دیگه اجرا نمی شن و اگر دستورات دیگری هم داشته باشین غیر از این دکمه هیچ دستوری اجرا نمی شه تا وقتی که پروزه رو ببندید و دوباره باز کنید
اما تو قسمتی که Return() هست Return() باعث می شه که اجرای کد ها تو حلقه داخلی متوقف بشه و به حلقه خارجی هدایت می کنه اجرای بقیه دستورات رو و اگر هم یک حلقه داشته باشید و یا اصلا حلقه نداشته باشید و فقط یک شرط باشه از اجرای بقیه دستورات جلوگیری می کنه و از اسکریپت خارج می شه و یه تفاوت دیگه هم که این دو با هم داشتن این هستش که موقع استفاده از Return() وقتی که به Return() برسه کد رو قطع می کنه ولی دستورات دیگر اجرا می شن
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
Refresh("")
این کد صفحه پروژه شما رو رفرش می کنه و اگر تو یک صفحه متغییری داشته باشین که نمایش داده می شه و مقدار اون در حال تغییر هست اگر این کد رو بزارین تغییرات رو نماشی می ده
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
Pause("time")
این کد هم اجرای دستورات شما رو به تعویق می اندازه و یک وقفه تو اجرای کد ها به وجود میاد با توجه به زمانی که شما بهش دادین
توجه : موقع مشخص کردن زمان به اون واحدی که قبلا گفتم توجه کنید
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
کد:
("OpenFile("Filter","Default
خوب این دستور که از اسمش معلومه و برای باز کردن فایل ها استفاده می شه که بعد از اون فایل ها شما می تونید تو پروژه خودتون استفاده کنین
Fillter تو این قسمت شما تعریف می کنین که چه فرمت هایی رو برای شما باز کنه و شما بتونین چه فرمت هایی رو با برنامه باز کنین
کد:
("OpenFile("TXT Files (*.txt)|*.txt|All Files|*.*||","*.txt
برای مثال کد بالا فایل های متنی رو برای شما باز می کنه
وقتی پنجره open file باز می شه شما پایین برنامه کنار دکمه ok و cancel دو تا کادر دارین که کادر بالای مربوط هست به اسم فایل و کنارش هم نوشته File Name و کادر زیر اون هم File type که فرمت فایل ها رو می تونین از اون جا انتخاب کنین
خوب حالا شاید سوال پیش بیاد که چه جوری ما تعریف کنیم که چه فرمت هایی رو بتونه باز کنه ؟
خوب TXT Files (*.txt) این قسمت مربوط به کادر فایل تایپ هست که می گه این فرمت رو بشناس و نوشته کار فرمت هم TXT Files هست که می تونیم بر حسب دلخواه اون رو عوض کنیم و علامت | برای جدا کردن File type از File Name هستش
و به همین ترتیب شما می تونین فرمت های دیگه هم اگر خواستین براش تعریف کنین
و قسمت Default هم فرمتی که می خوایم پیش فرض باشه رو می زاریم این قسمت
مثال زیر برای باز کردن عکس ها هست
کد:
("OpenFile("(*.jpg)|*.jpg|(*.gif)|*.gif|All Files|*.*||","*.jpg
حالا شاید سوال پیش بیاد که خوب حالا ما بازش کردیم چه جوری بفهمیم که آدرس اون فایلی که کاربز انتخاب کرده چی هست ؟
خوب برای این که بفهمین آدرس چی بوده از CBK ها و یا همون ثابت ها استفاده می کنیم
کامل مثال بالا :
کد:
OpenFile("(*.jpg)|*.jpg|(*.gif)|*.gif|All Files|*.*||","*.jpg") picpath$=CBK_OpenDir+CBK_OpenFile خط دوم این کد با استفاده از ثابت ها آدرس فایل رو داخل یک متغییر ریشه ای ریخته که اون رو می تونین تو پروژه های خودتون ازش استفاده کنین
اینم از این که چه جوری بفهمین ادرس چی بوده
پایان بخش دوم
مطالب مرتبط:
- آموزش اسکریپت نویسی در برنامه MultiMedia Builder ( بخش اول )
- آموزش اسکریپت نویسی در برنامه MultiMedia Builder ( بخش سوم )
- آموزش اسکریپت نویسی در برنامه MultiMedia Builder ( بخش چهارم )
- حالت خطی مفاهیم اولیه اسکریپت نویسی در Multimedia Builder
ارسال پاسخ
لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد.
آخرین اخبار



۳۴۳ نظر
Echo
۱۳۹۵/۱۰/۰۲ - ۱۱:۴۴:۵۱سلام. کارتون عالیه. همه ی قدرت نرم افزار ام ام بی تو اسکریپت هاش نهفته است. اسکریپت متمایزش میکنه.
مرسی...
Rogerwox
۱۳۹۶/۰۵/۰۳ - ۱۶:۲۵:۱۲Dissertation Writing Service - EssayErudite.com
Our https://essayerudite.com/dissertation-writing-service/ provides a full-scale writing assistance accessible online 24/7.
Apart from many other writing companies, we are rather picky when forming a professional staff of experts.
Moreover, we try to make our every customer feel safe and pleased with the service.
EssayPaper
۱۳۹۶/۰۵/۰۴ - ۱۴:۰۲:۳۸EssayErudite.com is the web's leading provider of quality and professional academic writing.
When it comes to essay writing, an in-depth research is a big deal. Our experienced writers are professional in many fields of knowledge so that they can assist you with virtually any academic task. We deliver papers of different types: essays, theses, book reviews, case studies, etc.
We have thousands of satisfied customers who have already recommended us to their friends. Why not follow their example and place your order today?
EssayPaper
۱۳۹۶/۰۵/۰۴ - ۱۴:۲۱:۳۴EssayErudite.com is the web's leading provider of quality and professional academic writing.
When it comes to essay writing, an in-depth research is a big deal. Our experienced writers are professional in many fields of knowledge so that they can assist you with virtually any academic task. We deliver papers of different types: essays, theses, book reviews, case studies, etc.
We have thousands of satisfied customers who have already recommended us to their friends. Why not follow their example and place your order today?
AaauceHibIa
۱۳۹۶/۰۵/۰۸ - ۰۶:۱۸:۳۹Segway Verona offers tours that make sure you will enjoy a fun and immerse experience of our beloved city. We combine Segway, our innovative way of transportation, with tours in the historical city centre. Through our explorations of 1 or 2 hours, we will bring you to the most breathtaking spots, so that, if you do not stay long in Verona, we make sure that you see all of the unmissable sights!
Segway is really easy to use! It is so intuitive that it feels like an extension of the human body. To understand why, consider this: if you stand up and lean forward, so that you are out of balance, you will intuitively put your leg forward. Segway works the same way: to move forward or backward
AaauceHibIa
۱۳۹۶/۰۵/۰۸ - ۰۶:۱۸:۴۱Segway Verona offers tours that make sure you will enjoy a fun and immerse experience of our beloved city. We combine Segway, our innovative way of transportation, with tours in the historical city centre. Through our explorations of 1 or 2 hours, we will bring you to the most breathtaking spots, so that, if you do not stay long in Verona, we make sure that you see all of the unmissable sights!
Segway is really easy to use! It is so intuitive that it feels like an extension of the human body. To understand why, consider this: if you stand up and lean forward, so that you are out of balance, you will intuitively put your leg forward. Segway works the same way: to move forward or backward
VacadJam
۱۳۹۶/۰۵/۲۲ - ۰۸:۰۸:۵۹Order Xiaomi Redmi Note 4X 4G Phablet 154.99$, sku#207802823 - Cell phones
sku0712ck.
http://forum.liceydgtu50.ru/index.php?/topic/54187-purchasing-xiaomi-redmi-note-4-4g-phablet-15899-sku197400113-cell-phones/page-2#entry56734
http://forum.liceydgtu50.ru/index.php?/topic/54187-purchasing-xiaomi-redmi-note-4-4g-phablet-15899-sku197400113-cell-phones/page-3#entry56760
http://forum.liceydgtu50.ru/index.php?/topic/54187-purchasing-xiaomi-redmi-note-4-4g-phablet-15899-sku197400113-cell-phones/page-2#entry56737
http://forum.liceydgtu50.ru/index.php?/topic/54187-purchasing-xiaomi-redmi-note-4-4g-phablet-15899-sku197400113-cell-phones/page-2#entry56740
http://forum.liceydgtu50.ru/index.php?
Abdgporne
۱۴۰۰/۰۲/۰۳ - ۲۳:۱۸:۰۲online discount pharmacy http://canadianeve21.com/ Cleocin
Rfvbitarl
۱۴۰۰/۰۲/۰۵ - ۱۳:۱۰:۲۸cialis 800mg http://cileve.com/ the cialis promise program
Jbsdporne
۱۴۰۰/۰۲/۰۶ - ۲۳:۳۷:۰۲top rated online canadian pharmacies http://onlinecanda21.com/ Pamelor
GvdbIrrab
۱۴۰۰/۰۲/۰۹ - ۰۲:۰۶:۲۵tadalafil powder suppliers https://boxtadafil.com/ combitic global caplet pvt ltd tadalafil
Abdgporne
۱۴۰۰/۰۲/۱۱ - ۲۱:۲۶:۳۳Viagra Oral Jelly http://canadianeve21.com/ Malegra FXT plus
Rfvbitarl
۱۴۰۰/۰۲/۱۲ - ۱۰:۲۹:۱۴cialis paypal https://cileve.com/ - cialis with dapoxetine sale cialis online
Rebfitarl
۱۴۰۰/۰۲/۱۶ - ۱۰:۱۱:۳۶buy cialis no prescription uk https://rcialisgl.com/ overnight cialisis on line
Lebnporne
۱۴۰۰/۰۲/۱۷ - ۲۲:۴۵:۲۹online pharmacy china http://xlnpharmacy.com/ apollo pharmacy online
Lbsoitarl
۱۴۰۰/۰۲/۲۳ - ۲۰:۴۸:۲۵cialis walmart http://ucialisdas.com/ cialis and dapoxetine
Lebnporne
۱۴۰۰/۰۲/۲۵ - ۲۲:۱۴:۱۸hepatitis c virus (hcv) https://xlnpharmacy.com/ Hydrea
Fmrfporne
۱۴۰۰/۰۲/۲۶ - ۱۸:۴۲:۲۱canada pharmacy generic cialis https://cialisee.com/ - buy cialis online in new zealand cialis on line overnight
Rebfitarl
۱۴۰۰/۰۲/۳۰ - ۰۴:۰۵:۵۶cialis free sample http://rcialisgl.com/ 365 pills cialis
Lbsoitarl
۱۴۰۰/۰۲/۳۰ - ۰۶:۵۲:۵۷cialis softtabs online https://ucialisdas.com/ where can i buy cialis in singapore
Lbsoitarl
۱۴۰۰/۰۳/۰۴ - ۱۳:۲۲:۱۴cialis overnight shipping https://ucialisdas.com/ buy dapoxetine with cialis
porneAni
۱۴۰۰/۰۳/۰۵ - ۱۸:۲۶:۴۴canadian pharmacy online store https://pharmacyken.com/ - Estrace legal drugs canada
itarlVed
۱۴۰۰/۰۳/۰۷ - ۱۷:۳۲:۴۰recommended cialis dose https://krocialis.com/ - generic cialis or tadalafil where to buy cialis with paypal