ورود

View Full Version : کنترل راست کلیک در پخش فایل فلش



پدرخوانده
پنج شنبه 21 دی 1385, 10:01 صبح
به هنگام استفاده از ole مربوط به پخش فایل swf (فلاش) می خواستم در صورت استفاده از گزینه راست کلیک پارامترهای مربوط به برنامه فلاش نمایش داده نشود
(البته این مشکل را در خیلی از ole های دیگه هم دارم و قبلا هم مطرح کردم ولی متاسفانه به جواب نرسیدم اگر دوستان راه حلی پیشنهاد بکنند خوشحال میشم)

binyaz2003
پنج شنبه 21 دی 1385, 10:49 صبح
فکر نکنم بشه چون نه میشه بهش بگب منو رو نشون نده و واقعه کلیک راست هم نداره تا اونجایی که یادم میاد.فقط یک واقعه gotfocus داره

mehran_337
جمعه 22 دی 1385, 02:47 صبح
با برنامهSwfDecompiler اول فایل فلش رو باز کن و راست کلیکشو غیر فعال کن.
من خیلی روی این مسئله کار کردم اما نشد که نشد بجز راه بالا

oVERfLOW
شنبه 23 دی 1385, 11:18 صبح
برای این کار فقط یه راه وجود داره
اونم SubClassing هست
(گرفتن پیام‌های ارسالی به پنجره‌ی Flash و حذف پیام‌های مربوط به کلیک راست)
من توی VB و اسمبلی نوشتم ولی توی Fox بلد نیستم
اگه می‌تونید بگید تا سورس VB ش رو بهتون بدم تا خودتون تبدیلش کنید

پدرخوانده
شنبه 23 دی 1385, 15:54 عصر
بنده که زیاد از وی بی سر درنمی یارم ولی ممنون میشم همین جا آپلود کنید تا برخی از دوستان مثل آقای حسین زاده که به وی بی مسلط هستند بتونند تبدیلش کنند.
با تشکر

oVERfLOW
یک شنبه 24 دی 1385, 10:53 صبح
ModMain.bas


Option Explicit

Public OldWindowProc As Long

Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_KEYUP = &H101

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long


Public Function myCallBack(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long

'Detect if message is Right-Click
If Msg = WM_RBUTTONUP Or Msg = WM_RBUTTONDOWN Then
myCallBack = 1 'Return that message was processed
Exit Function
ElseIf Msg = WM_KEYUP And wp = 27 Then 'If Esc key pressed
myCallBack = 1
Unload frmMain
Exit Function
End If
'Send other messages to original WindowProc
myCallBack = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)

End Function


frmMain.frm


Option Explicit

Private Sub Form_Load()
Dim FlashHwnd As Long
Dim strAppPath As String

'Find the Fash ActiveX window handle
FlashHwnd = FindWindowEx(hwnd, 0&, "MacromediaFlashPlayerActiveX" & vbNullChar, vbNullString)
'Find old callback address to send messages to
OldWindowProc = GetWindowLong(FlashHwnd, -4&)
'Assign new callback address to Flash window
SetWindowLong FlashHwnd, -4&, AddressOf myCallBack

'Load Flash movie
strAppPath = App.Path
If Len(strAppPath) = 3 Then strAppPath = Left(strAppPath, 2)
With ShockwaveFlash1
.Left = 0
.Top = 0
.Width = 640
.Height = 480
.Movie = strAppPath & "\oVERfLOW.swf"
.Play
End With
End Sub

binyaz2003
یک شنبه 01 بهمن 1385, 19:57 عصر
سلام
خیلی روی تبدیل این کد کار کردم اما انگار فاکس با اینجور کارها میانه خوبی نداره.
همه چیزش درسته ولی مثل اینکه تو یک حلقه میافته.نمیدونم چرا.
بهترین راه حل ساخت یک ocx فلش با این مشخصه تو vb هست.اونم ساختم اما از تو ماژول نتونستم یک واقعه رو صدا بزنم.این دیگه دست آقای توکل رو میبوسه.
یک برنامه هم که از سایت news2news.com گرفتم به اسم program1 که حتما باید تو فاکس 9 اجرا بشه.توسط اونم با استفاده از bindevent میتونید منوی خودتونو صدا بزنید اما منوی فلش هم باز میشه (بخاطر خاصیت bindevent)
در هر حال کد و میزارم اگکر کسی میتونه اصلاح کنه.

oVERfLOW
دوشنبه 02 بهمن 1385, 13:21 عصر
اگه می‌ـونید از یه Dll استفاده کنید بگید تا با اسمبلی یه Dll کم حجم درست کنم و فقط یه تابع رو توی برنامه‌تون صدا بزنید

binyaz2003
دوشنبه 02 بهمن 1385, 15:45 عصر
dll رو میتونیم استفاده کنیم.اما برای چه قسمتی؟چطور کاری رو که میخوایم انجام بدیم صدا بزنیم؟

oVERfLOW
سه شنبه 03 بهمن 1385, 11:42 صبح
هیچی من یه DLL درست می‌کنم که فقط یه تابع داره مثلا KillFlashMenu و فقط یه پارامتر می‌گیره و اونم دستگیره‌ی پنجره‌ای هست که شیء Flash توش استفاده شده...
شما این تابع رو صدا می‌زنید و ماجرا حله
البته DLL رو نباید از حافظه پاک کنید تا برنامه تموم بشه

باید وقت کنم برنامه‌اش رو آماده کنم
یه کم صبر کنید...

binyaz2003
سه شنبه 03 بهمن 1385, 16:14 عصر
حالا چطور کاری رو که خودمون میخوایم انجام بدیم (منوی خودمون باز شه)؟

oVERfLOW
چهارشنبه 04 بهمن 1385, 12:35 عصر
وقتی توی پنجره‌ی مورد نظر Right Click بشه اون پیام از بین می‌ره و پنجره‌ی Flash اصلا نمی‌فهمه که روش کلیک شده
حالا شما با یه کم دستکاری سورس که به زودی می‌زارم اینجا می‌تونید هر کاری رو بعد از حذف پیام Right Click انجام بدید حتی می‌تونید بگید برو یه سنگک هم برام بخر :)

binyaz2003
چهارشنبه 04 بهمن 1385, 13:08 عصر
ممنون از سنگک

oVERfLOW
پنج شنبه 05 بهمن 1385, 11:43 صبح
خوب درست شد

با سورس اسمبلی
توی هر زبانی می‌تونید ازش استفاده کنید
و با یه کم تغییر هم می‌تونید به کتابخانه‌ی ایستا تبدیلش کنید و توی اسمبلی و C ادغامش کنید

یه نمونه از استفاده‌اش توی VB هم نوشتم
فقط می‌مونه نمونه‌ی تابع برای Fox که متاسفانه بلد نبودم
برای اسمبلی و C و VB نوشتم یکی زحمت بکشه اونو هم تبدیلش کنه

این سریع ‌ترین و بهترین راه هست و توی همه‌ی زبان‌ها هم قابل استفاده هست

یه توضیح دیگه هم اینکه تابع فقط یه پارامتر می‌گیره و اونم دستگیره‌ی پنجره‌ی مادر هست تا زیرپنجره‌هاش رو که فلش هستن رو OK کنه

تابع یه پارامتر عددی بر می‌گردونه و اونم تعداد پنجره‌های پیدا شده و OK شده هست

خوش باشید
بابای:چشمک:

Neeloofar
پنج شنبه 05 بهمن 1385, 13:19 عصر
خیلی ممنون. خیلی وقته دنبال چنین چیزی میگردم.

binyaz2003
پنج شنبه 05 بهمن 1385, 17:24 عصر
با سلام و تشکر
اینم مثال ویژوال فاکس پرو

