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


تبليغات
سامانه ي پيامکي آز پي ان يو مقالات ISI
فروشگاه اينترنتي آز پي ان يو خريد شارژ آز پي ان يو

اموزش دلفيزمان کنونی: ۱۴-۹-۱۳۹۵، ۱۱:۴۷ :عصر
کاربرانِ درحال بازدید از این موضوع: 1 مهمان
نویسنده: The DaRk PrOpheT
آخرین ارسال: The DaRk PrOpheT
پاسخ: 11
بازدید: 1757

ارسال پاسخ 
 
امتیاز موضوع:
  • 28 رأی - میانگین امتیازات: 3.5
  • 1
  • 2
  • 3
  • 4
  • 5

اموزش دلفي

۱-۲-۱۳۹۱, ۰۳:۴۷ :عصر
ارسال: #1
اموزش دلفي

قصد دارم تا جايي كه بتونم براتون اموزش برنام نويسي به زبان دلفي رو قرار بدم
اميدوام كه مورد توجه علاقه مندان قرار بگيره اين اموزش ها خيلي ابتدايي خواهد بود و بيشتر جنبه اشنايي شما عزيزان رو با زبان برنامه نويسي دلفي دارم

اول شما رو با دلفي اشنا كنم

دلفي يك زبان برنامه نويسي تحت ويندوز ميباشد كه شما ميتونيد برنامه هايي طراحي كنيد كه در ويندوز قابل اجرا باشد و محيطي شبيه به برنامه هاي ديگه كه در طول روز با اونها كار ميكنيد رو داشته باشه براي مثال به عكس زير نگاه كنيد



اين يك فرم است فرم اساس برنامه هاي دلفي است .فرم همانند پنجره در محيط ويندوز است . تمام قطعات مورد نياز برنامه در فرم قرار ميگيرد . فرم صفحه طراحي برنامه است هروقت كه دلفي راه اندازي مي شود فرم در اختيار قرار ميگيرد تا از ان براي طراحي برنامه استفاده شود


دلفي يك محيط برنامه نويسي شبيه به ويژوال دارد اما جالب اينجاست كه با دستورات پاسكال شما بايد برنامه نويسي كنيد

كساني كه هردو اين ها رو خوندن متوجه ميشن كه من چي ميگم



براي ياد گيري كامل اين اموزش ها دانستن مفاهيم پاسكال الزامي ميباشد يعني اگر از برنامه نويسي پاسكال چيزي نميدونيد نبايد انتظار داشته باشيد كه اين اموزش ها رو ياد بگريد

---------------------------------------------------
خوب در اولين اموزش به شما ياد خواهم داد كه چطور برنامه اي درست كنيد كه دو عدد رو با هم جمع كنه
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
۱-۲-۱۳۹۱, ۰۳:۵۰ :عصر (آخرین ویرایش در این ارسال: ۱-۲-۱۳۹۱ ۰۴:۰۶ :عصر، توسط The DaRk PrOpheT.)
ارسال: #2
RE: اموزش دلفي
ابتدا برنامه دلفي رو باز كنيد


خوب وقتي كه برنامه رو باز كرديد يك فرم خالي جلو شما قرار ميگيره كه شما بايد اون رو طبق نياز برنامه طراحي كنيد




برنامه كه قرا هست بسازيم به سه عنصر نياز داره



1- عنصر Edit (در ويژوال بيسيك Text Box ) به قمسمتي از برنامه گفته ميشه كه ميشه توش نوشت / در ادامه بشتر اشنا خواهيد شد



2- عنصر Label براي نوشتن در فرم



3- عنصر Button (دكمه )



خوب براي قرار دادن اين عناصر در فرم كافيست كه شما روي هر كدام از اونا دوبار كليك كنيد و سپس جاي اونا رو مشخص كنيد




خوب بعد از قرار دادن اونا در فرم شما بايد خاصيت كاپشن Caption اونا
رو با توجه به نياز تغيير بديد براي اين كار هر كدوم از عناصر رو
انتخاب ميكنيد سپس در سمت راست برنامه گزينه Caption رو پيدا
ميكنيد و اون رو تغيير میدید


خوب كار طراحي تمام شده

حالا بايد كد نويسي رو شروع كنيد



براي اينكار روي Button ---Add ( دكمه Add) دوبار كليك كنيد تا وارد قسمت كد نويسي بشيد



يعني بايد همچين صفحه اي جلوي شما باز بشه



خوب بعد بايد قطعه كد هاي زير رو داخلش قرار بديد



کد PHP:

var
num1,num2,num3:integer; 1

begin

num1
:=strtoint(edit1.Text); 1
num2
:=strtoint(edit2.Text); 1
num3
:=num1+num2; 1
edit3
.Text:=inttostr(num3); 1
end






سعي كنيد كه بنويسيد تا كپي و پيست كنيد / در اخر هر خط عدد 1 قرار دادم تا نوشه ها به هم نخوره

اگر ميخوايد كپي كنيد دقت كنيد كه اون يك ها رو پاك كنيد چون برنامه ايراد ميگره



دقت كنيد كه وقتي روي دكه كليك كرديد و وارد قسمت كد نويسي شديد در همون قسمت مربوط بايد اين كد ها نوشته بشه نه جاي ديگه



خوب بعد روي دكمه Exit كليك كنيد و بنويسيد Close





حالا ديگه كار تمام هست

براي اجراي برنامه ومشاهده نتيجه هم ميتونيد كليد F9 رو فشار بديد و هم ميتونيد مانند عكس عمل كنيد



خوب برنامه كه اجرا شد شما دو عدد رو در قسمت هاي مربوطه بنويسيد و بعد روي دكمه Add كليك كنيد و نتيجه رو ببينيد



براي بستن و خارج شدن از برنامه روي كليد Exit كليك كنيد
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
۱-۲-۱۳۹۱, ۰۳:۵۳ :عصر
ارسال: #3
RE: اموزش دلفي
يكي از مشكلاتي كه بسياري از تازه كاران در دلفي با آن مواجه مي شوند اجراي فايلهاي ديگر يا اجراي دستورات shell است.



در اين مقاله سعي ما بر اين است كه شما را با اجراي فايلهاي ديگر از درون
دلفي و كنترل آنها آشنا كنيم. شما پس از خواندن اين مقاله خواهيد توانست به
راحتي فايلهاي ديگر -و نه تنها exe- را از درون دلفي اجرا كنيد و حتي
دستورات shell را نيز صادر كنيد. به عنوان مثال ممكن است بخواهيد يك فايل
html را با Editor پيش فرض كاربر باز كنيد. يا يك فايل html را با Browser
پيش فرض كاربر باز كنيد. يا شايد بخواهيد يك فايل BMP را با اديتور پيش
فرض كاربر باز نماييد و يا اين كه يك فايل INF را نصب نماييد.



با خواندن اين مقاله شما مي توانيد به راحتي به تمامي اين اهداف برسيد.

تابع APIي وجود دارد به نام WinExec. شكل كلي اين تابع از اين قرار است:





WinExec(lpCmdLine: PAnsiChar; uCmdShow: Cardinal);

كه lpCmdLine خط دستور مورد نظر شما براي اجراي فايل و uCmdShow بايد يكي از مقادير زير را داشته باشد:

SW_HIDE SW_MAXIMIZE SW_MINIMIZE

SW_RESTORE SW_SHOW SW_SHOWDEFAULT

SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE

SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL





براي توضيحات بيشتر راجع به هر كدام از اين ثابت ها به راهنماي Windows SDK دلفي يا MSDN مراجعه كنيد.



تابع WinExec تابع بسيار قديمي و محدودي است و ما قصد نداريم در اين مقاله بيشتر از اين راجع به اين تابع صحبت كنيم.



تابع ديگري وجود دارد به نام ShellExecute. اين تابع در يونيت ShellAPI
تعريف شده است. بنابر اين لازم است يونيت ShellAPI را در ليست uses يونيت
خود وارد كنيد. اين يكي از توابع بسيار قدرتمند براي اجراي فايل است.

نگاهي به شكل كلي اين تابع بياندازيد:







function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall;



hWnd Handle پنجره اي كه اين دستور را فراخوانده است.

Operation نوع دستوري مورد نظر جهت اجرا

FileName نام فايل يا شاخه

Parameters پارامترهاي مورد نظر در هنگام اجراي فايل exe

Directory شاخه پيش فرض در هنگام اجراي فايل

ShowCmd مشخص كننده چگوني نمايش فايل در هنگام اجرا
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
۱-۲-۱۳۹۱, ۰۳:۵۳ :عصر
ارسال: #4
RE: اموزش دلفي
پارامتر اول يك متغيير از نوع HWND است.

لازم است براي كساني كه با مفهوم Handle در ويندوز آشنا نيستند توضيحاتي
راجع به Handle بدهم. هر پنجره يا آبجكتي در ويندوز داراي يك Handle است كه
براي دسترسي به آن پنجره يا آبجكت شما بايد از اين Handle استفاده كنيد.
در واقع يك Handle يك عدد در مبناي 16 است. Handle يك عدد unique يا همتا
است كه ويندوز آن را مقداردهي مي كند. اگر از يك پنجره دو Instance اجرا
شده باشد (مثلا يك برنامه دو بار اجرا شده باشد) هر كدام از اين Instanceها
يك Handle جداگانه دارند.

با اين تفاصيل پارامتر اول Handle پنجره اي است كه اين دستور را صادر كرده
است. شما براي اين پارامتر مي توانيد از Application.Handle استفاده كنيد و
يا آن را برابر 0 قرار دهيد. به علاوه مي توانيد Handle يك برنامه ديگر
را بدهيد.



در صورتي كه شما مي خواهيد پيغام هاي اخطار آن فايل را دريافت كنيد يا آن
را كنترل نماييد و يا تا اجراي كامل آن اجراي برنامه را متوقف كنيد با
Handle برنامه خود را با استفاده از Application.Handle به اين پارامتر
بدهيد.



پارامتر دوم مشخص كننده وظيفه اي است كه قرار است انجام شود. اين پارامتر
مقادير پيش فرضي ندارد و بستگي به خصوصيات فايل اجرايي دارد. روي يك فايل
از نوع Text كليد سمت راست ماوس را بزنيد. احتمالا موارد بالاي ليست
"open"، "Edit with ..." , "print" است. هر كدام از اين رشته هاي مي توانند
يك عمليات يا Operation باشند. به عنوان مثال شما مي خواهيد يك فايل Text
را چاپ كنيد. در اين صورت كافي است از عبارت print به عنوان operation
استفاده كنيد. يا مي خواهيد يك فايل rar را با استفاده از WinRar باز كنيد.
در اين صورت مي توانيد از "Extract files" استفاده كنيد. حتما تا به حال
متوجه شده ايد كه دستور ShellExecute چه مقدار انعطاف پذير است. با
استفاده از اين فرمان مي توانيد هر گونه دستور Shell را اجرا نماييد.



پارامتر سوم مشخص كننده نام فايل يا شاخه اي است كه شما مي خواهيد عمليات بر روي آن انجام شود.

پارامتر چهارم ليست پارامترهايي است كه تمايل داريد فايل exe با اين
پارامترها اجرا شود. پارامترها پنجم نيز نام شاخه پيش فرض در هنگام اجراي
فايل مورد نظر شماست. اگر شما فايل exe اي را اجرا كنيد و اين فايل exe
بخواهد از شاخه جاري فايلهاي اضافه اي را استفاده كند ويندوز شاخه جاري را
به اون مطابق با اين شاخه اطلاع خواهد داد. و اما آخرين پارامتر مشخص
كننده شكل اجراي فايل است. مقدار اين پارامتر مي تواند يكي از ثابت هايي
ليستي باشد كه در ابتداي اين مقاله عنوان شد. به عنوان مثال شما مي توانيد
از SW_HIDE استفاده كنيد كه در اين صورت فايل اجراي شما مخفي خواهد بود و
يا از SW_SHOWMINIMIZE استفاده كنيد كه در اين صورت برنامه شما
Minimizeشده اجرا مي شود.



و حالا به يك نكته خيلي مهم توجه كنيد:

1- رشته هاي اين تابع از نوع PChar هستند بنابراين شما بايد رشته هاي
string را به صورت PChar به اين تابع بدهيد. شما مي توانيد به طور عادي
رشته مورد نظر خود را به اين تابع بدهيد و يا در صورتي كه رشته مورد نظر
شما string است بايد با استفاده با استفاده از دستور PChar آن را Typecast
كنيد. به عنوان مثال:





ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + 'test.exe') , '', '', SW_SHOWNORMAL);



