نمایش نتایج 1 تا 5 از 5

نام تاپیک: استفاده از فایلهای فلش در دلفی؟

  1. #1

    Question استفاده از فایلهای فلش در دلفی؟

    سلام
    من قصد دارم که در دلفی از فایلهای swf استفاده کنم. در ضمن من قصد استفاده از اکتیوایکس فلش پلایر را ندارم. می خواهم کا همه کار ها به صورت داخلی انجام شود و یا به عبارتی برای نمایش نیازی به نصب فلش پلایر در سیستم کاربر نباشد. اگر قرار است که کامپوننتی را معرفی کنید می خواهم که این کامپوننت قابلیت emdedکردن فایل فلش را داشته باشد.
    لطفاً راهنمایی کنید!!!!

  2. #2
    کاربر تازه وارد آواتار mofrad
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    دنیای دلفی
    پست
    94

    نقل قول: استفاده از فایلهای فلش در دلفی؟

    شما می تونید از activex استفاده کنید و این فایل رو در برنامه با ساخت فایل res، اونو Embed کنید و... آموزش هاش هست اگه یه سرچ بزنید.
    در ضمن بقیه کامپوننتها هم همه نیاز به نصب فلش پلیر دارند. البته یک شرکتی رو دیدم که یک کامپوننت تولید کرده بود و ادعا کرده بود که نیاز به نصب فلش پلیر نداره ئلی من که تستش کردم دیدم کاملاً وابسته به نصب نرم افزار فلش پلیره!!!

    ولی یک خوبی که کامپوننت ها دارن اینه که خاصیت transparent رو پشتیبانی می کنند.
    توضیح بیشتر خواستید بگید.

  3. #3

    نقل قول: استفاده از فایلهای فلش در دلفی؟

    توضیح بیشتر خواستید بگید.
    اگه بیشتر توضیح بدین که عالیه!!!

  4. #4
    کاربر تازه وارد آواتار mofrad
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    دنیای دلفی
    پست
    94

    نقل قول: استفاده از فایلهای فلش در دلفی؟

    اول در مورد ActiveX فلش:

    اینو بگم که من از روش زیر استفاده کردم و خیلی خوب جواب میده و مشکلی رو ایجاد نکرده!

    نصب ActiveX فلش
    براي نصب ActiveX فلش به Component>Import ActiveX Control برويد. در ليست مربوطه به دنبال Shockwave Flash بگرديد. در صورتي كه آن را پيدا نكرديد. دكمه Add را زده و به آدرس زير برويد:

    WIN_DIRECTORY\System32\Macromed\Flash


    و فايل Flash.ocx را انتخاب كنيد و سپس Install را بزنيد.
    خوب ... تا به اينجا كار نصب اكتيوايكس فلش تمام است. كمپوننت مربوطه را ميتوانيد در پالت ActiveX پيدا كنيد.
    نكته: در صورتي كه شاخه مذكور در كامپيوتر شما وجود ندارد، احتمالا شما Flash Player را نصب نكرده ايد.
    البته نگران نباشيد، با شيوه اي كه در اين مقاله ذكر شده كاربر شما بدون نياز به نصب Flash Player مي تواند برنامه شما را اجرا كند.

    استفاده از اكتيوايكس فلش
    اكتيوايكس فلش را مي توانيد در پالت ActiveX پيدا كنيد. آن را روي فرمتان قرار دهيد. از پراپرتيMovie ميتوانيد براي Load كردن فايل SWF خود استفاده كنيد.
    به باقى پراپرتى هاى اكتيوايكس فلش دقت كنيد:
    (البته توضيحات پراپرتى ها را به صورت انگليسى آورده ام. چون نوشتن آنها به صورت فارسى زياد جالب نيست. به خاطر اينكه پر از لغاتى هستند كه ترجمه شون غير ممكن است.)
    ReadyState (get only)
    0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete.

    TotalFrames (get only) Returns the total number of frames in the movie. This is not available until the movie has loaded. Wait for ReadyState = 4.

    FrameNum (get or set) The currently displayed frame of the movie. Setting this will advance or rewind the movie.

    Playing (get or set) True if the movie is currently playing, false if it is paused.

    Quality (get or set) The current rendering quality (0=Low, 1=High, 2=AutoLow, 3=AutoHigh). This is the same as the QUALITY parameter.

    ScaleMode (get or set) Scale mode (0=ShowAll, 1= NoBorder, 2 = ExactFit). This is the same as the SCALE parameter.

    AlignMode (get or set) The align mode consists of bit flags. (Left=+1, Right=+2, Top=+4, Bottom=+8). This is the same as the SALIGN parameter.

    BackgroundColor (get or set) Override the background color of a movie. An integer of the form red*65536+green*256+blue use -1 for the default movie color.

    Loop (get or set) True if the animation loops, false to play once. Same as the MOVIE parameter.
    Movie (get or set) The URL source for the Flash Player movie file. Setting this will load a new movie into the control. Same as the MOVIE parameter.


    متدها:

    Play() Start playing the animation.

    Stop() Stop playing the animation.

    Back() Go to the previous frame.

    Forward() Go to the next frame.

    Rewind() Go to the first frame.

    SetZoomRect(int left, int top, int right, int bottom) Zoom in on a rectangular area of the movie. Note that the units of the coordinates are in twips (1440 units per inch). To calculate a rectangle in Flash, set the ruler units to Points and multiply the coordinates by 20 to get TWIPS.

    Zoom(int percent) Zoom the view by a relative scale factor. Zoom(50) will double the size of the objects in the view. Zoom(200) will reduce the size of objects in the view by one half.

    Pan(int x, int y, int mode) Pan a zoomed in movie. The mode can be: 0 = pixels, 1 = % of window.


    نصب اكتيوايكس فلش روي كامپيوتر كاربر
    براي اين كه كاربر نهايي بتواند از برنامه شما استفاده كند بايد اكتيوايكس فلش را داشته باشد. در واقع شما بايد اكتيوايكس مربوطه را براي او نصب كند. روش كار به اين گونه است كه شما بايد چك كنيد كه آيا كاربر نهايي اكتيوايكس فلش را بر روي دستگاه خود نصب كرده است يا نه و در صورتي كه وي اين اكتيوايكس را ندارد برنامه شما بايد به طور اتوماتيك آن را نصب كنيد.
    براي پياده سازي اين روش ما بايد در ابتدا OCX فلش را با استفاده از Resourceها در فايل Exe خود مخلوط كنيم. در صورتي كه شما با Resourceها آشنايي نداريد نگران نباشيد. مراحل زير را انجام دهيد و باقي كار را به دلفي بسپاريد: 1- يك فايل Text بسازيد و اسم آن را SWFActivex.rc بگذاريد
    2- خطوط زير را در آن قرار دهيد:
    FlashOCX EXTRA Flash.ocx



    و فايل Flash.ocx را از مسيري كه قبلا ذكر شد در شاخه پروژه خود قرار دهيد.
    3- آن را ضبط كنيد و با استفاده از BRCC32.EXE كه در شاخه Bin محل نصب دلفي وجود دارد، آن را كامپايل كنيد. (خط زير را در Command Line تايپ كنيد يا به سادگي فايل SWFActivex.rc را بر روي فايل BRCC32.EXE دراگ (Drag) كنيد.
    BRCC32.EXE MyExeRes.rc


    خوب حالا شما يك فايل Resource كامپايل شده داريد به نام SWFActivex.res داريد.
    4- خطوط زير را در در سورس كد فرم اصلي خود قرار دهيد:
     ...
    ...
    implementation
    ...
    ...
    ...
    {$R *.dfm}
    {$R SWFActivex.RES}
    5- حالا اين تابع را به كد خود اضافه كنيد:
     function GetResourceFile(S : string; FilePath : string) : Boolean;
    var
    Res : TResourceStream;
    begin
    Result := True;
    if S <> '' then
    begin
    if FindResource(hInstance, PChar(S), Pchar('EXTRA')) = 0 then
    begin
    Result := False;
    Exit;
    end;
    try
    Res := TResourceStream.Create(hInstance, S, Pchar('EXTRA'));
    except
    Result := False;
    Exit;
    end;
    if FileExists(FilePath) then DeleteFile(FilePath);
    try
    Res.SaveToFile(FilePath);
    except
    Result := False;
    end;
    Res.Free;
    end;
    end;

    6- اين تابع را نيز اضافه كنيد:
     function GetSystemDir : string;
    var
    SysPath : PChar;
    begin
    GetMem(SysPath, MAX_PATH + 1);
    GetSystemDirectory(SysPath, MAX_PATH);
    Result := StrPas(SysPath)+ '\';
    FreeMem(SysPath, MAX_PATH + 1);
    end;
    7- خوب! حالا بگذاريد به مهمترين قسمت قضيه يعني Register كردن OCX مربوطه بپردازيم. در ابتدا يونيت ActiveX را به ليست uses خود اضافه كنيد. سپس تابع زير را نيز به سورس خود اضافه نماييد.
     function RegisterOCX( OCXFileName : string; Flag : Boolean) : Boolean;
    var
    OCXHand: THandle;
    RegFunc: TDllRegisterServer;
    OCXFileNamePtr : PChar;
    begin
    Result := True;
    if not FileExists( OCXFileName ) then
    begin
    Result := False;
    Exit;
    end;
    GetMem(OCXFileNamePtr, Length(OCXFileName) + 1);
    StrPCopy(OCXFileNamePtr, OCXFileName);
    OCXHand:= LoadLibrary(OCXFileNamePtr);
    FreeMem(OCXFileNamePtr, Length(OCXFileName) + 1);
    OCXFileNamePtr := nil;
    if OCXHand = 0 then
    begin
    Result := False;
    Exit;
    end;
    if Flag then
    RegFunc:= GetProcAddress(OCXHand, 'DllRegisterServer')
    else
    RegFunc:= GetProcAddress(OCXHand, 'DllUnregisterServer');

    if RegFunc = S_OK then
    Result := False;

    FreeLibrary(OCXHand);
    end;
    8- اين سه متغيير را نيز به كد خود اضافه كنيد:
     var
    FilePath : string;
    FlashOCX: TShockwaveFlash;

    9- تابع زير را نيز اضافه كنيد:
     function CreateFlashOCX : Boolean;
    var
    FilePath : string;
    begin
    Result := True;
    FilePath := GetSystemDir + 'Macromed\Flash\Flash.ocx';
    if not GetResourceFile('FlashOCX', FilePath) then
    begin
    Result := False;
    Exit;
    end;
    try
    FlashOCX := TShockwaveFlash.Create(nil);
    except
    if not RegisterOCX(FilePath, True) then
    Result := False
    else
    try
    FlashOCX := TShockwaveFlash.Create(nil);
    except
    Result := False;
    end;
    end;
    end;

    10- كدهاي زير را به انتهاي فايل خود، قبل از .end اضافه كنيد:
     initialization
    CoInitialize(nil);
    if not CreateFlashOCX then
    ShowMessage('An Error Occured!' + #13 + 'Program dosent run correctly!');
    finalization
    if Assigned(FlashOCX) then
    begin
    try
    FlashOCX.Free;
    FlashOCX := nil;
    except
    end;
    DeleteFile(FilePath);
    end;
    CoUninitialize;
    end.

    end.

    11- در اونت OnCreate فرم خودتون به راحتي از كمپوننت مربوطه استفاده كنيد:
     FlashOCX.Parent := Form1;
    FlashOCX.Movie := ExtractFilePath(Application.ExeName) + 'Main.swf';
    FlashOCX.Play;
    Resize شدن درست
    يكي از مشكلاتي كه ممكن است با اكتيو ايكس فلش پيدا كنيد مشكل Resize شدن است. همه ما مي دانيم كه يكي از مهمترين مزاياي فلش برداري بودن آن است و اين برداري بودن سبب مي شود كه فايل فلش بتواند در هر اندازه به درستي نشان داده شود. ولي متاسفانه فرم خود را در RunTime تغييراندازه مي دهيد فايل Flash تغيير اندازه نمي يابد. در اين جا يك راه حل ساده براي حل اين مشكل بيان شده كه به خوبي كار ميكند. كافي است كمپوننت فلش را در يك پانل قرار دهيد و پراپرتي Align آن را برابر alClient بگذاريد. حالا پراپرتي Anchor پانل خود را به گونه اي تنظيم كنيد كه مايل هستيد كمپوننت فلش Resize شود. سپس در اونت OnResize فرم خود، خطوط زير را درج كنيد:
     FlashOCX.Parent := nil;
    FlashOCX.Parent := Self;

    غيرفعال كردن كليك سمت راست
    مساله ديگرى كه ذهن بسيارى از برنامه نويسان را مشغول مى كند منوى Popup فلش است. غيرفعال كردن اين منو بسيار ساده است. كافي است يك كمپوننت TApplicationEvents را روي فرم خود قرار دهيد و كد زير را در اونت OnMessage اين كمپوننت بنويسيد:
     if (Msg.message = WM_RBUTTONDOWN) and (Msg.hwnd := FlashOCX) then
    begin
    PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
    Handled := True;
    end;
    ارتباط بين Flash و دلفى
    يكى از مسائل بسيار مهم و اساسى ديگر برقرارى ارتباط بين Flash و دلفي است. فرض كنيد در فايل SWF خود چند Button داشته باشيد و بخواهيد وقتى كاربر روى هر كدام از اين اونتها كليك كرد فرم خاصى باز شود. در اين صورت چه بايد بكنيد. پياده سازى اين كار بسيار ساده است. كافى است در Flash براى هر كدام از دكمه هاى خود يك Action تعريف كنيد و از دستور FSCommand استفاده نماييد. از يك مقدار دلخواه مثل fMatn يا fSearch استفاده كنيد و در دلفى نيز از اونت OnFSCommand به صورت زير استفاده كنيد:
     if command = 'fMain' then fMain.ShowModal;
    if command = 'fSearch' then fSearch.ShowModal;

    برگرفته از سایت: irandevelopers.com
    --------------------
    حالا ادامه میدم...
    با کد زیر میتونید بفهمید که پلاگین فلش در سیستم کاربر نصبه یا نه:

    program SeekFlash;

    uses
    Forms, Windows, INIFiles, SysUtils, Dialogs, ShellApi;

    {$R *.RES}

    type
    TVersionInfo = record
    dwSignature,
    dwStrucVersion,
    dwFileVersionMS,
    dwFileVersionLS,
    dwProductVersionMS,
    dwProductVersionLS,
    dwFileFlagsMask,
    dwFileFlags,
    dwFileOS,
    dwFileType,
    dwFileSubtype,
    dwFileDateMS,
    dwFileDateLS: DWORD;
    end;


    var
    //Reg:TRegistry;
    Ini: TIniFile;
    Text: array[1..4] of string;

    AppPath, IniFile, MySec: string;
    SetupFile, RunFile, SetupClass: string;

    VersionStr, BrowserStr: string;

    {RegSubKey,} OpenBrowser, PlugInName, UseExt: string;
    MainVersion: Word;
    // FoundOne :Boolean;

    PVer, DPchar, POpenBrowser: PChar;
    MyPoint: Pointer;
    PLen: Cardinal;
    version: ^TVersionInfo;
    DumD: DWORD;
    LWord, HWord: Word;

    CheckHandle: Hwnd;

    //---------------------------
    //Gets the Plugin (file-) Version
    //---------------------------
    procedure GetVersion(pluginName: string);
    begin
    DPChar := StrAlloc(255);
    DPchar := PChar(PluginName);

    PVer := StrAlloc(getFileVersionInfoSize(DPchar, Plen));
    getFileVersionInfo(DPChar, 0, 255, PVer);
    VerQueryValue(Pver, '\', MyPoint, Plen);

    Version := myPoint;

    dumD := Version.dwFileVersionMS;
    hword := dumD shr 16;
    lword := dumD and 255;

    MainVersion := hword;
    VersionStr := IntToStr(Hword) + '.' + IntToStr(LWord);

    dumD := Version.dwFileVersionLs;
    hword := dumD shr 16;
    lword := dumD and 255;

    versionStr := versionStr + '.' + IntToStr(Hword) + '.' + IntToStr(lWord);
    end;

    begin
    appPath := extractFileDir(Application.exeName);


    // runFile:= 'test.htm';
    //runFile must be a html File to determin wich browser(NC or IE) is used
    POpenBrowser := StrAlloc(255);
    FindExecutable(PChar(extractFileName(runFile)),
    PChar(extractFileDir(runFile)), POpenBrowser);
    OpenBrowser := POpenBrowser;

    if not Fileexists(openBrowser) then
    begin
    MessageDlg(Text[4], mtInformation, [mbOK], 0);
    halt;
    end;


    //set the FileLocations for Netscape or IE
    if Pos('NETSCAPE.EXE', uppercase(trim(OpenBrowser))) <> 0 then
    begin //found Netscape
    BrowserStr := 'Netscape Comunicator';
    PlugInName := Copy(OpenBrowser, 1, Pos('NETSCAPE.EXE',
    uppercase(trim(OpenBrowser))) - 1);
    PluginName := PlugInName + 'Plugins\NPSWF32.dll';
    end
    else
    //found IEExplorer
    begin
    BrowserStr := 'Internet Explorer';

    DPChar := StrAlloc(255);
    GetSystemDirectory(DPChar, 255);
    PluginName := DPChar + '\Macromed\Flash\swflash.ocx';
    DPChar := nil;
    end;

    GetVersion(pluginName);

    //returned Version Number, may be checked
    while mainVersion < 4 do
    begin
    if messagedlg(Text[2], mtInformation, [mbYes, mbNo], 0) = 6 then
    begin
    //installFlash;
    end
    // if message
    else
    halt;

    getVersion(pluginName);
    end; // while mainVer
    end.

    آخرین ویرایش به وسیله mofrad : چهارشنبه 03 شهریور 1389 در 23:13 عصر دلیل: این پست به دلیل تکراری بودن به طور خودکار ادغام شده است.

  5. #5
    کاربر تازه وارد آواتار mofrad
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    دنیای دلفی
    پست
    94

    نقل قول: استفاده از فایلهای فلش در دلفی؟

    خب حالا اگه با ActiveX حال نمی کنید چند تا کامپوننت خوب معرفی می کنم که نسخه های دمو در سایتشون موجوده:

    1- کامپوننت F-IN-BOX که میگه حتی اگه ActiveX نصب نباشه کار میکنه! اینم سایتش F-IN-BOX.com که اینو اضافه کنم واقعاً از همه کامپوننتها قویتر عمل میکنه و برخی از مشکلاتی interface که در بقیه کامپوننت ها مشهوده رو حل کرده و ابزار بسیار عالی برای interface نرم افزاره. در ضمن حجمش هم نسبت به بقیه زیاده!

    2- کامپوننت smartflash و توضیحات در سایتش

    3- کامپوننت محبوب خودم! FlashEngine

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •