# پایگاه‌های داده > سایر پایگاه‌های داده > Foxpro >  کنترل راست کلیک در پخش فایل فلش

## پدرخوانده

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

----------


## binyaz2003

فکر نکنم بشه چون نه میشه بهش بگب منو رو نشون نده و واقعه کلیک راست هم نداره تا اونجایی که یادم میاد.فقط یک واقعه gotfocus داره

----------


## mehran_337

با برنامهSwfDecompiler اول فایل فلش رو باز کن و راست کلیکشو غیر فعال کن.
من خیلی روی این مسئله کار کردم اما نشد که نشد بجز راه بالا

----------


## oVERfLOW

برای این کار فقط یه راه وجود داره
اونم SubClassing هست
(گرفتن پیام‌های ارسالی به پنجره‌ی Flash و حذف پیام‌های مربوط به کلیک راست)
من توی VB و اسمبلی نوشتم ولی توی Fox بلد نیستم
اگه می‌تونید بگید تا سورس VB ش رو بهتون بدم تا خودتون تبدیلش کنید

----------


## پدرخوانده

بنده که زیاد از وی بی سر درنمی یارم ولی ممنون میشم همین جا آپلود کنید تا برخی از دوستان مثل آقای حسین زاده که به وی بی مسلط هستند بتونند تبدیلش کنند.
با تشکر

----------


## oVERfLOW

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

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

----------


## oVERfLOW

اگه می‌ـونید از یه Dll استفاده کنید بگید تا با اسمبلی یه Dll کم حجم درست کنم و فقط یه تابع رو توی برنامه‌تون صدا بزنید

----------


## binyaz2003

dll رو میتونیم استفاده کنیم.اما برای چه قسمتی؟چطور کاری رو که میخوایم انجام بدیم صدا بزنیم؟

----------


## oVERfLOW

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

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

----------


## binyaz2003

حالا چطور کاری رو که خودمون میخوایم انجام بدیم (منوی خودمون باز شه)؟

----------


## oVERfLOW

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

----------


## binyaz2003

ممنون از سنگک

----------


## oVERfLOW

خوب درست شد

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

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

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

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

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

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

----------


## Neeloofar

خیلی ممنون. خیلی وقته دنبال چنین چیزی میگردم.

----------


## binyaz2003

با سلام و تشکر
اینم مثال ویژوال فاکس پرو

----------


## پدرخوانده

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

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

----------


## binyaz2003

> حالا شما با یه کم دستکاری سورس که به زودی می‌زارم اینجا می‌تونید هر کاری رو بعد از حذف پیام Right Click انجام بدید حتی می‌تونید بگید برو یه سنگک هم برام بخر :)


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

----------


## oVERfLOW

برای اینکه فلش رو با برنامه‌تون ارتباط بدین خودش یه رابط داره

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

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

----------


## binyaz2003

Using Macromedia Flash Movie In VFPhttp://www.universalthread.com/wconnect/wc.dll?2,2,9912
Flash MX Movie In VFPhttp://www.universalthread.com/wconn....dll?2,2,15700
Flash OCX Methodshttp://www.universalthread.com/wconn....dll?2,2,15913

----------


## mehran_337

> با سلام و تشکر
> اینم مثال ویژوال فاکس پرو


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

----------


## mehran_337

چی شد ؟ دوستان نتیجه ای نگرفتند؟

----------