در اين مثال با استفاده از تابع ExtractFilePath و Application.ExeName كه
حاوي آدرس كامل فايل Exe است شاخه اي كه فايل exe در آن قرار دارد را پيدا
كرده ايم و سپس فايل test.exe را كه در كنار فايل اصلي اجرايي وجود دارد
را به آن اضافه كرده ايم. كل اين عبارت TypeCast شده است به PChar.

جهت اطلاع كساني كه نمي دانند TypeCast چيست. TypeCast فرآيندي است كه شما
متغيير يا Objectي را از يك نوع به نوع ديگري تبديل ميكنيد. كد زير را
نگاه كنيد و با نوع پيشرفته تري از TypeCast آشنا شويد:







procedure TForm1.Button1Click(Sender: TObject); begin TButton(Sender).Caption := 'Test'; end;



در اين مثال Sender را از نوع TObject است TypeCast كرده ايم به TButton. و
پراپرتي Caption آنرا تغيير داده ايم. براي اطلاعات بيشتر راجع به
TypeCast به كتب دلفي مراجعه كنيد.





و اجازه دهيد به چند مثال جالب نيز نگاهي بياندازيم:

edit كردن يك فايل HTML با Editor پيش فرض HTML:



ShellExecute(Handle, 'edit', 'test.htm', '', '', SW_SHOW);

نصب يك فايل INF





ShellExecute(Handle, 'install', 'divx.inf', '', '', SW_SHOW);

فشرده ساختن يك فايل با استفاده از winrar و ارسال آن به ايميل:





ShellExecute(Handle, 'compress and mail...', 'test.file', '', '', SW_SHOW);

ارسال ايميل به دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
و با موضوع "Great Article":





ShellExecute(0, 'open', 'mailto:mamouri@ganjafzar.com�subject=GreatArtic le ', '', '', SW_SHOWNORMAL);

چگونه يك فايل exe را اجرا كنيم و تا اتمام آن برنامه را متوقف كنيم؟





uses ShellAPI;

...

function ExecAndWait(const ExecuteFile, ParamString : string): boolean;

var

SEInfo: TShellExecuteInfo;

ExitCode: DWORD;

begin

FillChar(SEInfo, SizeOf(SEInfo), 0);

SEInfo.cbSize := SizeOf(TShellExecuteInfo);

with SEInfo do

begin

fMask := SEE_MASK_NOCLOSEPROCESS;

Wnd := Application.Handle;

lpFile := PChar(ExecuteFile);

lpParameters := PChar(ParamString);

nShow := SW_HIDE;

end;

if ShellExecuteEx(@SEInfo) then

begin

repeat

Application.ProcessMessages;

GetExitCodeProcess(SEInfo.hProcess, ExitCode);

until (ExitCode <> STILL_ACTIVE) or

Application.Terminated;

Result:=True;

end

else Result:=False;

end;







همان طور كه ملاحظه مي كنيد اين تابع به يونيت ShellAPI نياز دارد و بايد اين يونيت را در ليست uses يونيت خود اضافه كنيد.

در اين تابع از تابع ديگري به نام ShellExecuteEx استفاده شده است. اين
تابع بر خلاف ShellExecute فقط يك پارامتر دارد كه بايد برابر متغييري از
نوع TShellExecuteInfo قرار بدهيد. در ابتدا بايد با استفاده از تابع
FillChar آنرا مقداردهي كنيد و وجود آنرا به ويندوز اطلاع دهيد. در واقع آن
را Create كنيد:





FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo);



آبجكت ShellExecuteEx داراي پارامترهاي زير است:





cbSize: DWORD;

fMask: ULONG;

Wnd: HWND;

lpVerb: PAnsiChar;

lpFile: PAnsiChar;

lpParameters: PAnsiChar;

lpDirectory: PAnsiChar;

nShow: Integer;

hInstApp: HINST;
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
۱-۲-۱۳۹۱, ۰۳:۵۴ :عصر
ارسال: #5
RE: اموزش دلفي
براي اطلاعات بيشتر راجع به اين پارامترها به راهنماي Windows SDK دلفي يا
MSDN مراجعه كنيد. خروجي اين تابع از نوع boolean است و مشخص كننده اين
است كه آيا اين تابع با موفقيت اجرا شده است يا نه؟

تابع ExecAndWait پس از اين كه اطمينان پيدا كرد كه فايل با موفقيت اجرا
شده است يك حلقه repeat..until تشكيل داده. در داخل repeat دستور
Application.ProcessMessage صادر شده است تا برنامه بتواند messageها را
دريافت كند. سپس با استفاده از GetExitCodeProcess مقدار خروجي پروسس اجرا
شده دريافت مي گردد. در صورتي كه خروجي اين تابع مخالف STILL_ACTIVE بود
(كه نشانگر اجراي پروسس است) حلقه با كار خود ادامه مي دهد.



خروجي اين تابع مشخص كننده اجرا يا عدم اجراي فايل اجرايي است.



و حالا به چند مثال جالب ديگر توجه كنيد:

1- دسترسي به HotMail از درون دلفي:





program dummy;

var ToAddress: string;

EightSpaces: string;

begin

ToAddress := 'john@pacbell.net';

// Don't know why but this is required to get the

// correct compose address...

EightSpaces := ' ';

ShellExecute(Handle, PChar('open'), PChar('rundll32.exe'),
PChar('C:\PROGRA~1\INTERN~1\HMMAPI.DLL,MailToProto colHandler' +
EightSpaces + ToAddress), nil, SW_NORMAL)

end.



2- نمايش ديالوگ مشخصات يك فايل:







procedure ShowPropertiesDialog(Filename: string);

var

SEI: TShellExecuteInfo;

begin

FillChar(SEI, SizeOf(SEI), 0);

with SEI do

begin

cbSize := SizeOf(SEI);

lpFile := PChar(Filename);

lpVerb := 'properties';

fMask := SEE_MASK_INVOKEIDLIST;

end;

ShellExecuteEx(@SEI);

end;





3- اجراي ديالوگ Screen ويندوز (Control Panel > Display)





