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

 
Persian Forum Network - Try to be a Professional
صفحه نخست .:.  کاربران .:.   .:. تقویم  .:. کاربران آنلاین
خوش آمدید میهمان ( ورود | ثبت نام )
  /     /  



استفاده از فلش در دلفی باز / بسته
نویسنده
پیغام
ارسال شده در تاریخ جمعه 16 شهریور 1386 - 12:48 بعدازظهر


کم کم داره مخ میخوره

کم کم داره مخ میخورهکم کم داره مخ میخورهکم کم داره مخ میخورهکم کم داره مخ میخورهکم کم داره مخ میخورهکم کم داره مخ میخورهکم کم داره مخ میخورهکم کم داره مخ میخورهکم کم داره مخ میخورهکم کم داره مخ میخوره

گروه: کاربران
آخرین بازدید: پنج شنبه 10 مرداد 1387 - 12:46 صبح
پست ها: 123, بازدید ها: 134
Flash یکی از فرمتهای محبوب وب است و به راحتی می توان برای ساخت Interfaceها در برنامه از آن استفاده کرد. بعضی از برنامه نویسان معتقدند استفاده از Flash سبب سنگین شدن برنامه، وابستگی برنامه به ActiveX فلش، امکان نداشتن تبادل اطلاعات بین Flash و دلفی و مشکلات دیگری می شود.
در این مقاله خواهید دید که به راحتی تمامی این مشکلات را می توانید رفع کنید.
نصب ActiveX فلش
برای نصب ActiveX فلش به Component>Import ActiveX Control بروید. در لیست مربوطه به دنبال Shockwave Flash بگردید. در صورتی که آن را پیدا نکردید. دکمه Add را زده و به آدرس زیر بروید:

WIN_DIRECTORYSystem32MacromedFlash

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

استفاده از اکتیوایکس فلش
اکتیوایکس فلش را می‌توانید در پالت ActiveX پیدا کنید. آن را روی فرمتان قرار دهید. از پراپرتیMovie میتوانید برای Load کردن فایل SWF خود استفاده کنید.

 

 

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

FlashOCX EXTRA Flash.ocx

و فایل Flash.ocx را از مسیری که قبلا ذکر شد در شاخه پروژه خود قرار دهید.
3- آن را ضبط کنید و با استفاده از BRCC32PERSIAN FORUM NETWORK LINK ERROR - e که در شاخه Bin محل نصب دلفی وجود دارد، آن را کامپایل کنید. (خط زیر را در Command Line تایپ کنید یا به سادگی فایل SWFActivex.rc را بر روی فایل BRCC32PERSIAN FORUM NETWORK LINK ERROR - e دراگ (Drag) کنید.

BRCC32PERSIAN FORUM NETWORK LINK ERROR - e MyExeRes.rc

خوب حالا شما یک فایل Resource کامپایل شده دارید به نام SWFActivex.res دارید.
4- خطوط زیر را در در سورس کد فرم اصلی خود قرار دهید:


کد:
PFN Code



...
...
implementation
...
...
...
{$R *.dfm}
{$R SWFActivex.RES}






5- حالا این تابع را به کد خود اضافه کنید:


PFN Code



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- این تابع را نیز اضافه کنید:

 


PFN Code



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 خود اضافه کنید. سپس تابع زیر را نیز به سورس خود اضافه نمایید.

 


PFN Code



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- این سه متغییر را نیز به کد خود اضافه کنید:

 


PFN Code



var
FilePath : string;
FlashOC TShockwaveFlash;





 

9- تابع زیر را نیز اضافه کنید:

 


PFN Code



function CreateFlashOCX : Boolean;
var
FilePath : string;
begin
Result := True;
FilePath := GetSystemDir + 'MacromedFlashFlash.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 اضافه کنید:

 


PFN Code



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 فرم خودتون به راحتی از کمپوننت مربوطه استفاده کنید:

 


PFN Code



FlashOCX.Parent := Form1;
FlashOCX.Movie := ExtractFilePath(ApplicationPERSIAN FORUM NETWORK LINK ERROR - eName) + 'Main.swf';
FlashOCX.Play;





 

Resize شدن درست
یکی از مشکلاتی که ممکن است با اکتیو ایکس فلش پیدا کنید مشکل Resize شدن است. همه ما می دانیم که یکی از مهمترین مزایای فلش برداری بودن آن است و این برداری بودن سبب می شود که فایل فلش بتواند در هر اندازه به درستی نشان داده شود. ولی متاسفانه فرم خود را در RunTime تغییراندازه می دهید فایل Flash تغییر اندازه نمی یابد. در این جا یک راه حل ساده برای حل این مشکل بیان شده که به خوبی کار میکند. کافی است کمپوننت فلش را در یک پانل قرار دهید و پراپرتی Align آن را برابر alClient بگذارید. حالا پراپرتی Anchor پانل خود را به گونه‌ای تنظیم کنید که مایل هستید کمپوننت فلش Resize شود. سپس در اونت OnResize فرم خود، خطوط زیر را درج کنید:
FlashOCX.Parent := nil;
FlashOCX.Parent := Self;
غیرفعال کردن کلیک سمت راست
مساله دیگرى که ذهن بسیارى از برنامه‌نویسان را مشغول مى‌کند منوى Popup فلش است. غیرفعال کردن این منو بسیار ساده است. کافی است یک کمپوننت TApplicationEvents را روی فرم خود قرار دهید و کد زیر را در اونت OnMessage این کمپوننت بنویسید:


PFN Code



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 به صورت زیر استفاده کنید:


PFN Code



if command = 'fMain' then fMain.ShowModal;
if command = 'fSearch' then fSearch.ShowModal;





 

موفق باشید
sorrowdancer2007-09-07 10:21:31





پست شماره 15528
تبلیغات
« تاپیک قبلی | تاپیک بعدی »


خواندن این تاپیک باز / بسته
کاربر فعال: 0 (0 مهمان, 0 کاربر, 0 کاربر ناشناس)
در حال حاضر هیچ کاربری در حال مشاهده این تاپیک نیست.
مدیران انجمن: فرشاد, Shahrad, Xiphi, علیرضا, ace4cia, fmh1, Armin25

دسترسی ها باز / بسته

اختلاف زمانی GMT +3:30, ساعت 7:23 صبح



   Sponsored By
EUKHOST - InstantASP - MTN Irancell
Execution: 0.016. 10 queries. Compression Disabled
Powered By InstantForum.NET v4.1.4 © 2008
Contact Us .:. Advertising .:. Professional Web Hosting.:. Account Setting
PF News .:. Dolphins .:. PF Girls .:. PF Boys .:. PFN MVP .:. Persian Pics
2004-2008 Persian Forum Network. All Rights Reserved.