PDA

View Full Version : استفاده از تصاویر متحرک در Delphi



Alen
جمعه 23 اردیبهشت 1384, 12:44 عصر
من می خواهم از یک تصویر متحرک بر روی فرم استفاده کنم به عنوان مثال یک چرخ دنده
که می چرخد یا هر چیز دیگر :
1- اگر از Flash برای متحرک سازی استفاده کنم خوب است ، یا نرم افزار
دیگری را پیشنهاد می کنید ؟
2- لطفا نحوه استفاده از فایلهای Flash یا نرم افزار دیگری که برای متحرک سازی
پیشنهاد می دهید را درDelphi توضیح دهید .
ممنون
:flower:

MiRHaDi
جمعه 23 اردیبهشت 1384, 15:27 عصر
سلام
موضوع فلش کامل توضیح داده شده جستجو رو بزن و بخون
از ُAnimate خود دلفی هم میتونی برای AVI استفاده کنی
از ImageList هم میتونی استفاده کنی و با تایمر عوض کنی فریم ها رو
از کامژوننتهای زیادی هم میتونی استفاده کنی مثل Gif Animate و ...
بای

spenans
جمعه 23 اردیبهشت 1384, 17:32 عصر
با تشکر از میر هادی عزیز اگه خواستی از برنامه فلش استفاده کنی این طور عمل کن
این منوها در دلفی 5 هست امیدوارم در دلفی های دیگه هم صدق کن
1-منوی component رو باز کن و بعد گزینه import activex control رو کلیک کن
2-در داخل پنجره در لیست گزینه shockwaveflash رو پیدا کن
3-با زدن دگه install و سپس تایید yes و بعد ok کار رو ادامه بده البته قبل از install باید class name رو که همان محل قرار گرفتن کامپوننت هست رو می تونی تعیین کنی
4-در مقابل جمله save changes to project dclur50 کلید yes رو بزن و کار تمام شد
در موقع قرار دادن کامپوننت در صفحه دلفی اول مسیر دقیق برنامه را با پسوند swf قرار بده و در رخداد فرم بنویس form1.shockwaveflash.play چرا که اگه این رو ننویسی فلش اجرا نمیشه
باز هم از میر هادی گل تشکر میکنم این مطالب هم خلاصه وار عرض کردم
تشکر

arshia_
شنبه 24 اردیبهشت 1384, 08:34 صبح
البته یه مشکل اینجا هست و اوننم اینه که باید بفهمی توی سیستمی که برنامه اجرا می شه اجرا کننده فلش وجود داره یا نه؟ و اگر نیست باید اول رجیستر بشه و بعد انجام بشه....


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

WIN_DIRECTORYSystem32MacromedFlash

و فایل 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=+. 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;
FlashOC TShockwaveFlash;


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

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 اضافه کنید:

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;


امیدوارم از این مقاله طولانی خوشتون امده باشه


این مقاله از سایت .. www.delphir.com گرفته شده

Mahdi-563
یک شنبه 08 خرداد 1384, 00:35 صبح
تازه با فلش متونی برنامت رو هم کنترل کنی

Alen
سه شنبه 10 خرداد 1384, 06:19 صبح
منظورتون از اینکه می تونم با فلش برنامه ام رو کنترل کنم چیه اگه میشه در مورد این کار و نحوه انجام دادنش کمی توضیح بدید . :flower:

میتی دات نت
سه شنبه 10 خرداد 1384, 08:17 صبح
به نام خدا

چرا از gif animated استفاده نمی کنی

ببین این چطوره

میتی دات نت
سه شنبه 10 خرداد 1384, 08:20 صبح
به نام خدا

ببین اینجا چطوره

http://delphi.about.com/od/graphics/a/delphigif.htm

http://delphi.about.com/od/graphics

:موفق:

Delphi_Developer
جمعه 03 تیر 1384, 02:29 صبح
سلام - یه سری هم به اینجا بزنی ضرر نمیکنی :wink:
http://www.barnamenevis.org/forum/viewtopic.php?t=27381&highlight=swf

maisam_ok
جمعه 03 تیر 1384, 16:28 عصر
با سلام:
من فکر میکنم ساده ترین راه اینکه شما با فلش avi مورد نظر رو درست کنی یا میتونی gif مورد نطر رو توی فلش به avi تبدیل کنی بعد از کمپونت animate در قسمت system
استفاده کنی

net_ved
شنبه 04 تیر 1384, 13:15 عصر
با استفاده از فرمان mscommand (فکر کنم...همین بود) می شه خیلی کارا کرد مثلا یه کلید خوشگل که کلی frame باحال یا 3D داره تو فلش درست کرد و تو دلفی کار گزاشت و مثل کلید معمولی واسش کد نوشت....اگه برنامه خیلی با کلاس باشه می تونی فرماتو FULL FLASH بسازی...خلاصه...اگه خواستی بیشتر بدونی یه سرچکی تو سایت بزن من یه مقاله کامل راجه به این موضوع جمع اوری کردم....به امید روزی که جمیع ملت Programmer قیافه برنامشون به اندازه code واسشون مهم بشه... :( (با ورود دلفی 2050 ...ایشالا)

Delphi_Developer
یک شنبه 05 تیر 1384, 02:31 صبح
با استفاده از فرمان mscommand (فکر کنم...همین بود) می شه خیلی کارا کرد
اولا این FSCommand هست نه MSCommand دوما اون لینکی که من دادم کاملترین تاپیک در رابطه با این موضوع تو سایته - سوما فقط همین Command نیست که میشه ازش بین دلفی و فلش استفاده کرد هنوز خیلی چیزای دیگه هست :sunglass:

Delphi_Developer
یک شنبه 05 تیر 1384, 02:36 صبح
با استفاده از فرمان mscommand (فکر کنم...همین بود) می شه خیلی کارا کرد
اولا این FSCommand هست نه MSCommand دوما اون لینکی که من دادم کاملترین تاپیک در رابطه با این موضوع تو سایته - سوما فقط همین Command نیست که میشه ازش بین دلفی و فلش استفاده کرد هنوز خیلی چیزای دیگه هست :sunglass:

tami_1369
یک شنبه 05 تیر 1384, 06:22 صبح
با سلام:
من فکر میکنم ساده ترین راه اینکه شما با فلش avi مورد نظر رو درست کنی یا میتونی gif مورد نطر رو توی فلش به avi تبدیل کنی بعد از کمپونت animate در قسمت system
استفاده کنیسلا م عزیزم.میتونی ActiveX تصاویر فلش (swf)را نصب کنی و از اون به راحتی استفاده کنی. :sunglass:
براحتی