ShellExecute(HInstance, nil, PCHAR('rundll32.exe'), PCHAR('shell32.dll,
Control_RunDLL desk.cpl, , 3') { 3 is the tab index }, NIL, 1);



همان طور كه متوجه شديد 3 شماره Tabي است كه مورد نظر شماست.



4- يك مثال كامل تر از فرستادن ايميل با استفاده از Outlook يا ارسال كننده پيش فرض email:





var

mail: string;

begin

mail := 'mailto:you@you.com' +

'�subject=hello' +

'&cc=me@me.com' +

'&body=Delphi is cool! مهمان ها نمي توانند تصاوير را ببينند و دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.

';

ShellExecute(Self.Handle, 'open', PChar(mail), nil, nil, SW_SHOWNORMAL);



خروجي هاي تابع ShellExecute يا ShellExecuteEx



خروجي هاي اين دو تابع مي تواند يكي از مقادير زير باشد:



0 سيستم عامل داراي resourceهاي كافي يا حافظه كافي جهت اجرا نيست.

ERROR_FILE_NOT_FOUND فايل مورد نظر پيدا نشد.

ERROR_PATH_NOT_FOUND آدرس مشخص شده پيدا نشد.

ERROR_BAD_FORMAT فايل EXE نامعتبر است يا اين يك فايل EXE از نوع Win32 نيست.

SE_ERR_ACCESSDENIED سيستم عامل دسترسي به فايل مشخص شده ندارد.

SE_ERR_ASSOCINCOMPLETE association فايل مورد نظر شما ناقص يا نامعتبر
است. مثلا مشخص نشده كه فايل bmp كه شما مي خواهيد آن را اجراه كنيد بايد
با چه برنامه اي باز شود.

SE_ERR_DDEBUSY DDE transaction مربوطه كامل نشد زيرا DDE transactionهاي ديگري در حال اجرا بودند.

SE_ERR_DDEFAIL DDE transaction ناموفق بود.

SE_ERR_DDETIMEOUT DDE transaction نتوانست اجرا شود زيرا درخواست Time Out شد.

SE_ERR_DLLNOTFOUND فايل dynamic-link library يا dll مشخص شده پيدا نشد.

SE_ERR_FNF فايل مورد نظر پيدا نشد.

SE_ERR_NOASSOC هيچ برنامه اي با پسوند فعلي فايل منطبق نشده است. مثلا
مشخص نشده كه فايل bmp كه شما مي خواهيد آن را اجراه كنيد بايد با چه
برنامه اي باز شود.

SE_ERR_OOM حافظه كافي جهت اجراي عمليات وجود ندارد.

SE_ERR_PNF آدرس مشخص شده پيدا نشد.

SE_ERR_SHARE يك خطاي sharin violation پيش آمد. يعني فايل مورد نظر share شده بود.





خلاصه:

در اين مقاله با سه تابع API مهم به نام هاي WinExec و ShellExecute و
ShellExecuteEx آشنا شديم و پارامترهاي آنها را بررسي كرديم. به علاوه
مثالهاي متعددي راجع به استفاده از ShellExecute ارائه داديم. به علاوه
ثابتهاي استفاده شده در اين تابع ها را ليست كرده و بعضا آنها را مورد
بررسي قرار داديم. همچنين تابعي به نام ExecAndWait ارائه داديم كه كار آن
اجراي يك فايل exe و متوقف كردن برنامه تا اتمام فايل exe آشنا شديم و
ساختمان داخلي اين تابع را مورد بررسي قرار داديم.
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
۱-۲-۱۳۹۱, ۰۳:۵۵ :عصر
ارسال: #6
RE: اموزش دلفي
يكي از فرمتهاي محبوب وب است و به راحتي مي توان برايflash ساخت
Interfaceها در برنامه از آن استفاده كرد. بعضي از برنامه نويسان معتقدند
استفاده از flash سبب سنگين شدن برنامه، وابستگي برنامه به ActiveX فلش،
امكان نداشتن تبادل اطلاعات بين flash و دلفي و مشكلات ديگري مي شود.

در اين مقاله خواهيد ديد كه به راحتي تمامي اين مشكلات را مي توانيد رفع كنيد.



نصب 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
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
۱-۲-۱۳۹۱, ۰۳:۵۵ :عصر
ارسال: #7
RE: اموزش دلفي
نقل قول: متدها:





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
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
۱-۲-۱۳۹۱, ۰۳:۵۶ :عصر
ارسال: #8
RE: اموزش دلفي
نصب اكتيوايكس فلش روي كامپيوتر كاربر

براي اين كه كاربر نهايي بتواند از برنامه شما استفاده كند بايد اكتيوايكس
فلش را داشته باشد. در واقع شما بايد اكتيوايكس مربوطه را براي او نصب
كند. روش كار به اين گونه است كه شما بايد چك كنيد كه آيا كاربر نهايي
اكتيوايكس فلش را بر روي دستگاه خود نصب كرده است يا نه و در صورتي كه وي
اين اكتيوايكس را ندارد برنامه شما بايد به طور اتوماتيك آن را نصب كنيد.

براي پياده سازي اين روش ما بايد در ابتدا 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;









خوب! فكر كنم با توضيحاتى كه در اين مقاله اومده، قانع شده باشيد كه flash يكى از بهترين راه حلها براى طراحى Interfaceهاست.
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
۱-۲-۱۳۹۱, ۰۳:۵۶ :عصر
ارسال: #9
RE: اموزش دلفي
اين مقاله مناسب كاربراني مي باشد كه استفاده زيادي

از گرافيك در برنامه هاي خودشان مي كنند. توسط اين مقاله

مي توانيد تا يك تصوير نقشه بيتي را در داخل صفحه

با زواياي مختلف بچرخانيد .





( شكل شماره – 1 )



اجازه دهيد تا در ابتدا نگاهي به اين موضوع از نظر رياضيات

بياندازيم. از نظر رياضيات ، هر نقطه اي مي تواند حول

يك نقطه ديگر و با زواياي مختلف بچرخد. اگر به شكل شماره 1

توجه فرماييد ، خواهيد ديد كه نقطه ( يا نيم خط ( p مي تواند

حول نقطه o و در زواياي مختلفي بچرخد.



فرمولي كه در رياضي براي چرخاندن يك نقطه حول نقطه ثابت

و با زاويه مشخص است ، بدين صورت مي باشد :





حال اگر بخواهيم نقطه مذكور را حول يك نقطه ديگر بچرخانيم

به اين فرمول احتياج پيدا خواهيم كرد :





اين فرمولها به صورت ماتريسي نوشته شده اند.

به طور كلي ماتريسها كمك بسيار زيادي در رابطه با گرافيك

و تغييرات آن اعمال مي كنند. در بسياري از روشهاي ويرايش

يك تصوير يا گرافيك ، ما از ماتريسها كمك مي گيريم.



حال اجازه دهيد اين فرمول را به دستورات دلفي تبديل كنيم

و نتيجه آن را مشاهده كنيم ...
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
۱-۲-۱۳۹۱, ۰۳:۵۷ :عصر
ارسال: #10
RE: اموزش دلفي
كد:



CONST

MaxPixelCount = 32768;



TYPE

TRGBTripleArray = ARRAY[0..MaxPixelCount-1] OF TRGBTriple;

pRGBTripleArray = ^TRGBTripleArray;

...



// "Simple" approach. For pixel (i,j), use "reverse" rotation to find

// where the rotated pixel must have been before the rotation.

// Don't bother with center of pixel adjustment.

// Assumes input BitmapOriginal has PixelFormat = pf24bit.

FUNCTION RotateBitmapMethod1 (CONST BitmapOriginal: TBitmap;

CONST iRotationAxis, jRotationAxis: INTEGER;

CONST AngleOfRotation: DOUBLE {radians} ): TBitmap;



VAR

cosTheta : EXTENDED;

i : INTEGER;

iOriginal : INTEGER;

iPrime : INTEGER;

j : INTEGER;

jOriginal : INTEGER;

jPrime : INTEGER;

RowOriginal: pRGBTripleArray;

RowRotated : pRGBTRipleArray;

sinTheta : EXTENDED;

BEGIN

// The size of BitmapRotated is the same as BitmapOriginal. PixelFormat

// must also match since 24-bit GBR triplets are assumed in ScanLine.

RESULT := TBitmap.Create;

RESULT.Width := BitmapOriginal.Width;

RESULT.Height := BitmapOriginal.Height;

RESULT.PixelFormat := pf24bit; // Force this



// Get SIN and COS in single call from math library

sincos(AngleOfRotation, sinTheta, cosTheta);



// If no math library, then use this:

// sinTheta := SIN(AngleOfRotation);

// cosTheta := COS(AngleOfRotation);



// Step through each row of rotated image.

FOR j := RESULT.Height-1 DOWNTO 0 DO

BEGIN

RowRotated := RESULT.Scanline[j];

jPrime := j - jRotationAxis;



FOR i := RESULT.Width-1 DOWNTO 0 DO

BEGIN

iPrime := i - iRotationAxis;

iOriginal := iRotationAxis + ROUND(iPrime * CosTheta - jPrime * sinTheta);

jOriginal := jRotationAxis + ROUND(iPrime * sinTheta + jPrime * cosTheta);



// Make sure (iOriginal, jOriginal) is in BitmapOriginal. If not,

// assign blue color to corner points.

IF (iOriginal >= 0) AND (iOriginal <= BitmapOriginal.Width-1) AND

(jOriginal >= 0) AND (jOriginal <= BitmapOriginal.Height-1)

THEN BEGIN

// Assign pixel from rotated space to current pixel in BitmapRotated

RowOriginal := BitmapOriginal.Scanline[jOriginal];

RowRotated := RowOriginal[iOriginal]

END

ELSE BEGIN

RowRotated[i].rgbtBlue := 255; // assign "corner" color

RowRotated[i].rgbtGreen := 0;

RowRotated[i].rgbtRed := 0

END



END

END

END {RotateBitmapMethod1};
[/i][/i][/i]
بودن آدم عین هو امضاشه...
-متین فروزنده:؟؟
-حاضر...
همین که خودمم نه یکی دیگه،یعنی:
امضا،متین فروزنده...
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس شده توسط MostafA ، nasrin67
ارسال پاسخ 


کسانی که از این موضوع بازدید کرده اند . . . ( آز پی ان یو )
4 کاربر زیر موضوع را خوانده اند:
علی بی غم (۸-۸-۱۳۹۲, ۰۹:۴۴ :عصر)، rassel (۸-۹-۱۳۹۲, ۰۶:۱۷ :عصر)، marziiiii (۲۶-۲-۱۳۹۳, ۱۰:۲۹ :عصر)، zarei2000 (۱۲-۹-۱۳۹۳, ۰۹:۰۶ :صبح)

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان


آپلودسنتر آز پي ان يو تالار گفتمان آز پي ان يو
تبلیغات نیازمندی های استان چهارمحال و بختیاری