پدرخوانده
شنبه 07 بهمن 1385, 19:13 عصر
با تشکر از هر دو دوست گرامی
حال اگر بخواهیم با کلیک کردن بر روی آن فلاش کار خاص از جهت برنامه نویسی انجام دهیم چه باید بکنیم (دقت کنید می توان در خود اصل فایل فلش دست برد ولی نهایتا بصورت یک تگ html خواهد بود) ولی منظورم کدهای برنامه نویسی به زبان موردنظر (اینجا منظور زبان فاکس هست) انجام دهیم (چون متد onclick,...) نداشت
مثلا با کلیک بر روی فایل فلش موردنظر و یا قسمتی از آن عملیات خاص برنامه نویسی (مثل رفتن به فرم بعدی) را انجام دهد.
البته به ذهنم رسید که یک لیبل بصورت ترنسپرنت بر روی قسمتی از این فایل فلش قرار دهم و در onclick آن کد موردنظر را تعریف کنم ولی متاسفانه جواب نداد
با سایر ابزار (image,...) امتحان کردم دیدم به صورت کلی با اینکه در حالت طراحی آبجکت جدید (عکس، لیبل یا ...) بر روی ocx مربوط به پخش فایل فلش هست باز به هنگام اجرا ocx فلش بر روی این آبجکتها قرار گرفت و اجازه نمی دهد خلاصه هر جور ور رفتم به جواب نرسیدم
(و واقعا سؤال دیگر اینکه اگر واقعا بخواهیم یک عکس و یا ... بر روی قسمتی از این فایل فلش قراردهیم چگونه باید رفتار کنیم )
(فکر کنم آخرین راه حل تبدیل فایل فلش موردنظر به فایل gif باشد !!!!)
(ولی متاسفانه در مورد بعضی از فایلهای فلش خروجی gif همچین مناسب نیست ودیگر اینکه حجمش خیلی بیشتر میشه)

ممنون میشم دوستان راهنمایی کنند.

binyaz2003
یک شنبه 08 بهمن 1385, 00:14 صبح
حالا شما با یه کم دستکاری سورس که به زودی می‌زارم اینجا می‌تونید هر کاری رو بعد از حذف پیام Right Click انجام بدید حتی می‌تونید بگید برو یه سنگک هم برام بخر :)

دارم سورس رو نگاه میکنم اگر تونستم سردربیارم و کاری بکنم میزارم همینجا

oVERfLOW
یک شنبه 08 بهمن 1385, 13:47 عصر
برای اینکه فلش رو با برنامه‌تون ارتباط بدین خودش یه رابط داره

توی Script فلش کافیه از fscommand استفاده کنید و یه پیام رو به برنامه‌تون ارسال کنید
و توی برنامه‌تون‌هم یه event یا رویداد باید باشه که وقتی fscommand ارسال شد فعال می‌شه
و متن ارسالی از طرف فلش قابل بازیابی هست

این جوری با یه رشته خیلی راحت هر کاری که بخواید می‌تونید بکنید
مثلا می‌تونید یه دکمه توی فلش بذارید و بعد از کلیک شدنش یه fscommand با متن Clikc1 به برنامه‌تون ارسال کنید...

binyaz2003
یک شنبه 08 بهمن 1385, 22:20 عصر
Using Macromedia Flash Movie In VFPhttp://www.universalthread.com/wconnect/wc.dll?2,2,9912

Flash MX Movie In VFPhttp://www.universalthread.com/wconnect/wc.dll?2,2,15700

Flash OCX Methodshttp://www.universalthread.com/wconnect/wc.dll?2,2,15913

mehran_337
یک شنبه 19 اسفند 1386, 17:02 عصر
با سلام و تشکر
اینم مثال ویژوال فاکس پرو

وقتی فرم In top level باشه بازهم راست کلیک مشاهده می شه . اگه ممکنه توضیح بدین راه حل چیه چون من اکثر برنامه هام صفحه اول به صورت مذکوره و فلش هم در همون صفحه دارم

mehran_337
سه شنبه 21 اسفند 1386, 09:32 صبح
چی شد ؟ دوستان نتیجه ای نگرفتند؟